关键词不能为空

当前您在: 主页 > 英语 >

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

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 00:14
tags:

-

2021年3月3日发(作者:英语字典在线查询)















汇编语言程序设计




第四版



























【课后习题答案】

















--


囮裑為檤




















2




8086


的指令系统



〔习题


2.1



已知


DS



2000H


、< /p>


BX



0100H



SI



0002H


,存储单元


[20100H]



[20103H]


依次存放


12 34


56 78H



[21200H]



[21203H]


依次存放


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,[bx][si+1100h]


〔解答〕




1



AX



1 200H



2


AX



0100H


< p>
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



65 B7H


;


偏移地址


=bx+s i+1100h=0100h+0002h+1100h=1202h


< p>
〔习题


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



- 1 -




8




mov 20h,ah


〔解答〕


< /p>



1


)两操作数类型不匹配




2


< br>IP


指令指针禁止用户访问




3


)立即数不允许传给段寄存器




4


)段寄存器之间不允许传送

< p>



5


)两操作数类型不 匹配




6


) 目的操作数应为


[ SI ]



7< /p>


)源操作数应为



[BX+DI]




8


)立即 数不能作目的操作数




〔习题


2.3



已知数字


0 ~ 9


对应的格雷码依次为:


18H



34H



05H



06H



09H

< br>、


0AH



0CH



11H



12H



14H


,它存在于以


table


为首地址(设为


200H


) 的连续区域中。请为如下程序段的每条指令加上注释,说


明每条指令的功能和执行结果。





lea bx,table



mov al,8



xlat


〔解答〕




lea bx,table


;获取


table


的首地址,


BX



200H



mov al,8


< p>
;传送欲转换的数字,


AL


8



xlat



;转换为格雷码,


AL



12H


P35


< /p>


〔习题


2.4


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




〔解答〕



堆栈是一种按



先进后出



原则存取数据 的存储区域,位于堆栈段中,使用


SS


段寄存器记录其段地


址;它的工作原则是先进后出;堆栈的两种基本操作是压栈和出栈,对应的指令是

< p>
PUSH



POP





〔习题


2.5


〕已知


SS = 2200H



SP = 00B0H


, 画图说明执行下面指令序列时,堆栈区和


SP


的内容如何


变化?





mov ax,8057h



push ax



mov ax,0f79h




push ax



- 2 -




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


值,以及

< br>CF



ZF


< br>SF



OF


< br>PF


的状态:




mov al,89h



add al,al



add al,9dh



cmp al,0bch



sub al,al



dec al



inc al



- 3 -



〔解答〕



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


; 0001 0010


+ 1001 1101



1010 1111




cmp al,0bch


; 1010 1111


-1011 1100


* 0100 0011



sub al,al



dec al


; 0000 0000


- 0000 0001


*1111 1111



inc al


;1111 1111


+0000 0001


*1111 1111



; AL=0afh


0


0


1


0


1


; AL=0afh


1


0


1


0


1


AL=00h


0


1


0


0


1



; AL=0ffh


0


0


1


0


1


; AL=00h


0


1


0


0


1


- 4 -





< /p>


〔习题


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



〔解答〕




W



X+Y+24-Z



〔习题


2.8


〕请分别用一条汇编语言指令完成如下功能:



< p>


1


)把


BX

< p>
寄存器和


DX


寄存器的内容相加,结果存入


DX


寄存器。



(< /p>


2



用寄存器


B X



SI


的基址变址寻址方式把存储器 的一个字节与


AL


寄存器的内容相加,并把结

< br>果送到


AL


中。




3


)用


BX


和位移量


0B2H


的寄存器相对寻址方式把存储器中 的一个字和


CX


寄存器的内容相加,


并 把结果送回存储器中。




4


)用位移量为


0520H


的直接寻址方式把存储 器中的一个字与数


3412H


相加,并把结果送回该存


储单元中。




5


)把数


0A0H



AL


寄存器的内容相加,并把结果送回


AL

中。



〔解答〕




1



ADD DX,BX



2



ADD AL,[BX+SI]



3



ADD [BX+0B2H],CX



- 5 -




4



ADD WORD PTR [0520H],3412H



5



ADD AL,0A0H



〔习题


2.9


〕设


X



Y



Z



V

< p>
均为


16


位带符号数,分别装在

< br>X



Y



Z



V


存储单元中,阅读如下程序段 ,


得出它的运算公式,并说明运算结果存于何处。





mov ax,X


;ax=X



imul Y


;=X*Y




mov cx,ax


;cx=X*Y


的低


16





mox bx,dx


;bx=X*Y

< br>的高


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


的低


1 6



+X*Y


的低

16



-540



sbb bx,0


bx=Z

< br>的高


16



+X*Y

< p>
的高


16



+

< p>
低位进位


-


低位借位





mov ax,V



;ax=V



cwd



sub ax,cx


ax=V

的低


16



-


Z


的低


16


+X*Y


的低


16



-540





sbb


dx,bx


dx=V


的高


16



-


(< /p>


Z


的高


16


位< /p>


+X*Y


的高


16



+


低位进位


-

低位借位)


-


低位


借位

< p>




idiv X /X


〔解答〕




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



AX


存商,

< p>
DX


存余数





〔习题


2.10

〕指出下列指令的错误:





1




xchg [si],30h



- 6 -




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< /p>


的操作数不能是立即数




2


)不应对


CS


直接赋值< /p>




3


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




4


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




5



adc


的操作数不能是 段寄存器




6


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




7



in


不支持超过

FFH


的直接寻址



< p>
8



out


只能以


AL/AX


为源操作数




〔习题


2.11

〕给出下列各条指令执行后的结果,以及状态标志


CF


、< /p>


OF



SF


、< /p>


ZF



PF


的状 态。





mov ax,1470h



and ax,ax



or ax,ax



xor ax,ax



not ax



test ax,0f0f0h


〔解答〕





mov ax,1470h



AX



1470H CF


ZF


SF


OF


PF





and ax,ax



< p>
AX



1470H 0


0


0


0


0



;0001 0100 0111 0000




or ax,ax




AX



1470H 0


0


0


0


0



- 7 -




xor ax,ax




AX



0000 H 0


1


0


0


1



not ax




AX



FFFFH 0


1


0


0


1



test ax,0f0f0h



AX



FFFFH 0


0


1


0


1


注意:


MOV



NOT


指令不影响标志位;其他逻辑指令使


CF


=< /p>


OF



0


,根据 结果影响其他标志位。




〔习题


2.12


〕假设例题


2.34


的程序段中,


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

< p>
注意:逻辑左移


N


次相当于无符号整数乘以


2



N


次方,逻辑右 移


N


次相当于无符号整数除以


2



N


次方。移位指令根据移位的数据设置


CF


,根据移位后的结果影响


SF



ZF



PF


。在进行一位移位时,


根据最高符号位是否改变设置

OF


,如改变则


OF


< p>
1


。另外,程序注释用


“u”

表示标志无定义(不确定),



-



表示无影响。



< br>〔习题


2.13


〕编写程序段完成如下要求:

< p>




1


)用位操作指令实现


AL


(无符号数)乘以

< p>
10



2


)用逻辑运算 指令实现数字


0 ~ 9



ASCII


码与非压缩


BCD


码的互相转换




3


)把



中的双字右移


4




〔解答〕




1



;


不考虑进位





mov bl,al



mov cl,3



shl al,cl


;*8



add al,bl


;shl bl,1




add al,bl



- 8 -




;考虑进位




xor ah,ah



mov bx,ax



mov cl,3



shl ax,cl



add ax,bx


;shl bx,1



add ax,bx



2


)数字


0



9



ASCII


码是:


30h



39h



非压缩


B CD


码的


0



9


是:


00h



09h


方法一:




and al,0fh


;

< p>
实现


ASCII


到非压缩


BCD


码的转换




or al,30h


;

< p>
实现非压缩


BCD


码到


A SCII


的转换



方法二:




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.14



已知


AL = 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


;


字节符号扩展位字




- 9 -

-


-


-


-


-


-


-


-



本文更新与2021-03-03 00:14,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/694345.html

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