汇编语言程序设计(第四版)第2章【课后答案】 .pdf

上传人:赵** 文档编号:69183471 上传时间:2022-12-31 格式:PDF 页数:18 大小:579.06KB
返回 下载 相关 举报
汇编语言程序设计(第四版)第2章【课后答案】 .pdf_第1页
第1页 / 共18页
汇编语言程序设计(第四版)第2章【课后答案】 .pdf_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《汇编语言程序设计(第四版)第2章【课后答案】 .pdf》由会员分享,可在线阅读,更多相关《汇编语言程序设计(第四版)第2章【课后答案】 .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.汇编语言程序设计 第四版 【课后习题答案】-囮裑為檤 第 2 章 8086 的指令系统 习题2.1 DS2000H、BX0100H、SI0002H,存储单元20100H20103H依次存放12 34 56 78H,21200H21203H依次存放 2A 4C B7 65H,说明以下每条指令执行完后 AX 存放器的内容。1 mov ax,1200h 2 mov ax,bx 3 mov ax,1200h 4 mov ax,bx 5 mov ax,bx+1100h 6 mov ax,bx+si 7 mov

2、 ax,bxsi+1100h 解答 1AX1200H 2AX0100H 3AX4C2AH ;偏移地址=bx=0100h 4AX3412H ;偏移地址=bx=0100h 5AX4C2AH ;偏移地址=bx+1100h=1200h 6AX7856H ;偏移地址=bx+si=0100h+0002h=0102h 7AX65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h 习题 2.2指出以下指令的错误 1 mov cx,dl 2 mov ip,ax 3 mov es,1234h 4 mov es,ds 5 mov al,300 6 mov sp,ax 7 mo

3、v ax,bx+di 8 mov 20h,ah 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.解答 1两操作数类型不匹配 2IP 指令指针禁止用户访问 3立即数不允许传给段存放器 4段存放器之间不允许传送 5两操作数类型不匹配 6目的操作数应为 SI 7源操作数应为 BX+DI 8立即数不能作目的操作数 习题 2.3数字 0 9 对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以 table 为首地址设为 200H的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行

4、结果。lea bx,table mov al,8 xlat 解答 lea bx,table ;获取 table 的首地址,BX200H mov al,8 ;传送欲转换的数字,AL8 xlat ;转换为格雷码,AL12H P35 习题 2.4什么是堆栈,它的工作原那么是什么,它的根本操作有哪两个,对应哪两种指令?解答 堆栈是一种按“先进后出原那么存取数据的存储区域,位于堆栈段中,使用 SS 段存放器记录其段地址;它的工作原那么是先进后出;堆栈的两种根本操作是压栈和出栈,对应的指令是 PUSH 和 POP。习题 2.5SS=2200H、SP=00B0H,画图说明执行下面指令序列时,堆栈区和 SP

5、的内容如何变化?mov ax,8057h push ax mov ax,0f79h push ax pop bx pop bx 解答 mov ax,8057h 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop bx ;DS:0f79h=8057h 习题 2.6给出以下各条指令执行后 AL 值,以及 CF、ZF、SF、OF 和 PF 的状态:mov al,89h add al,al add al,9dh cmp al,0bch sub al,al de

6、c al inc al 解答 mov al,89h ;AL=89h CF ZF SF OF PF add al,al ;AL=12h 1 0 0 1 1;1000 1001+1000 1001 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.10001 0010 add al,9dh ;AL=0afh 0 0 1 0 1;0001 0010+1001 1101 1010 1111 cmp al,0bch ;AL=0afh 1 0 1 0 1;1010 1111-1011 1100*0100 0011 sub al,al ;AL=00h 0 1 0

7、 0 1 dec al ;AL=0ffh 0 0 1 0 1;0000 0000-0000 0001 *1111 1111 inc al ;AL=00h 0 1 0 0 1;1111 1111+0000 0001*1111 1111 习题 2.7设 X、Y、Z 均为双字数据,分别存放在地址为 X、X+2;Y、Y+2;Z、Z+2 的存储单元中,它们的运算结果存入 W 单元。阅读如下程序段,给出运算公式。mov ax,X mov dx,X+2 add ax,Y adc dx,Y+2 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.add ax,24

8、adc dx,0 sub ax,Z sbb dx,Z+2 mov W,ax mov W+2,dx 解答 WX+Y+24-Z 习题 2.8请分别用一条汇编语言指令完成如下功能:1把 BX 存放器和 DX 存放器的内容相加,结果存入 DX 存放器。2用存放器 BX 和 SI 的基址变址寻址方式把存储器的一个字节与 AL 存放器的内容相加,并把结果送到 AL 中。3用 BX 和位移量 0B2H 的存放器相对寻址方式把存储器中的一个字和 CX 存放器的内容相加,并把结果送回存储器中。4用位移量为 0520H 的直接寻址方式把存储器中的一个字与数 3412H 相加,并把结果送回该存储单元中。5把数 0A

9、0H 与 AL 存放器的内容相加,并把结果送回 AL 中。解答 1ADD DX,BX 2ADD AL,BX+SI 3ADD BX+0B2H,CX 4ADD WORD PTR 0520H,3412H 5ADD AL,0A0H 习题 2.9设 X、Y、Z、V 均为 16 位带符号数,分别装在 X、Y、Z、V 存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。mov ax,X ;ax=X imul Y ;DX.AX=X*Y mov cx,ax ;cx=X*Y 的低 16 位 mox bx,dx ;bx=X*Y 的高 16 位 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请

10、联系删除!我们将竭诚为您提供优质的文档!.mov ax,Z ;ax=Z cwd add cx,ax ;cx=Z 的低 16 位+X*Y 的低 16 位 adc bx,dx ;bx=Z 的高 16 位+X*Y 的高 16 位+低位进位 sub cx,540 ;cx=Z 的低 16 位+X*Y 的低 16 位-540 sbb bx,0 ;bx=Z 的高 16 位+X*Y 的高 16 位+低位进位-低位借位 mov ax,V ;ax=V cwd sub ax,cx ;ax=V 的低 16 位-Z 的低 16 位+X*Y 的低 16 位-540 sbb dx,bx ;dx=V 的高 16 位-Z 的高

11、 16 位+X*Y 的高 16 位+低位进位-低位借位-低位借位 idiv X;/X 解答 V-(X*Y+Z-540)/X AX 存商,DX 存余数 习题 2.10指出以下指令的错误:1 xchg si,30h 2 pop cs 3 sub si,di 4 push ah 5 adc ax,ds 6 add si,80h 7 in al,3fch 8 out dx,ah 解答 1xchg 的操作数不能是立即数 2不应对 CS 直接赋值 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.3两个操作数不能都是存储单元 4堆栈的操作数不能是字节量 5ad

12、c 的操作数不能是段存放器 6没有确定是字节还是字操作 7in 不支持超过 FFH 的直接寻址 8out 只能以 AL/AX 为源操作数 习题 2.11给出以下各条指令执行后的结果,以及状态标志 CF、OF、SF、ZF、PF 的状态。mov ax,1470h and ax,ax or ax,ax xor ax,ax not ax test ax,0f0f0h 解答 mov ax,1470h ;AX1470H CF ZF SF OF PF and ax,ax ;AX1470H 0 0 0 0 0 ;0001 0100 0111 0000 or ax,ax ;AX1470H 0 0 0 0 0 x

13、or ax,ax ;AX0000H 0 1 0 0 1 not ax ;AXFFFFH 0 1 0 0 1 test ax,0f0f0h ;AXFFFFH 0 0 1 0 1 注意:MOV 和 NOT 指令不影响标志位;其他逻辑指令使 CFOF0,根据结果影响其他标志位。4 的程序段中,AX=08H,BX=10H,请说明每条指令执行后的结果和各个标志位的状态。解答 指令 ;执行结果 CF OF SF ZF PF mov si,ax ;SI=AX=0008H -shl si,1 ;SI=2*AX=0010H 0 0 0 0 0 add si,ax ;SI=3*AX=0018H 0 0 0 0 1

14、 mov dx,bx ;DX=BX=0010H 0 0 0 0 1 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.mov cl,03h ;CL=03H 0 0 0 0 1 shl dx,cl ;DX=8*BX=0080H 0 u 0 0 0 sub dx,bx ;DX=7*BX=0070H 0 0 0 0 0 add dx,si ;DX=7*BX+3*AX=0088H 0 0 0 0 1 注意:逻辑左移 N 次相当于无符号整数乘以 2 的 N 次方,逻辑右移 N 次相当于无符号整数除以 2的 N 次方。移位指令根据移位的数据设置 CF,根据移位

15、后的结果影响 SF,ZF,PF。在进行一位移位时,根据最高符号位是否改变设置 OF,如改变那么 OF1。另外,程序注释用“u表示标志无定义 不确定,“-表示无影响。习题 2.13编写程序段完成如下要求:1用位操作指令实现 AL无符号数乘以 10 2用逻辑运算指令实现数字 0 9 的 ASCII 码与非压缩 BCD 码的互相转换 解答 1;不考虑进位 mov bl,al mov cl,3 shl al,cl ;*8 add al,bl ;shl bl,1 add al,bl ;考虑进位 xor ah,ah mov bx,ax mov cl,3 shl ax,cl add ax,bx ;shl b

16、x,1 add ax,bx 2数字 09 的 ASCII 码是:30h39h 非压缩 BCD 码的 09 是:00h09h 方法一:and al,0fh ;实现 ASCII 到非压缩 BCD 码的转换 or al,30h ;实现非压缩 BCD 码到 ASCII 的转换 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.方法二:xor al,30h ;求反 D5D4 位,其他不变 ;即高 4 位为 3,那么变为 0;高 4 位为 0,那么变为 3 3 mov cl,4 again:shr dx,1 ;实现逻辑右移 ;采用“sar dx,1,那么实现算

17、术右移 rcr ax,1 dec cl jnz again 习题 2.14AL=F7H表示有符号数-9,分别编写用 SAR 和 IDIV 指令实现的除以 2 的程序段,并说明各自执行后,所得的商是什么?解答 1用 sar 编写 mov al,0f7h ;-9 送 AL 1111 1001 sar al,1 ;结果:AL=1111 1100B=0FBH 即-5 2用 idiv 编写 mov al,0f7h ;-9 送 al cbw ;字节符号扩展位字 mov bl,2 ;注意除数不可为立即数 idiv bl ;结果:商为 al=fch (-4);余数:ah=ffh(-1)结论:符号数的除法用 i

18、div 准确。5指令指针 IP 是通用存放器还是专用存放器?有指令能够直接它赋值吗?哪类指令的执行会改变它的值?解答 指令指针 IP 不是通用存放器,不可直接赋值,属于专用存放器。有且仅有循环、转移、子程序调用和返回、中断类等指令可以改变它的值。6控制转移类指令中有哪三种寻址方式?解答 控制转移类指令的寻址方式:相对寻址、直接寻址方式和间接寻址方式又可以分成存放器和存储器间接寻址。欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.7 什么是短转移 short jump、近转移 near jump 和远转移 far jump?什么是段内转移和段间转移

19、?8086有哪些指令可以实现段间转移?解答 短转移:指段内128127 之间的转移,位移量用一个字节表示 近转移:指段内32K 之间的转移,位移量用一个字表示 远转移:指段间 1MB 范围的转移 段内转移:指在同一个代码段内的转移,可以是短转移或者近转移 段间转移:指转移到另外一个代码段,就是远转移 8086/8088CPU 的 JMP、CALL 和 INT n 指令可以实现段间转移 习题 2.188086 的条件转移指令的转移范围有多大?实际编程时,你如何处理超出范围的条件转移?解答 8086 的条件转移的转移范围:在当前指令地址的+127-128 之内。如条件转移的转移范围超出此范围,可在

20、此范围内安排一条无条件转移,再转移到范围外的目标地址。习题 2.19假设 DS=2000H,BX=1256H,SI=528FH,位移量 TABLE=20A1H,232F7H=3280H,264E5H=2450H,试问执行以下段内间接寻址的转移指令后,转移的有效地址是什么?1 JMP BX 2 JMP TABLEBX 3 JMP BXSI 解答 1转移的有效地址 EA=BX=1256H 2转移的有效地址 EA=DS:20A1H+1256H=232F7=3280H 3转移的有效地址 EA=DS:1256H+528FH=264E5H=2450H 0判断以下程序段跳转的条件 1 xor ax,1e1e

21、h je equal 2test al,10000001b jnz there 3cmp cx,64h jb there 解答 1AX1e1eh异或后为 0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.2AL 的 D0 或 D7 至少有一位为 1 3CX无符号数 64h 1设置 CX=0,那么 LOOP 指令将循环多少次?例如:mov cx,0 delay:loop delay 解答 216 次。2假设 AX 和 SI 存放的是有符号数,DX 和 DI 存放的是无符号数,请用比拟指令和条件转移指令实现以下判断:1假设 DX DI,转到 abo

22、ve 执行;2假设 AX SI,转到 greater 执行;3假设 CX=0,转到 zero 执行;4假设 AXSI 产生溢出,转到 overflow 执行;5假设 SIAX,转到 less_eq 执行;6假设 DIDX,转到 below_eq 执行。解答 1假设 DX DI,转到 above 执行 cmp dx,di ja above ;jnbe above 2假设 AX SI,转到 greater 执行 cmp ax,si jg greater ;jnle greater 3假设 CX=0,转到 zero 执行 cmp cx,0 jz zero ;jcxz zero 4假设 AXSI 产生

23、溢出,转到 overflow 执行;cmp ax,si jo overflow 5假设 SIAX,转到 less_eq 执行;cmp si,ax ;cmp ax,si jle less_eq ;jge less_eq 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.6假设 DIDX,转到 below_eq 执行。cmp di,dx ;cmp dx,di jbe below_eq ;jae below_eq 3有一个首地址为 array 的 20 个字的数组,说明以下程序段的功能。mov cx,20 mov ax,0 mov si,ax sum_l

24、oop:add ax,arraysi add si,2 loop sum_loop mov total,ax 解答 将首地址为 array 得 20 个字的数组求和,并将结果存入 total 单元中。4按照以下要求,编写相应的程序段:1起始地址为 string 的主存单元中存放有一个字符串长度大于 6,把该字符串中的第 1 个和第 6 个字符字节量传送给 DX 存放器。2从主存 buffer 开始的 4 个字节中保存了 4 个非压缩 BCD 码,现按低高地址对低高位的原那么,将它们合并到 DX 中。3编写一个程序段,在 DX 高 4 位全为 0 时,使 AX=0;否那么使 AX=-1。4有两个

25、 64 位数值,按“小端方式存放在两个缓冲区 buffer1 和 buffer2 中,编写程序段完成buffer1buffer2 功能。5假设从 B800h:0 开始存放有 100 个 16 位无符号数,编程求它们的和,并把 32 位的和保存在 DX.AX 中。6字符串 string 包含有 32KB 内容,将其中的$符号替换成空格。7有一个 100 个字节元素的数组,其首地址为 array,将每个元素减 1不考虑溢出存于原处。8统计以$结尾的字符串 srting 的字符个数。解答 1解答:mov si,0 mov dl,stringsi ;第 1 个字符送 dl 存放器:mov dl,sti

26、rng0 mov si,5 mov dh,stringsi ;第 6 个字符送 dh 存放器:mov dl,stirng5 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.2解答:xor si,si ;si 清零 mov al,buffersi ;第一字节 inc si mov ah,buffersi ;第二字节 mov cl,4 shl ah,cl ;BCD 码移到高半字节 or al,ah ;组合成压缩 BCD 码 mov dl,al ;存入 dl 寄.inc si mov al,buffersi ;第三字节 inc si mov ah,bu

27、ffersi ;第四字节 mov cl,4 shl ah,cl ;BCD 码移到高半字节 or al,ah ;组合成压缩 BCD 码 mov dh,al ;存入 dh 寄.3解答:test dx,0f000h ;test dh,0f0h jz next ;jnz next mov ax,-1 ;mov ax,0 jmp again next:mov ax,0 ;mov ax,0ffffh again:.4解答:mov ax,word ptr buffer1 sub ax,word ptr buffer2 ;先减低 16 位 mov dx,word ptr buffer1+2 sbb dx,wo

28、rd ptr buffer2+2 ;后减高 16 位,需减低 16 位的借位 5解答:欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.mov ax,0b800h mov ds,ax ;段地址 xor si,si ;地址偏移量 si=0 xor dx,dx ;和的高字 dx=0 mov cx,99 ;加的次数 mov ax,si ;第一个数 again:inc si ;指向下一个字单元 inc si add ax,si ;加下一个数 jnc noc ;无进位转 inc dx ;有进位 dx=dx+1 noc:dec cx ;次数-1 jnz cx,

29、again ;非 0 继续加 6解答 1:不使用串操作指令更好 mov si,offset string mov cx,8000h ;32k=215=8000h again:cmp byte ptr si,$;$24h jnz next ;不要采用 jz 进行分支 mov byte ptr si,;20h next:inc si loop again ;dec cx ;jnz again 6解答 2:使用串操作指令 mov di,offset string mov al,$mov cx,8000h cld again:scasb 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!

30、我们将竭诚为您提供优质的文档!.jnz next mov byte ptr es:di-1,next:loop again 7解答 1:mov si,offset array mov cx,100 again:dec byte ptr si inc si loop again 7解答 2:xor si,si ;si-0 mov cx,100 ;循环次数 again:dec arraysi inc si loop again 7解答 3:mov si,offset array mov di,si mov ax,ds mov es,ax mov cx,100 cld again:lodsb dec

31、 al stosb loop again 8解答:xor si,si ;si-0 coun:cmp stringsi,$欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.je done inc si jmp coun done:.5对下面要求,分别给出 3 种方法,每种方法只用一条指令。1使 CF=0 2使 AX=0 3同时使 AX=0 和 CF=0 解答 1解答:clc and ax,ax or ax,ax 2解答:xor ax,ax and ax,0 mov ax,0 3解答:and ax,0 xor ax,ax sub ax,ax 6参照本习

32、题的示意图,分析调用序列,画出每次调用及返回时的堆栈状态。其中 CALL 前是该指令所在的逻辑地址;另外,段内直接调用指令的机器代码的字节数为 3,段间直接调用指令那么为 5 个字节。解答 主程序转子 suba 时段内调用:断点 1 为 2000h:0400h+3,转子是只将 IP 压栈。suba 转子 subb 时段间调用:断点 2 为 2000h:0840h+5,转子时须将 cs 段地址和 IP 压栈 suba 转子 subc 时段内调用:断点 3 为 2000h:0c021h+3,转子是只将 IP 压栈。注:压栈时先修改 sp 再压入断点,弹栈时先弹出断点再修改 sp。7AX、BX 存放

33、的是 4 位压缩 BCD 表示的十进制数,请说明如下子程序的功能和出口参数。add al,bl daa xchg al,ah 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.adc al,bh daa xchg al,ah ret 解答 压缩 BCD 码加法:AXAXBX 出口参数:AXBCD 码和 习题 2.28AAD 指令是用于除法指令之前,进行非压缩 BCD 码调整的。实际上,处理器的调整过程是:ALAH10AL,AH0。如果指令系统没有 AAD 指令,请用一个子程序完成这个调整工作。解答 shl ah,1 ;ah=2*a (设原 ah=a

34、)mov dl,ah ;dl=2*a mov cl,2 ;设定移位次数 shl ah,cl ;ah=8*a add ah,dl ;ah=10*a add al,ah ;al=10*a+al xor ah,ah ;清零 ah int 3 ;返回 DOS 注意:入口:AX 中存放有“和两非压缩 BCD 码 出口:AL 中 已为调整后的二进制数 习题 2.29解释如下有关中断的概念:1 内部中断和外部中断 2 单步中断和断点中断 3 除法错中断和溢出中断 4 中断向量号和中断向量表 解答 1内部中断是由于 8086CPU 内部执行程序引起的程序中断;外部中断是来自 8086CPU 之外的原因引起的程

35、序中断;2单步中断是假设单步标志 TF 为 1,那么在每条指令执行结束后产生的中断;断点中断是供调试程序使用的,它的中断类型号为 3 通常调试程序时,把程序按程序的任务分成几段,然后,每段设一个段点;欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.3 除法错中断是在执行除法指令时,假设除数为 0 或商超过了存放器所能表达的范围产生的中断;溢出中断是在执行溢出中断指令 INTO 时,假设溢出标志 OF 为 1 时产生的中断;4中断向量号是 中断类型号;中断向量表是中断向量号与它所对应的中断效劳程序起始地址的转换表。0试比拟 INT n 和段间 CALL 指令、IRET 和段间 RET 指令的功能。解答 INT n 响应中断时,除象 CALL 保护断点外,还应保护 FR;段间 CALL 指令用在主程序中实现子程序的调用。IRET 返回时,除象 RET 恢复断点外,还应恢复 FR;子程序执行完成后,应返回主程序中继续执行,这一功能由 RET 指令完成。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁