微机课后习题答案(4)

2018-12-17 16:10

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

; 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

- -16

(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的状态。 〔解答〕

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

〔解答〕

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

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

next:

mov ecx,16 mov bx,ax shr ax,1 rcr edx,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

- -17

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

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

- -18

〔习题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)什么是奇偶校验?

- -19

(3)为什么判断无符号数大小和有符号大小的条件转移指令不同? (4)双分支结构中两个分支体之间的JMP指令有什么作用? (5)为什么特别强调为子程序加上必要的注释?

(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题? (7)参数传递的“传值”和“传址”有什么区别? (8)INCLUDE语句和INCLUDELIB有什么区别? (9)混合编程有什么优势?

(10)运行Windows程序,有时为什么会提示某个DLL文件不存在?

〔解答〕

① 当同一个程序被操作系统安排到不同的存储区域执行时,指令间的位移没有改变,目标地址采用相对寻址可方便操作系统的灵活调度。

② 数据通信时,数据的某一位用做传输数据的奇偶校验位,数据中包括校验位在内的“1”的个数恒为奇数,就是奇校验;恒为偶数,就是偶校验。

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

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

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

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

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

⑨ 取长补短。

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

〔习题4.2〕判断题

(1)指令指针或者还包括代码段寄存器值的改变将引起程序流程的改变。 (2)JMP指令对应高级语言的GOTO语句,所以不能使用。

(3)因为条件转移指令Jcc要利用标志作为条件,所以也影响标志。

(4)JA和JG指令的条件都是“大于”,所以是同一个指令的两个助记符。 (5)控制循环是否结束只能在一次循环结束之后进行。

(6)介绍LOOP指令时,常说它相当于DEC ECX和JNZ两条指令。但考虑对状态标志的影响,它们有差别。LOOP指令不影响标志,而DEC指令却会影响除CF之外的其他状态标志。

(7)CALL指令用在调用程序中,如果被调用程序中也有CALL指令,说明出现了嵌套。 (8)子程序需要保护寄存器,包括保护传递入口参数和出口参数的通用寄存器。 (9)利用INCLUDE包含的源文件实际上只是源程序的一部分。

(10)导入库文件和静态子程序库文件的扩展名都是LIB,所以两者性质相同。 〔解答〕

① 对 ⑥ 对

② 错 ⑦ 对

③ 错 ⑧ 错

④ 错 ⑨ 对

⑤ 错 ⑩ 错

〔习题4.3〕填空题

(1)JMP指令根据目标地址的转移范围和寻址方式,可以分成四种类型:段内转移、__________,段内转移、__________和段间转移、__________,段间转移、__________。

(2)假设在平展存储模型下,EBX=1256H,双字变量TABLE的偏移地址是20A1H,线性地址32F7H处存放3280H,执行指令“JMP EBX” 后EIP=__________,执行指令“JMP TABLE[EBX]”后EIP=__________。

(3)“CMP EAX,3721H”指令之后是JZ指令,发生转移的条件是EAX=__________,此时ZF=__________。

- -20


微机课后习题答案(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:“先放后收”与作文教学

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: