汇编语言程序设计课后习题解答.doc

上传人:rrsccc 文档编号:11051183 上传时间:2021-06-22 格式:DOC 页数:147 大小:820KB
返回 下载 相关 举报
汇编语言程序设计课后习题解答.doc_第1页
第1页 / 共147页
汇编语言程序设计课后习题解答.doc_第2页
第2页 / 共147页
汇编语言程序设计课后习题解答.doc_第3页
第3页 / 共147页
汇编语言程序设计课后习题解答.doc_第4页
第4页 / 共147页
汇编语言程序设计课后习题解答.doc_第5页
第5页 / 共147页
点击查看更多>>
资源描述

《汇编语言程序设计课后习题解答.doc》由会员分享,可在线阅读,更多相关《汇编语言程序设计课后习题解答.doc(147页珍藏版)》请在三一文库上搜索。

1、汇编语言程序设计(宋人杰 主编)课后习题解答第1章 汇编语言基础知识1简述汇编语言源程序、汇编程序、和目标程序的关系。答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。2. 简述汇编语言的优缺点。答:(1) 汇编语言的优点: 可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. 目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 可与高级语言配合使用,应用十分广泛。(2) 汇编语言的缺点: 通用性和可移植性较差 相对于高级语言来说较繁锁、易出错、不够直观。3CPU的寻址能力为8KB,那么它的地址总线的宽度为多少

2、?答:134. 1KB的存储器有多少个存储单元?答:1024个字节。5. 指令中的逻辑地址由哪两部分组成?答:指令中的逻辑地址由段基址和偏移量组成。6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。(1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据的

3、值。答: 字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为多少?若段内偏移地址为2228H,则段基地址为多少?答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH9. 在实模式环境中,一个段最长不能超过多少字节?答:64KB10. 实模式可寻址的内存范围是多少?答:1MB第2章 汇编语言源程序格式1请解释变量和标号的含义,两者有何区别?答:标号代表一条指令所在单元的地址,在代码段中定义;变量是存放数据的存储单元的地址符号名,在除代码段

4、以外的其他段中定义。变量和标号的主要区别在于变量指的是数据,而标号则对应的是指令。2. 变量和标号有什么属性?答:都具有三种属性:段属性、偏移属性和类型属性3. 伪指令语句与指令语句的区别是什么?伪指令有什么用途?答:伪指令并不像指令语句那样在程序运行期间由计算机自动执行,而是在汇编程序对源程序汇编期间由汇编程序处理的操作。伪指令可以完成如处理器选择、定义程序模块、数据定义、存储区分配、指示程序开始和结束等功能。4. 数值返回运算符有哪几种?简述LENGTH和SIZE的区别。答:数值返回运算符包括:SEG(取段地址)、OFFSET(取偏移地址)、TYPE(取类型值)、LENGTH(取长度)、S

5、IZE(取总字节数)。对于变量中使用DUP的情况,LENGTH回送分配给该变量的单元数,对于其他情况则送1;而SIZE会送分配给变量的总字节数,也就是LENGTH和TYPE的乘积。5. 画图说明下列伪指令所定义的数据在内存中的存放形式。 (1) ARR1 DB 6,34H,-7 (2) ARR2 DW 3C5DH,1,? (3) ARR3 DB 2 DUP(1,2,DUP(2,5),3) (4) ARR4 DB HELLO (5) ARR% DB 1234答:(1) 见题图2.1题图2.1 (2) 见题图2.2题图2.2 (3) 见题图2.3题图2.3 (4) 见题图2.4题图2.4 (5)

6、题图2.5题图2.56. 写出下列变量定义语句。(1) 为缓冲区BUF1预留20B的存储空间。(2) 将字符串ABCD,1234存放于BUF2存储区中。答: (1) BUF1 DB 20 DUP(?) (2) BUF2 DB ABCD DB 12347. 符号定义语句如下: BUF DB 2,3,4,5,345 EBUF DB 8 LT DB EQU EBUF-BUF 问LT的值是多少?答:LT的值为78. 假设程序中的数据定义如下: A DW ? B DB 16 DUP(?) C DD ? T EQU $-A 问T的值是多少?它表示什么意义?答:T的值是22;它表示从变量A到T之间分配的存储

7、空间(字节)数目。9. 如何规定一个程序执行的开始位置?主程序执行结束应该如何返回DOS?源程序在何处停止汇编过程?答:程序开始位置:END伪指令后的标号所对应的地址;应用程序开始伪指令.STARTUP处。 返回DOS:RET指令结合PUSH DS等指令;用DOS功能调用的第4CH号中断;.EXIT伪指令。 END伪指令处停止汇编过程。10.EQU伪指令与“=”伪指令有何区别?答:在同一程序中,“=”伪指令可对一个符号重复定义11.指出下列伪指令表达方式的错误,并改正之。 (1) DATA SEG (2) SEGMENT CODE (3) MYDATA SEGMENT DATA ENDS (4

8、) MAIN PROC FAR END MAIN MAIN ENDP答:(1) SEG改为SEGMENT (2) 没有段名 (3) DATA ENDS改为MYDATA ENDS (4) END MAIN删除第3章 8086/8088寻址方式及指令系统1什么是寻址方式,8086/8088微处理器有几种寻址方式,各类寻址方式的基本特征是什么?答:寻址方式就是寻找指令中操作数的方式,或寻找指令转移目的地址的方式。 8086/8088微处理器的寻址方式分为数据寻址方式和程序转移寻址方式。数据寻址方式主要包括立即数寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址方式、寄存器相对寻址方式、基址变址寻

9、址方式和相对基址变址寻址方式;程序转移寻址方式主要包括段内直接寻址、段内间接寻址、段间直接寻址、段间间接寻址。立即数寻址:操作数就在指令中,作为指令的一部分,跟在操作码后存放在代码段。寄存器寻址:操作数在寄存器中,指令中指定寄存器号。直接寻址方式:操作数在存储器中,指令直接包含操作数的有效地址EA。寄存器间接寻址:操作数在存储器中,操作数的有效地址在SI,DI,BX,BP这4个寄存器之一中。寄存器相对寻址:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)的内容加上8位或16位的位移之和。基址变址寻址:操作数在存储器中,操作数的有效地址是一个基址寄存器(

10、BX,BP)加上变址寄存器(SI,DI)的内容。相对基址变址寻址:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)和变址寄存器(SI,DI)的内容加上8位或16位的位移之和。段内直接寻址:转向的有效地址是当前IP寄存器的内容和指令中指定的8位或16位位移量之和。段内间接寻址:转向的有效地址是一个寄存器或是一个存储单元的内容。段间直接寻址:在指令中直接提供了转向段地址和偏移地址。段间间接寻址:用存储器里的两个相继字的内容来取代IP和CS寄存器中的原始内容,以达到段间转移的目的。2. 假定(DS)=1000H,(SI)=007FH,(BX)=0040H,(BP)=0016H,变量T

11、ABLE的偏移地址为0100H,试指出下列指令的源操作数字段的寻址方式,它的有效地址(EA)和物理地址(PA)分别是多少? (1) MOV AX,1234H (2) MOV AX,TABLE (3) MOV AX,BX+100H (4) MOV AX,TABLEBPSI答:(1) 直接寻址,EA=1234H,PA=11234H (2)直接寻址,EA=0100H,PA=10100H (3) 寄存器相对寻址,EA=0140H,PA=10140H(4)相对基址变址寻址,EA=0195H,PA=10195H3. 若TABLE为数据段0032单元的符号名,其中存放的内容为1234H,试问下列两条指令有什

12、么区别?执行完指令后,AX寄存器的内容是什么? MOV AX,TABLE LEA AX,TABLE答:第一条指令是取0032单元的内容,执行完后AX的内容是1234H 第二条指令是取TABLE的偏移地址,执行完后AX的内容为0032H4. 指出下列指令的错误。(1) MOV CX,DL (2) MOV IP,AX (3) MOV ES,1234H (4) MOV ES,DS (5) MOV AL,300H (6) MOV SP,AX (7) MOV AX,BX+DI (8) MOV 20H,AH答:(1) 两操作数长度不一致 (2) 目的操作数不能为IP (3) 立即数不能直接送段寄存器 (4

13、) 两个段寄存器之间不能直接进行数据传送 (5) 两操作数长度不一致 (6) SP不能用作间址寄存器 (7) BX+DI改为BXDI或BX+DI (8) 目的操作数不能为立即数5. 指出下列指令的错误。(1) POP CS(2) SUB SI,DI(3) PUSH AH(4) ADC AX,DS(5) XCHG SI,30H(6) OUT DX,AH(7) IN AL,3FCH (8) MUL 5答:(1) POP指令不允许使用CS (2) 两操作数不能同时是存储器寻址方式 (3) 堆栈的操作必须以字为单位 (4) 段寄存器不允许直接参加运算 (5) XCHG指令的操作数不允许是立即数 (6)

14、 OUT指令只能用AL做源操作数 (7) 端口号大于255,必须将其放到DX中 (8) MUL指令源操作数不允许是立即数6. 请分别用一条汇编语言指令完成如下功能。 (1) 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。 (2) 用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 (3) 用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。 (4) 把数0A0H与AL寄存器的内容相加,并把结果送回AL中。答:(1)ADD DX,BX (2)ADD AL,BX+SI (3)ADD BX

15、+0B2H,CX (4)ADD AL,0A0H7. 求出以下各十六进制数与十六进制数58B0之和,并根据结果设置标志位SF、ZF、CF和OF的值。(1) 1234H(2) 5678H(3) 0AF50H (4) 9B7EH答:(1)和为6AE4H,SF=0,ZF=0,CF=0,OF=0 (2)和为0AF28H,SF=1, ZF=0, CF=0, OF=1 (3)和为0800H, SF=0, ZF=0, CF=1, OF=0 (4)和为0F42EH, SF=1, ZF=0, CF=0, OF=08. 执行指令ADD AL,72H前,(AL)=8EH,标志寄存器的状态标志OF、SF、ZF、AF、P

16、F和CF全为0,指出该指令执行后标志寄存器的值。答:指令执行后,AL的内容为0000000H,且有进位,标志寄存器中各标志位的值为:OF=0,SF=0,ZF=1,AF=1,PF=1,CF=19. 已知程序段如下: MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX 试问:1、每条指令执行完后,AX的内容是什么?2、每条指令执行完后,CF、SF和ZF的值是什么?3、程序执行完后,AX和DX的内容是什么?答:(1)(2)MOV AX,1234H ; (AX)=1234H,各标志位不变MOV CL,4 ; (AX)=1234H,各标志位不变R

17、OL AX,CL ; (AX)=2341H,CF=1,其它标志位不变DEC AX ; (AX)=2340H,CF不变,SF=0,ZF=0MOV CX,4 ; (AX)=2340H,各标志位不变MUL CX ; (AX)=8D00H,CF=0,ZF=0,SF=0(3) 程序执行完后,(AX)=8D00H,(DX)=0000H10. 编程序段,将AL、BL、CL、DL相加,结果存在DX中。答:MOV AH,0ADD AL,BLADC AH,0ADD AL,CLADC AH,0ADD AL,DLADC AH,0MOV DX,AX11. 编程序段,从AX中减去DI,SI和BP中的数据,结果送BX。答:

18、SUB AX,DISUB AX,SISUB AX,BPMOV BX,AX12. 假设(BX)=0E3H,变量VALUE中存放的内容为79H,确定下列各指令单独执行后的结果。 (1) OR BX,VALUE (2) AND BX,VALUE (3) XOR BX,OFFH (4) AND BX,01H (5) TEST BX,05H(6) XOR BX,VALUE答: (1) (BX)=0FBH(2) (BX)=61H(3) (BX)=1CH(4) (BX)=01H(5) (BX)=0E3H (6) (BX)=9AH13. 已知数据段500H600H处存放了一个字符串,说明下列程序段执行后的结果

19、。MOV SI,600HMOV DI,601HMOV AX,DSMOV ES,AXMOV CX,256STDREP MOVSB答:将数据段501H600H中存储的字符串移到数据段502601H中14. 说明下列程序段的功能。CLDMOV AX,0FEFHMOV CX,5MOV BX,3000HMOV ES,BXMOV DI,2000HREP STOSW答:将附加段的32000H开始的连续5个字初始化为0FEFH15. 判断下列程序段跳转的条件。 (1) XOR AX,1E1EH JE EQUAL (2) TEST AL,10000001B JNZ THERE (3) CMP CX,64H JB

20、 THERE答:(1) AX中的值为1E1EH时会跳转(2) AL的最低和最高位至少有一位为1时发生跳转(3) CX中的值小于64H时发生跳转16. 选取正确指令,完成以下任务。 (1) 右移DI三位,并将0移入最左一位。(2) AL内容左移一位,0移入最后一位。(3) DX寄存器右移一位,并且使结果的符号位与原符号位相同。答:(1) MOV CL,3 SHR DI,CL(2) SHL AL,1(3) SAR DX,117. 假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用比较指令和条件转移指令实现以下判断。 (1) 若DXDI,转到ABOVE执行(2) 若AXSI,转到GRE

21、ATER执行。 (3) 若CX=0,转到ZERO执行(4) 若AX-SI产生溢出,转到OVERFLOW执行。 (5) 若SIAX,转到LESS_EQ执行。(6) 若DIDX,转到BELOW_EQ执行。答:(1) CMP DX,DI JA ABOVE(2) CMP AX,SI JG GREATER(3) CMP CX,0 JE ZERO(4)CMP AX,SIJO OVERFLOW(5) CMP AX,SIJGE LESS_EQ(6) CMP DX,DIJAE BELOW_EQ18. 有一个首地址为ARRAY的20个字数组,说明下列程序段的功能。 MOV CX,20 MOV AX,0 MOV S

22、I,AXSUM_LOOP: ADD AX,ARRAYSI ADD SI,2 LOOP SUM_LOOP MOV TOTAL,AX答:将首地址为ARRAY的20个字数组元素求和,将结果存放到TOTAL单元22. 已知内存中起始地址为BLOCK的数据块(字节数为COUNT)的字节数据有正有负。试编写一个程序,将其中的正、负分开,分别送至同一段中的两个缓冲区,设正、负缓冲区的首地址分别为PLUS和MINUS。答: DATA SEGMENT BLOCK DB 16 DUP(?) PLUS DB 16 DUP(?) MINUS DB 16 DUP(?) DATA ENDS CODE SEGMENT AS

23、SUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BLOCK MOV DI,OFFSET PLUS MOV BX,OFFSET MINUS MOV CX,COUNT NEXT:MOV AL,SI TEST AL,80H JNZ MD MOV DI,AL INC DI JMP AGAIN MD: MOV BX,AL INC BX AGAIN: INC SI LOOP NEXT MOV AH,4CH INT 21H CODE ENDS END START19. 按照下列要求,编写相应的程序段。 (1) 已知字符串STRIN

24、G包含有32KB内容,将其中的“$”符号替换成空格。 (2) 有一个100个字节元素的数组,其首地址为ARRAY,将每个元素减1(不考虑溢出)存于原处。 (3) 统计以“$”结尾的字符串STRING的字符个数 (4) 假设从B800H:0开始存放有16个16位无符号数,编程求它们的和,并把32位的和保存在DX、AX中。答:(1) MOV SI,0 MOV CX,8000H AGAIN:CMP STRINGSI,$ JNZ NEXT MOV STRINGSI,20H NEXT:INC SI LOOP AGAIN(2)MOV SI,0MOV CX,100 AGAIN:DEC ARRAYSI INC

25、 SI LOOP AGAIN(3)XOR SI,SI COMP:CMP STRINGSI,$ JE OVER INC SI JMP COMP OVER:RET(4) MOV AX,0B800H MOV DS,AX XOR SI,SI XOR DX,DX MOV CX,0FH MOV AX,SI AGAIN:INC SI INC SI ADD AX,SI JNC NEXT INC DX NEXT:LOOP AGAIN RET 20. 编写程序,把ARRAY1和ARRAY2中20个字节数分别相加,结果放到TABLE中。 (1) 假定数据为无符号数,如果结果大于255则结果为255。 (2) 假定结

26、果为带符号数,如果有溢出则保存结果为0。答:(1) DATA SEGMENT ARRAY1 DB 20 DUP(?) ARRAY2 DB 20 DUP(?) TABLE DB 20 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,20 MOV SI,0 AGAIN:MOV AL,ARRAY1SI ADD AL,ARRAY2SI JC LABEL1 MOV TABLESI,AL JMP LABEL2 LABEL1:MOV TABLESI,255 LABEL2:INC S

27、I LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS END START (2) DATA SEGMENT ARRAY1 DB 20 DUP(?) ARRAY2 DB 20 DUP(?) TABLE DB 20 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,20 MOV SI,0 AGAIN:MOV AL,ARRAY1SI ADD AL,ARRAY2SI JO LABEL1 MOV TABLESI,AL JMP LABEL2 LABEL

28、1:MOV TABLESI,0 LABEL2:INC SI LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS END START 21. 字符串ATR1保存着100个字节的ASCII码,试编写一个程序统计该字符串中空格(20H)的个数。答: DATA SEGMENT ATR1 DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,100 XOR DI,DI XOR SI,SI COMP:CMP ATR1SI,20H INC SI

29、JNE NEXT INC DI NEXT:LOOP COMP MOV AH,4CH INT 21H CODE ENDS END START第4章 顺序、分支与循环程序设计1试编写一个程序实现将从键盘输入的小写字母用大写字母形式显示出来。答: DATA SEGMENT STRMESSAGE DB “请输入小写字符”,0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET STRMESSAGE MOV AH,9H INT 21H MOV AH,1 INT 21

30、H MOV DL,AL SUB DL,20H MOV AH,2 INT 21H EXIT:MOV AH,4CH INT 21H CODE ENDS END START2在内存BUFFER单元中定义有10个16位数,试寻找其中的最大值及最小值,并放在指定的存储单元MAX和MIN中。答: DATA SEGMENT BUFFER DW 10 DUP(?) MIN DW ? MAX DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BX,OFFSET BUFFER MOV AX,BX M

31、OV DX,BX MOV SI,0 MOV CX,10 MM:MOV DI,BX+SI CMP AX,DI JB T1 JMP T2 T1:CMP DX,DI JB T11 JMP T21 T11:MOV DX,DI T21:JMP ENT T2: MOV AX,DI ENT:ADD SI,2 LOOP MM MOV MAX,DX MOV MIN,AX MOV AH,4CH INT 21H CODE ENDS END START3统计字型变量DATBUF中有多少位0,多少位1,并分别记入COUNT0和COUNT1中。答: DATA SEGMENT DATBUF DW 1234H COUNT0

32、DB ? COUNT1 DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BX,DATBUF AGAIN:CMP BX,0 JE EXIT SHL BX,1 JNC ZERO INC COUNT1 JMP AGAIN ZERO:INC COUNT0 JMP AGAIN EXIT:MOV AH,4CH INT 21H CODE ENDS END START4在BUFFER开始的单元中存放着一个字符串,请判断该字符串中是否存在数字,如有则将X单元置1,否则置0。答: DATA SEGMENT BUFFER DB JAVA2COMPUTER N=$-BUFFER X DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1