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

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 〔解答〕 mov al,89h ; AL=89H CF ZF SF OF PF add al,al ; AL=12H 1 0 0 1 1 add al,9dh ; AL=0AFH 0 0 1 0 1 cmp al,0bch ; AL=0AFH 1 0 1 0 1 sub al,al ; AL=00H 0 1 0 0 1 dec al ; AL=0FFH 0 0 1 0 1 inc al ; AL=00H 0 1 0 0 1 〔习题3.22〕

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

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〕

分别执行如下程序片断,说明每条指令的执行结果: 〔解答〕 (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.26〕

说明如下程序段的功能: mov ecx,16 mov bx,ax next: 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寄存器对中。 〔解答〕 ; 代码段 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.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 〔习题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 dword 1,2,3,4,5,6,7,8,9,10 array2 dword 10 dup(?) ; 代码段 mov ecx,lengthof array1 mov ebx,0

again: 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”的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验。

③ 无符号数和有符号数的操作影响两组不同的标志状态位,故判断两个无符号数和有符号数的大小关系要利用不同的标志位组合,所以有对应的两组指令。

④ 双分支结构中两个分支体之间的JMP指令,用于实现结束前一个分支回到共同的出口作用。 ⑤ 完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。

⑥ 子程序保持堆栈平衡,才能保证执行RET指令时当前栈顶的内容是正确的返回地址。主程序也要保持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。

⑦ “传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用程序;“传址”时,被调用程序可能修改通过地址引用的变量内容。

⑧ INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件。 ⑨ 取长补短。

⑩ Windows程序在运行时需要加载其配套的动态链接库DLL文件,当其没有被搜索到时就会提示不存在。

〔习题4.2〕判断题 〔解答〕

① 对 ② 错 ③ 错 ④ 错 ⑤ 错 ⑥ 对 ⑦ 对 ⑧ 错 ⑨ 对 ⑩ 错 〔习题4.3〕填空题 〔解答〕

① 相对寻址,间接寻址,直接寻址,间接寻址 ② 1256H,3280H