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

举报
资源描述
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.汇编语言程序设计 第四版 【课后习题答案】-囮裑為檤 第 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 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 mov 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的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。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 的内容如何变化?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 dec 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 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 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把数 0A0H 与 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 位 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.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 的高 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堆栈的操作数不能是字节量 5adc 的操作数不能是段存放器 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 xor 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 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,根据移位后的结果影响 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 bx,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,那么实现算术右移 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,0
展开阅读全文
温馨提示:
金锄头文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
相关资源
正为您匹配相似的精品文档
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档


电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号