〔习题3.19〕请分别用一条汇编语言指令完成如下功能:
(1)把EBX寄存器和EDX寄存器的内容相加,结果存入EDX寄存器。
(2)用寄存器EBX和ESI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。
(3)用EBX和位移量0B2H的寄存器相对寻址方式把存储器中的一个双字和ECX寄存器的内容相加,并把结果送回存储器中。
(4)将32位变量VARD与数3412H相加,并把结果送回该存储单元中。 (5)把数0A0H与EAX寄存器的内容相加,并把结果送回EAX中。 〔解答〕
〔习题3.20〕分别执行如下程序片断,说明每条指令的执行结果:
(1)
mov eax,80h add eax,3 add eax,80h adc eax,3 (2)
mov ax,64h add ax,c8h (3)
mov ax,64h add al,c8h (4)
mov al,7fh sub al,8 sub al,80h sbb al,3
; EAX=__________
; EAX=__________,CF=__________,SF=__________ ; EAX=__________,CF=__________,OF=__________ ; EAX=__________,CF=__________,ZF=__________ ; EAX=__________
; EAX=__________,CF=__________ ; EAX=__________
; EAX=__________,CF=__________
; AL=__________
; AL=__________,CF=__________,SF=__________ ; AL=__________,CF=__________,OF=__________ ; AL=__________,CF=__________,ZF=__________
① add edx,ebx
② add al,[ebx+esi] ③ add [bx+0b2h],cx ④ add varw,3412h ⑤ add eax,0a0h
〔解答〕
(1) ; EAX=80H ; EAX=83H,CF=0,SF=0 ; EAX=103H,CF=0,OF=0 ; EAX=106H,CF=0,ZF=0
(2) ; AX=64h ; AX=012c,CF=0
(3) ; AX=64h ; AX=2c,CF=1
(4) mov al,7fh ; AL=7FH sub al,8 ; AL=77H,CF=0,SF=0 sub al,80h ; AL=F7H,CF=1,OF=1
- -16
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
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
〔习题3.23〕分别执行如下程序片断,说明每条指令的执行结果:
(1)
mov esi,10011100b and esi,80h or esi,7fh xor esi,0feh (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)
; 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=__________
; 数据段
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
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的状态。 〔解答〕
〔习题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 mov ax,1470h 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
- -18
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
〔习题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,进行减量。 push eax mov eax,[esi] mov es:[edi],eax add esi,4 add edi,4
; 数据段
byte 92h ; 代码段 mov al,bcd shr al,4 add al,30h call dispc mov al,bcd and al,0fh add al,30h call dispc ; 代码段 mov ecx,3 shl eax,1 rcl edx,1 loop again
- -19
〔习题3.30〕说明如下程序执行后的显示结果:
; 数据段 msg byte 'WELLDONE',0 ; 代码段 mov ecx,(lengthof msg)-1 mov ebx,offset msg again: mov al,[ebx] add al,20h mov [ebx],al add ebx,1 loop again mov eax,offset msg call dispmsg
如果将其中语句“mov ebx,offset msg”改为“xor ebx,ebx”,则利用EBX间接寻址的两个语句如何修改成EBX寄存器相对寻址,就可以实现同样功能? 〔解答〕
显示结果:welldone EBX寄存器相对寻址: mov al,msg[ebx] mov msg[ebx],al
〔习题3.31〕下面程序的功能是将数组ARRAY1的每个元素加固定值(8000H),将和保存在数组ARRAY2。在空白处填入适当的语句或语句的一部分。
array1 array2
again:
; 数据段
dword 1,2,3,4,5,6,7,8,9,10 dword 10 dup(?) ; 代码段
mov ecx,lengthof array1 mov ebx,0
mov eax,array1[ebx*4] add eax,8000h
mov ______________ add ebx,__________ loop again
〔解答〕 mov array2[ebx*4],eax add ebx,1 〔习题3.32〕
上机实现本章的例题程序,编程实现本章的习题程序。
第4章 汇编语言程序设计
〔习题4.1〕简答题
(1)是什么特点决定了目标地址的相对寻址方式应用最多?
(2)什么是奇偶校验?
- -20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库微机原理与接口技术(第四版)课后习题答案(佳木斯大学)(4)在线全文阅读。
相关推荐: