汇编语言程序设计(第四版)第2章【课后答案】讲解_第1页
汇编语言程序设计(第四版)第2章【课后答案】讲解_第2页
汇编语言程序设计(第四版)第2章【课后答案】讲解_第3页
汇编语言程序设计(第四版)第2章【课后答案】讲解_第4页
汇编语言程序设计(第四版)第2章【课后答案】讲解_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-24 -汇编语言程序设计第四版-囮裑爲檤【课后习题答案】第2章8086的指令系统习题 2.1已知 DS = 2000H、BX = 0100H、SI = 0002H,存储单元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解答(1)AX =1200H(2

2、)AX = 0100H(3 )AX =4C2AH;偏移地址=bx=0100h(4 )AX = 3412H;偏移地址=bx=0100h(5 )AX =4C2AH;偏移地址=bx+1100h=1200h(6 )AX =7856H;偏移地址=bx+si=0100h+0002h=0102h(7 )AX =65B7H;偏移地址=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,

3、bx+di(8) mov 20h,ah解答(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6 )目的操作数应为SI (7)源操作数应为 BX+DI(8)立即数不能作目的操作数习题2.3已知数字09对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H )的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。lea bx,tablemov al,8xlat解答lea bx,table;获取 tab

4、le 的首地址,BX = 200Hmov al,8;传送欲转换的数字,AL = 8xlat;转换为格雷码, AL = 12H P35习题2.4什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令?解答堆栈是一种按 先进后出”原则存取数据的存储区域,位于堆栈段中,使用SS段寄存器记录其段地址;它的工作原则是先进后出;堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。习题2.5已知SS = 2200H、SP = 00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如何变化?mov ax,8057hpush axmov ax,0f79hpush axpop bxPO

5、P【bx解答mov ax,8057h push axmov ax,0f79h push ax;bx=0f79hpop bxpop bx;DS:【0f79h=8057hSP=00B0H,SS=2200H习题2.6给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al解答mov al,89h;AL=89hCF ZF SF OF PFadd al,al;AL=12h10011;1000 1001+1000 100110001 0010add al,9dh;AL=0

6、afh 00101;0001 0010+ 1001 11011010 1111cmp al,0bch;AL=0afh 10101;1010 1111-1011 1100* 0100 0011sub al,al;AL=00h01001dec al;0000 0000-0000 0001*1111 1111;AL=0ffh00101inc al;AL=00h01001;1111 1111+0000 0001*1111 1111习题2.7丨设X、Y、Z均为双字数据,分别存放在地址为 X、X+2 ; Y、Y+2 ; Z、Z+2的存储单元中, 它们的运算结果存入 W单元。阅读如下程序段,给出运算公式。m

7、ov ax,Xmov dx,X+2add ax,Yadc dx,Y+2add ax,24adc dx,0sub ax,Zsbb dx,Z+2mov W,axmov W+2,dx解答W = X+Y+24-Z习题2.8请分别用一条汇编语言指令完成如下功能:(1 )把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。(2) 用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结 果送到AL中。(3) 用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加, 并把结果送回存储器中。(4) 用位移量为0520H的直接寻址方式把存储器中的一个字

8、与数3412H相加,并把结果送回该存 储单元中。(5) 把数0A0H与AL寄存器的内容相加,并把结果送回AL中。解答(1) ADD DX,BX(2) ADD AL,BX+SI(3) ADD BX+0B2H,CX(4) ADD WORD PTR 0520H,3412H(5) ADD AL,0A0H习题2.9丨设X、Y、Z、V均为16位带符号数,分别装在 X、Y、Z、V存储单元中,阅读如下程序段, 得出它的运算公式,并说明运算结果存于何处。mov ax,X;ax=Ximul Y ;DX.AX=X*Ymov cx,ax;cx=X*Y的低16位mox bx,dx;bx=X*Y 的高16位mov ax,

9、Z;ax=Zcwdadd 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位-540sbb bx,0;bx=Z的高16位+X*Y的高16位+低位进位-低位借位mov ax,V ;ax=Vcwdsub 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)/XAX存商,DX存余

10、数习题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解答(1) xchg的操作数不能是立即数(2) 不应对CS直接赋值(3 )两个操作数不能都是存储单元(4) 堆栈的操作数不能是字节量(5) adc的操作数不能是段寄存器(6) 没有确定是字节还是字操作(7) in不支持超过FFH的直接寻址(8) out只能以AL/AX为源操作数习题2.11丨给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、

11、PF的状态mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h解答mov ax,1470h; AX = 1470H CF ZF SF OF PFand ax,ax; AX = 1470H 00000;0001 0100 0111 0000or ax,ax; AX = 1470H 00000not ax;AX =FFFFH 01 0 0 1test ax,0f0f0h;AX =FFFFH 00 1 0 1xor ax,ax;AX = 0000H 01001CF = OF = 0,根据结果影响其他标志位。注意:MOV和NOT指令不影响

12、标志位;其他逻辑指令使习题2.12丨假设例题2.34的程序段中,AX = 08H,BX = 10H,请说明每条指令执行后的结果和各个标 志位的状态。解答指令;执行结果CF OF SF ZF PFmov si,ax;SI=AX=0008H-shl si,1;SI=2*AX=0010H00000add si,ax;SI=3*AX=0018H00001mov dx,bx;DX=BX=0010H00001mov cl,03h;CL=03H00001shl dx,cl;DX=8*BX=0080H0u000sub dx,bx;DX=7*BX=0070H00000add dx,si;DX=7*BX+3*AX

13、=0088H 00001注意:逻辑左移 N次相当于无符号整数乘以2的N次方,逻辑右移 N次相当于无符号整数除以2的N次方。移位指令根据移位的数据设置CF,根据移位后的结果影响 SF,ZF,PF。在进行一位移位时,根据最高符号位是否改变设置OF,如改变则OF = 1。另外,程序注释用“u”表示标志无定义(不确定),表示无影响。习题2.13编写程序段完成如下要求:(1) 用位操作指令实现 AL (无符号数)乘以10(2) 用逻辑运算指令实现数字09的ASCII码与非压缩BCD码的互相转换(3 )把DX.AX中的双字右移4位解答(1) ;不考虑进位mov bl,almov cl,3shl al,cl

14、;*8add al,bl;shl bl,1 add al,bl;考虑进位xor ah,ahmov bx,axmov cl,3shl ax,cladd ax,bx;shl bx,1add 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,4again: shr dx,1;实现逻辑右移;采用“ sar dx,1,”则实现

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

16、指针IP是通用寄存器还是专用寄存器?有指令能够直接它赋值吗?哪类指令的执行会 改变它的值?解答指令指针IP不是通用寄存器,不可直接赋值,属于专用寄存器。有且仅有循环、转移、子程序调用 和返回、中断类等指令可以改变它的值。习题2.16丨控制转移类指令中有哪三种寻址方式?解答控制转移类指令的寻址方式:相对寻址、直接寻址方式和间接寻址方式(又可以分成寄存器和存储 器间接寻址)。习题2.17什么是短转移 short jump 、近转移neaump 和远转移far jump ?什么是段内转移和段间 转移? 8086有哪些指令可以实现段间转移?解答短转移:指段内128127之间的转移,位移量用一个字节表示

17、近转移:指段内 出2K之间的转移,位移量用一个字表示远转移:指段间1MB范围的转移段内转移:指在同一个代码段内的转移,可以是短转移或者近转移段间转移:指转移到另外一个代码段,就是远转移8086/8088CPU 的JMP、CALL和INT n指令可以实现段间转移习题2.188086的条件转移指令的转移范围有多大?实际编程时,你如何处理超出范围的条件转移? 解答8086的条件转移的转移范围:在当前指令地址的+127-128之内。如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地 址。习题 2.19 丨假设 DS=2000H,BX=1256H,SI=528FH,位

18、移量 TABLE=20A1H ,232F7H=3280H264E5H=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习题2.20判断下列程序段跳转的条件(1) xor ax,1e1ehje equal(2) test al,10000001bjnz there(3) cmp cx,

19、64h jb there解答(1) AX = 1e1eh (异或后为 0)(2) AL的D0或D7至少有一位为 1(3) CX (无符号数)v 64h习题2.21丨设置CX = 0 ,_则LOOP指令将循环多少次?例如:mov cx,0delay: loop delay解答216 次。DX和DI存放的是无符号数,请用比较指令和条件转移执行;习题2.22丨假设AX和SI存放的是有符号数, 指令实现以下判断:(1 )若DX DI,转到above执行;(2)若 AX SI,转到 greater 执行;(3 )若CX = 0,转到zero执行;(4) 若AX SI产生溢出,转到 oveflow(5 )

20、若 SI WAX,转到 less_eq 执行;(6)若 DIWDX,转到 below_eq 执行解答(1 )若DX DI,转到above执行cmp dx,dija above;= jnbe above(2)若 AX SI,转到 greater 执行cmp ax,sijg greater; = jnle greater(3 )若CX = 0,转到zero执行cmp cx,0jz zero; = jcxz zero(4)若AX SI产生溢出,转到 oveflow 执行;cmp ax,sijo overflow(5 )若 SI WAX,转到 less_eq 执行;cmp si,ax;cmp ax,s

21、ijle less_eq;jge less_eq(6)若DIWDX,转到below_eq 执行。cmp di,dxjbe below_eq;cmp dx,di;jae below_eq习题2.23丨有一个首地址为 array的20个字的数组,说明下列程序段的功能mov cx,20mov ax,0mov si,axsum_loop:add ax,arraysiadd si,2loop sum_loopmov total,ax解答将首地址为array得20个字的数组求和,并将结果存入total单元中习题2.24按照下列要求,编写相应的程序段:(1) 起始地址为string的主存单元中存放有一个字符

22、串(长度大于6),把该字符串中的第1个和 第6个字符(字节量)传送给 DX寄存器。(2) 从主存buffer开始的4个字节中保存了 4个非压缩BCD码,现按低(高)地址对低(高)位 的原则,将它们合并到 DX中。(3 )编写一个程序段,在DX高4位全为0时,使AX = 0 ;否则使AX = -1。(4) 有两个64位数值,按 小端方式”存放在两个缓冲区 buffer1和buffer2中,编写程序段完成 buffer1 buffer2 功能。(5) 假设从B800h : 0开始存放有100个16位无符号数,编程求它们的和,并把32位的和保存 在DX.AX中。(6) 已知字符串string包含有3

23、2KB内容,将其中的瞄号替换成空格。(7) 有一个100个字节元素的数组,其首地址为array,将每个元素减1 (不考虑溢出)存于原处。(8)统计以$结尾的字符串srting的字符个数。解答(1)解答:mov si,0mov dl,stringsi;第1个字符送dl寄存器:mov dl,stirng0mov si,5mov dh,stringsi;第6个字符送dh寄存器:mov dl,stirng5(2)解答:xor si,si;si清零mov al,buffersi;第一字节inc simov ah,buffersi;第二字节mov cl,4shl ah,cl;BCD码移到高半字节or al

24、,ah;组合成压缩BCD码mov dl,al;存入dl寄.inc simov al,buffersi;第三字节inc simov ah,buffersi;第四字节mov cl,4shl ah,clor al,ahmov dh,al(3) 解答:test dx,OfOOOhjz nextmov ax,-1jmp again next: mov ax,0 again: .(4) 解答:;BCD码移到高半字节;组合成压缩BCD码;存入dh寄.;test dh,0f0h;jnz next;mov ax,0;mov ax,0ffffhmov ax, word ptr buffer1;先减低16位sub

25、ax, word ptr buffer2 mov dx, word ptr buffer1+2;后减高16位,需减低16位的借位sbb dx, word ptr buffer2+2(5) 解答:mov ax,0b800hmov ds,axxor si,sixor dx,dxmov cx,99mov ax,si again: inc siinc siadd ax,si jnc noc inc dxnoc: dec cx;段地址;地址偏移量si=0;和的高字dx=0;加的次数;第一个数;指向下一个字单元;加下一个数;无进位转;有进位dx=dx+1;次数-1jnz cx,again;非 0继续加(6

26、) 解答1:不使用串操作指令(更好)mov si,offset stringmov cx,8000h; 32k=2T5=8000hagain:cmp byte ptr si,jnz next;不要采用jz进行分支mov byte ptr si,;=20hnext:inc si;dec cxloop again;jnz again(6) 解答2:使用串操作指令mov di,offset stringmov al, $mov cx,8000hcldagain:scasbjnz nextmov byte ptr es : di- 1,next:loop again(7) 解答1:mov si,off

27、set arraymov cx,100again:dec byte ptr siinc siloop again(7) 解答2:xor si,si; si-0循环次数mov cx,100again:dec arraysiinc siloop again(7)解答3:mov si,offset arraymov di,simov ax,dsmov es,axmov cx,100cldagain: lodsbdec alstosbloop again(8)解答:xor si,si;si-0coun:cmp stringsi,$je doneinc sijmp coundone:.习题2.25丨对下

28、面要求,分别给出3种方法,每种方法只用一条指令。(1 )使 CF=0 ( 2 )使 AX=0( 3)同时使 AX=0 和 CF=0解答(1)解答:clcand ax,axor ax,ax(2)解答:xor ax,ax and ax,0mov ax,0(3) 解答:and ax,0xor ax,axsub ax,ax习题2.26参照本习题的示意图,分析调用序列,画出每次调用及返回时的堆栈状态。其中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再

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论