新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx

上传人:b****4 文档编号:4017905 上传时间:2023-05-06 格式:DOCX 页数:33 大小:116.73KB
下载 相关 举报
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第1页
第1页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第2页
第2页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第3页
第3页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第4页
第4页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第5页
第5页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第6页
第6页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第7页
第7页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第8页
第8页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第9页
第9页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第10页
第10页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第11页
第11页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第12页
第12页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第13页
第13页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第14页
第14页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第15页
第15页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第16页
第16页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第17页
第17页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第18页
第18页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第19页
第19页 / 共33页
新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx

《新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx》由会员分享,可在线阅读,更多相关《新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx(33页珍藏版)》请在冰点文库上搜索。

新版汇编语言程序设计课后习题答案 钱晓捷 主编 电子工业出版社 第2章 8086的指令系统全.docx

新版汇编语言程序设计课后习题答案钱晓捷主编电子工业出版社第2章8086的指令系统全

新版汇编语言程序设计【课后习题答案】钱晓捷主编电子工业出版社第2章8086的指令系统(全)

第2章8086的指令系统

〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4CB765H,说明下列每条指令执行完后AX寄存器的内容。

(1)movax,1200h

(2)movax,bx

(3)movax,[1200h]

(4)movax,[bx]

(5)movax,[bx+1100h]

(6)movax,[bx+si]

(7)movax,[bx][si+1100h]

〔解答〕

(1)AX=1200H

(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)movcx,dl

(2)movip,ax

(3)moves,1234h

(4)moves,ds

(5)moval,300

(6)mov[sp],ax

(7)movax,bx+di

(8)mov20h,ah

〔解答〕

(1)两操作数类型不匹配

(2)IP指令指针禁止用户访问

(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)的连续区域中。

请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。

          leabx,table

          moval,8

          xlat

〔解答〕

          leabx,table         ;获取table的首地址,BX=200H

          moval,8              ;传送欲转换的数字,AL=8

          xlat                      ;转换为格雷码,AL=12H P35

〔习题2.4〕什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令?

〔解答〕

堆栈是一种按“先进后出”原则存取数据的存储区域,位于堆栈段中,使用SS段寄存器记录其段地址;它的工作原则是先进后出;堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。

〔习题2.5〕已知SS=2200H、SP=00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如何变化?

          movax,8057h

          pushax

          movax,0f79h 

          pushax

          popbx

          pop[bx]

〔解答〕

          movax,8057h

          pushax

          movax,0f79h

          pushax

          popbx               ;bx=0f79h

          pop[bx]             ;DS:

[0f79h]=8057h

 

〔习题2.6〕给出下列各条指令执行后AL值,以及CF、ZF、SF、OF和PF的状态:

          moval,89h

          addal,al

          addal,9dh

          cmpal,0bch

          subal,al

          decal

          incal

〔解答〕

moval,89h          ;AL=89h  CF ZF SF OF PF

addal,al             ;AL=12h  1  0  0  1  1

;10001001

+10001001

100010010

 

addal,9dh            ;AL=0afh 0  0  1  0  1

;00010010

+10011101

 10101111

 

cmpal,0bch         ;AL=0afh 1  0  1  0  1

;10101111

-10111100

*01000011

 

subal,al              ;AL=00h  0  1  0  0  1

 

decal                 ;AL=0ffh 0  0  1  0  1

;00000000

-00000001

 *11111111

 

incal                   ;AL=00h  0  1  0  0  1

;11111111

+00000001

*11111111

 

〔习题2.7〕设X、Y、Z均为双字数据,分别存放在地址为X、X+2;Y、Y+2;Z、Z+2的存储单元中,它们的运算结果存入W单元。

阅读如下程序段,给出运算公式。

          movax,X

          movdx,X+2

 

          addax,Y

          adcdx,Y+2

 

          addax,24

          adcdx,0

 

          subax,Z

          sbbdx,Z+2

 

          movW,ax

           movW+2,dx

〔解答〕

       W=X+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中。

〔解答〕

(1)ADDDX,BX

(2)ADDAL,[BX+SI]

(3)ADD[BX+0B2H],CX

(4)ADDWORDPTR[0520H],3412H

(5)ADDAL,0A0H

〔习题2.9〕设X、Y、Z、V均为16位带符号数,分别装在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。

          movax,X    ;ax=X

          imulY      ;DX.AX=X*Y

 

          movcx,ax   ;cx=X*Y的低16位

          moxbx,dx   ;bx=X*Y的高16位

 

          movax,Z     ;ax=Z

          cwd

          addcx,ax   ;cx=Z的低16位+X*Y的低16位

          adcbx,dx   ;bx=Z的高16位+X*Y的高16位+低位进位

 

          subcx,540  ;cx=Z的低16位+X*Y的低16位-540

          sbbbx,0      ;bx=Z的高16位+X*Y的高16位+低位进位-低位借位

 

          movax,V    ;ax=V

          cwd

          subax,cx    ;ax=V的低16位-(Z的低16位+X*Y的低16位-540)

         sbbdx,bx    ;dx=V的高16位-(Z的高16位+X*Y的高16位+低位进位-低位借位)-低位借位

 

         idivX;/X

〔解答〕

      [V-(X*Y+Z-540)]/X

      AX存商,DX存余数

〔习题2.10〕指出下列指令的错误:

(1)xchg[si],30h

(2)popcs

(3)sub[si],[di]

(4)pushah

(5)adcax,ds

(6)add[si],80h

(7)inal,3fch

(8)outdx,ah

〔解答〕

(1)xchg的操作数不能是立即数

(2)不应对CS直接赋值

(3)两个操作数不能都是存储单元

(4)堆栈的操作数不能是字节量

(5)adc的操作数不能是段寄存器

(6)没有确定是字节还是字操作

(7)in不支持超过FFH的直接寻址

(8)out只能以AL/AX为源操作数

〔习题2.11〕给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。

          movax,1470h

          andax,ax

          orax,ax

          xorax,ax

          notax

          testax,0f0f0h

〔解答〕                                              

          movax,1470h         ;AX=1470HCF ZF SF OF PF

                                                   

          andax,ax               ;AX=1470H0  0  0  0  0

           ;0001010001110000

 

          orax,ax                 ;AX=1470H0  0  0  0  0

          xorax,ax               ;AX=0000H0  1  0  0  1

          notax                    ;AX=FFFFH0  1  0  0  1

          testax,0f0f0h       ;AX=FFFFH0  0  1  0  1

注意:

MOV和NOT指令不影响标志位;其他逻辑指令使CF=OF=0,根据结果影响其他标志位。

〔习题2.12〕假设例题2.32的程序段中,AX=08H,BX=10H,请说明每条指令执行后的结果和各个标志位的状态。

〔解答〕

          指令             ;执行结果                   CFOFSFZFPF

          movsi,ax   ;SI=AX=0008H               -    -     -  -    -

          shlsi,1      ;SI=2*AX=0010H             0   0   0   0   0

          addsi,ax    ;SI=3*AX=0018H            0  0   0   0   1

          movdx,bx   ;DX=BX=0010H             0  0   0   0   1

          movcl,03h  ;CL=03H                         0   0   0   0   1

          shldx,cl     ;DX=8*BX=0080H         0   u   0   0  0

          subdx,bx   ;DX=7*BX=0070H          0   0  0   0   0

          adddx,si     ;DX=7*BX+3*AX=0088H  0   0   0   0   1

注意:

逻辑左移N次相当于无符号整数乘以2的N次方,逻辑右移N次相当于无符号整数除以2的N次方。

移位指令根据移位的数据设置CF,根据移位后的结果影响SF,ZF,PF。

在进行一位移位时,根据最高符号位是否改变设置OF,如改变则OF=1。

另外,程序注释用“u”表示标志无定义(不确定),“-”表示无影响。

〔习题2.13〕编写程序段完成如下要求:

(1)用位操作指令实现AL(无符号数)乘以10

(2)用逻辑运算指令实现数字0~9的ASCII码与非压缩BCD码的互相转换

(3)把DX.AX中的双字右移4位

〔解答〕

(1) ;不考虑进位        

         movbl,al

          movcl,3

          shlal,cl              ;*8

          addal,bl            ;shlbl,1 

          addal,bl

          ;考虑进位

          xorah,ah

          movbx,ax

          movcl,3

          shlax,cl

          addax,bx            ;shlbx,1

          addax,bx

(2)数字0~9的ASCII码是:

30h~39h

       非压缩BCD码的0~9是:

00h~09h

方法一:

          andal,0fh           ;实现ASCII到非压缩BCD码的转换

          oral,30h            ;实现非压缩BCD码到ASCII的转换

方法二:

          xoral,30h           ;求反D5D4位,其他不变

          ;即高4位为3,则变为0;高4位为0,则变为3

(3)  movcl,4

again:

  shrdx,1             ;实现逻辑右移

                                        ;采用“sardx,1”,则实现算术右移

            rcrax,1

             deccl

           jnzagain

〔习题2.14〕已知AL=F7H(表示有符号数-9),分别编写用SAR和IDIV指令实现的除以2的程序段,并说明各自执行后,所得的商是什么?

〔解答〕

(1)用sar编写

          moval,0f7h          ;-9送AL11111001

          saral,1             ;结果:

AL=11111100B=0FBH 即-5

(2)用idiv编写

          moval,0f7h          ;-9送al

          cbw                  ;字节符号扩展位字

          movbl,2             ;注意除数不可为立即数

          idivbl              ;结果:

商为al=fch (-4)

                               ;余数:

ah=ffh(-1)

结论:

符号数的除法用idiv准确。

 

〔习题2.15〕已知数据段500h~600h处存放了一个字符串,说明下列程序段执行后的结果:

          movsi,600h

          movdi,601h

          movax,ds

          moves,ax

          movcx,256

          std

          repmovsb

〔解答〕

 

〔习题2.16〕说明下列程序段的功能

          cld

          movax,0fefh

          movcx,5

          movbx,3000h

          moves,bx

          movdi,2000h

          repstosw

〔解答〕

 将es:

di(即3000:

2000h或32000h)开始的5个单元的内容置为0fefh。

〔习题2.17〕指令指针IP是通用寄存器还是专用寄存器?

有指令能够直接它赋值吗?

哪类指令的执行会改变它的值?

〔解答〕

指令指针IP不是通用寄存器,不可直接赋值,属于专用寄存器。

有且仅有循环、转移、子程序调用和返回、中断类等指令可以改变它的值。

〔习题2.18〕控制转移类指令中有哪三种寻址方式?

〔解答〕

控制转移类指令的寻址方式:

相对寻址、直接寻址方式和间接寻址方式(又可以分成寄存器和存储器间接寻址)。

〔习题2.19〕什么是短转移shortjump、近转移nearjump和远转移farjump?

什么是段内转移和段间转移?

8086有哪些指令可以实现段间转移?

〔解答〕

短转移:

指段内-128~127之间的转移,位移量用一个字节表示

近转移:

指段内±32K之间的转移,位移量用一个字表示

远转移:

指段间1MB范围的转移

段内转移:

指在同一个代码段内的转移,可以是短转移或者近转移

段间转移:

指转移到另外一个代码段,就是远转移

8086/8088CPU的JMP、CALL和INTn指令可以实现段间转移

〔习题2.20〕8086的条件转移指令的转移范围有多大?

实际编程时,你如何处理超出范围的条件转移?

〔解答〕

8086的条件转移的转移范围:

在当前指令地址的+127~-128之内。

如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地址。

〔习题2.21〕假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?

(1)JMPBX

(2)JMPTABLE[BX]

(3)JMP[BX][SI]

〔解答〕

(1)转移的有效地址EA=BX=1256H

(2)转移的有效地址EA=[DS:

20A1H+1256H]=[232F7]=3280H

(3)转移的有效地址EA=[DS:

1256H+528FH]=264E5H=2450H

〔习题2.22〕判断下列程序段跳转的条件

          

(1)xorax,1e1eh

                     jeequal

          

(2)testal,10000001b

                   jnzthere

          (3)cmpcx,64h

                    jbthere

〔解答〕

(1)AX=1e1eh(异或后为0)

(2)AL的D0或D7至少有一位为1

(3)CX(无符号数)<64h

〔习题2.23〕设置CX=0,则LOOP指令将循环多少次?

例如:

             movcx,0

delay:

   loopdelay

〔解答〕

  216次。

〔习题2.24〕假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用比较指令和条件转移指令实现以下判断:

(1)若DX>DI,转到above执行;

(2)若AX>SI,转到greater执行;

(3)若CX=0,转到zero执行;

(4)若AX-SI产生溢出,转到overflow执行;

(5)若SI≤AX,转到less_eq执行;

(6)若DI≤DX,转到below_eq执行。

〔解答〕

(1)若DX>DI,转到above执行

          cmpdx,di

          jaabove             ;=jnbeabove

(2)若AX>SI,转到greater执行

          cmpax,si

          jggreater           ;=jnlegreater

(3)若CX=0,转到zero执行

          cmpcx,0

          jzzero              ;=jcxzzero  

(4)若AX-SI产生溢出,转到overflow执行;

          cmpax,si

          jooverflow

(5)若SI≤AX,转到less_eq执行;

          cmpsi,ax            ;cmpax,si

          jleless_eq          ;jgeless_eq

(6)若DI≤DX,转到below_eq执行。

          cmpdi,dx            ;cmpdx,di

          jbebelow_eq         ;jaebelow_eq

〔习题2.25〕有一个首地址为array的20个字的数组,说明下列程序段的功能。

          movcx,20

          movax,0

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

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2