微机原理与接口技术(第四版)课后习题答案 下载本文

add ax,200 ; EAX=__________,CF=__________ (3) mov eax,100 ; EAX=__________ add al,200 ; EAX=__________,CF=__________

(4) mov al,7fh ; AL=__________ sub al,8 ; AL=__________,CF=__________,SF=__________ sub al,80h ; AL=__________,CF=__________,OF=__________ sbb al,3 ; AL=__________,CF=__________,ZF=__________ 〔解答〕

(1) ; EAX=80H ; EAX=83H,CF=0,SF=0 ; EAX=103H,CF=0,OF=0 ; EAX=106H,CF=0,ZF=0

(2) ; EAX=100 ; EAX=300,CF=0

(3) ; EAX=100 ; EAX=44,CF=1(包含256的进位含义:256+44=300)

(4) mov al,7fh ; AL=7FH sub al,8 ; AL=77H,CF=0,SF=0 sub al,80h ; AL=F7H,CF=1,OF=1 sbb al,3 ; AL=F3H,CF=0,ZF=0 〔习题3.21〕(推敲)

给出下列各条指令执行后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

; AL=89H CF ZF SF OF PF ; AL=12H 1 0 0 1 1

〔解答〕 mov al,89h add al,al

add al,9dh cmp al,0bch sub al,al dec al inc al ; AL=0AFH ; AL=0AFH ; AL=00H ; AL=0FFH ; AL=00H 0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 1 1

〔习题3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成EDX.EAX←buffer1-buffer2功能。(去E) 〔解答〕 ; 数据段 buffer1 qword 67883000h buffer2 qword 67762000h ; 代码段 mov eax,dword ptr buffer1 mov edx,dword ptr buffer1+4 sub eax,dword ptr buffer2 sbb edx,dword ptr buffer2+4

〔习题3.23〕分别执行如下程序片断,说明每条指令的执行结果:(去E)

(1)

mov esi,10011100b ; ESI=__________H and esi,80h ; ESI=__________H or esi,7fh ; ESI=__________H xor esi,0feh ; ESI=__________H (2)

mov eax,1010b ; EAX=__________B shr eax,2 ; EAX=__________B,CF=__________ shl eax,1 ; EAX=__________B,CF=__________ and eax,3 ; EAX=__________B,CF=__________ (3)

mov eax,1011b ; EAX=__________B rol eax,2 ; EAX=__________B,CF=__________ rcr eax,1 ; EAX=__________B,CF=__________ or eax,3 ; EAX=__________B,CF=__________ (4)

xor eax,eax ; EAX=__________,CF=__________,OF=__________

; ZF=__________,SF=__________,PF=__________ 〔解答〕

(1) ; ESI=9CH ; ESI=80H ; ESI=FFH ; ESI=01H

(2) ; EAX=1010B(可以有前导0,下同) ; EAX=0010B,CF=1 ; EAX=0100B,CF=0 ; EAX=0000B,CF=0

(3) ; EAX=1011B(可以有前导0,下同) ; EAX=101100B,CF=0 ; EAX=10110B,CF=0 ; EAX=10111B,CF=0

(4) ; EAX=0,CF=0,OF=0 ; ZF=1,SF=0,PF=1

〔习题3.24〕3.24 给出下列各条指令执行后AX的结果,以及状态标志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 ; AX=1470H CF OF SF ZF PF and ax,ax ; AX=1470H 0 0 0 0 0 or ax,ax ; AX=1470H 0 0 0 0 0 xor ax,ax ; AX=0000H 0 0 0 1 1 not ax ; AX=FFFFH 0 0 0 1 1 test ax,0f0f0h ; AX=0F0F0H 0 0 1 0 1

〔习题3.25〕逻辑运算指令怎么实现复位、置位和求反功能?

〔解答〕

AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。 〔习题3.27〕(去E)

编程将一个64位数据逻辑左移3位,假设这个数据已经保存在EDX.EAX寄存器对中。 〔解答〕 ; 代码段 mov ecx,3 again: shl eax,1 rcl edx,1 loop again

〔习题3.28〕编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。 〔解答〕 ; 数据段 bcd byte 92h ; 代码段 mov al,bcd shr al,4 add al,30h call dispc mov al,bcd and al,0fh add al,30h call dispc

〔习题3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。 ; 数据段

array1 dword 1,2,3,4,5,6,7,8,9,10 array2 dword 10 dup(?) ; 代码段