〔习题2.5〕已知SS = 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的状态:
第 26 页 共 67 页
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
第 27 页 共 67 页
- 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 〔解答〕
W=X+Y+24-Z
〔习题2.8〕请分别用一条汇编语言指令完成如下功能:
(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。
第 28 页 共 67 页
(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到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
(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=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位+低位进位-低位借位
第 29 页 共 67 页
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 〔解答〕
(1)xchg的操作数不能是立即数 (2)不应对CS直接赋值
(3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数
第 30 页 共 67 页