微机原理与接口技术+第四版+钱晓捷主编+课后习题答案

〔解答〕

sub al,al dec al inc al

mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc al

; AL=89H ; AL=12H ; AL=0AFH ; AL=0AFH ; AL=00H ; AL=0FFH ; AL=00H

CF ZF 1 0 1 0 0 0

0 0 0 1 0 1

SF 0 1 1 0 1 0

OF 1 0 0 0 0 0

PF 1 1 1 1 1 1

〔习题3.22〕有两个64位无符号整数存放在变量buffer1和buffer2中,定义数据、编写代码完成EDX.EAX←buffer1-buffer2功能。 〔解答〕 buffer1 buffer2

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

(1)

(2)

(3)

mov eax,1011b rol eax,2

; EAX=__________B

; EAX=__________B,CF=__________

mov eax,1010b shr eax,2 shl eax,1 and eax,3

; EAX=__________B

; EAX=__________B,CF=__________ ; EAX=__________B,CF=__________ ; EAX=__________B,CF=__________

mov esi,10011100b and esi,80h or esi,7fh xor esi,0feh

; ESI=__________H ; ESI=__________H ; ESI=__________H ; ESI=__________H

; 数据段 qword 67883000h qword 67762000h ; 代码段

mov eax,dword ptr buffer1 mov edx,dword ptr buffer1+4 sub eax,dword ptr buffer2 sbb edx,dword ptr buffer2+4

- -17

(4)

〔解答〕

(1)

(2)

(3)

(4)

rcr eax,1 or eax,3 xor eax,eax

; EAX=__________B,CF=__________ ; EAX=__________B,CF=__________

; EAX=__________,CF=__________,OF=__________ ; ZF=__________,SF=__________,PF=__________

; ESI=9CH ; ESI=80H ; ESI=FFH ; ESI=01H

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

; EAX=1011B(可以有前导0,下同) ; EAX=101100B,CF=0 ; EAX=10110B,CF=0 ; EAX=10111B,CF=0 ; 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

; AX=1470H ; AX=1470H ; AX=1470H ; AX=0000H ; AX=FFFFH ; AX=0F0F0H

CF OF 0 0 0 0 0

0 0 0 0 0

SF 0 0 0 0 1

ZF 0 0 1 1 0

PF 0 0 1 1 1

mov ax,1470h and ax,ax or ax,ax xor ax,ax not ax

test ax,0f0f0h

- -18

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

〔解答〕

AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。

〔习题3.26〕说明如下程序段的功能: next:

mov ecx,16 mov bx,ax shr ax,1 rcr edx,1 shr bx,1 rcr edx,1 loop next mov eax,edx

〔解答〕

将AX的每一位依次重复一次,所得的32位结果保存于EAX中。 〔习题3.27〕

编程将一个64位数据逻辑左移3位,假设这个数据已经保存在EDX.EAX寄存器对中。

〔解答〕 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 ; 代码段 mov ecx,3 shl eax,1 rcl edx,1 loop again

- -19

call dispc

〔习题3.29〕以MOVS指令为例,说明串操作指令的寻址特点,并用MOV和ADD等指令实现MOVSD的功能(假设DF=0)。

〔解答〕

MOVS指令的功能是:

ES:[EDI]←DS:[ESI];ESI←ESI±1/2/4,EDI←EDI±1/2/4 由此可看出串操作指令的寻址特点:

源操作数用寄存器ESI间接寻址,默认在DS指向的数据段,但可以改变;目的操作数用寄存器EDI间

接寻址,只能在ES指向的附加数据段;每执行一次串操作,源指针ESI和目的指针EDI将自动修改:±1(字节),±2(字)或±4(双字)。指针的增量和减量控制由DF标志确定,DF=0,进行增量;DF=1,进行减量。

〔习题3.30〕说明如下程序执行后的显示结果: msg again:

; 数据段

byte 'WELLDONE',0 ; 代码段

mov ecx,(lengthof msg)-1 mov ebx,offset msg mov al,[ebx] add al,20h mov [ebx],al add ebx,1 loop again

mov eax,offset msg push eax mov eax,[esi] mov es:[edi],eax add esi,4 add edi,4

call dispmsg

如果将其中语句“mov ebx,offset msg”改为“xor ebx,ebx”,则利用EBX间接寻址的两个语句如何修改

成EBX寄存器相对寻址,就可以实现同样功能? 〔解答〕

显示结果:welldone EBX寄存器相对寻址:

mov al,msg[ebx] mov msg[ebx],al

- -20

联系客服:779662525#qq.com(#替换为@)