微机原理与接口技术-课后习题答案 联系客服

发布时间 : 星期二 文章微机原理与接口技术-课后习题答案更新完毕开始阅读6cfd2960b90d6c85ed3ac63b

; 代码段

mov ebx,offset table mov al,8 xlat

为了验证你的判断,不妨使用本书的I/O子程序库提供的子程序DISPHB显示换码后AL的值。如果不使用XLAT指令,应如何修改? 〔解答〕

table

; 数据段

byte 18h,34h,05h,06h,09h,0ah,0ch,11h,12h,14h ; 定义格雷码表 ; 代码段

mov ebx,offset table ; EBX=格雷码表首地址 mov al,8 ; AL=8 xlat ; AL=12H(8的格雷码) mov ebx,offset table mov eax,0 mov al,8 mov al,[eax+ebx]

; EBX=格雷码表首地址 ; AL=8

; AL=12H(8的格雷码)

不使用XLAT指令:

〔习题3.19〕

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

(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。

(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。

(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。

(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。 (5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。 〔解答〕

① add edx,ebx

② add al,[ebx+esi] ③ add [bx+0b2h],cx ④ add varw,3412h ⑤ add eax,0a0h

〔习题3.20〕

分别执行如下程序片断,说明每条指令的执行结果: (1)

mov eax,80h add eax,3 add eax,80h adc eax,3

; EAX=__________

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

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

; EAX=__________,CF=__________

(2)

mov eax,100 add ax,200

(3)

mov eax,100 add al,200

- -17

(4)

mov al,7fh sub al,8 sub al,80h sbb al,3

; AL=__________

; AL=__________,CF=__________,SF=__________ ; AL=__________,CF=__________,OF=__________ ; 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 sub al,8 sub al,80h sbb al,3

; AL=7FH

; AL=77H,CF=0,SF=0 ; AL=F7H,CF=1,OF=1 ; 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 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 0 0 1 0 0 1 0 0 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

; 数据段

qword 67883000h qword 67762000h ; 代码段

- -18

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

〔习题3.23〕

分别执行如下程序片断,说明每条指令的执行结果: (1)

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

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

; EAX=__________B

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

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

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

(2)

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

(3)

mov eax,1011b rol eax,2 rcr eax,1 or eax,3

(4)

xor eax,eax

〔解答〕

(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

- -19

and ax,ax or ax,ax xor ax,ax not ax

test ax,0f0f0h 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

〔解答〕

〔习题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:

; 代码段 mov ecx,3 shl eax,1 rcl edx,1 loop again

〔习题3.28〕

编程将一个压缩BCD码变量(例如92H)转换为对应的ASCII码,然后调用DISPC子程序(在输入输出子程序库中)显示。 〔解答〕

bcd

; 数据段 byte 92h ; 代码段 mov al,bcd

- -20