精品文档
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功能。(去E)
〔解答〕 ; 数据段 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〕分别执行如下程序片断,说明每条指令的执行结果:(去E)
(1) mov esi,10011100b ; ESI=__________H and esi,80h ; ESI=__________H or esi,7fh ; ESI=__________H xor esi,0feh ; ESI=__________H
(2) mov eax,1010b ; EAX=__________B shr eax,2 ; EAX=__________B,CF=__________ shl eax,1 ; EAX=__________B,CF=__________
收集于网络,如有侵权请联系管理员删除
精品文档
and eax,3 ; EAX=__________B,CF=__________ (3) mov eax,1011b ; EAX=__________B rol eax,2 ; EAX=__________B,CF=__________ rcr eax,1 ; EAX=__________B,CF=__________ or eax,3 ; EAX=__________B,CF=__________
(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的状态。
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
〔习题3.25〕逻辑运算指令怎么实现复位、置位和求反功能?
1
〔解答〕
AND指令同“0”与实现复位,OR指令同“1”或实现置位,XOR同“1”异或实现求反。 〔习题3.27〕(去E)
编程将一个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.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 第4章 汇编语言程序设计 〔习题4.1〕简答题
(3)为什么判断无符号数大小和有符号大小的条件转移指令不同?
(4)双分支结构中两个分支体之间的JMP指令有什么作用? (5)为什么特别强调为子程序加上必要的注释?
(6)子程序采用堆栈传递参数,为什么要特别注意堆栈平衡问题? (7)参数传递的“传值”和“传址”有什么区别? (8)INCLUDE语句和INCLUDELIB有什么区别? 〔解答〕
③ 无符号数和有符号数的操作影响两组不同的标志状态位,故判断两个无符号数和有符号数的大小关系要利用不同的标志位组合,所以有对应的两组指令。
④ 双分支结构中两个分支体之间的JMP指令,用于实现结束前一个分支回到共同的出口作用。
⑤ 完整的子程序注释可方便程序员调用该子程序,子程序注释包括子程序名、子程序功能、入口参数和出口参数、调用注意事项和其他说明等。
⑥ 子程序保持堆栈平衡,才能保证执行RET指令时当前栈顶的内容是正确的返回地址。主程序也要保持堆栈平衡,这样才能释放传递参数占用的堆栈空间,否则多次调用该子程序可能就致使堆栈溢出。
收集于网络,如有侵权请联系管理员删除
精品文档
⑦ “传值”是传递参数的一个拷贝,被调用程序改变这个参数不影响调用程序;“传址”时,被调用程序可能修改通过地址引用的变量内容。
⑧ INCLUDE语句包含的是文本文件、是源程序文件的一部分;INCLUDELIB语句包含的是子程序库文件。 〔习题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=__________。(去E)
(5)循环结构程序一般有三个部分组成,它们是__________,循环体和__________部分。
(7)过程定义开始是“TEST PROC”语句,则过程定义结束的语句是__________。宏定义开始是“DISP MACRO”语句,则宏定义结束的语句是__________。
(8)利用堆栈传递子程序参数的方法是固定的,例如寻址堆栈段数据的寄存器是__________。
(9)MASM汇编语言中,声明一个共用的变量应使用__________伪指令;而使用外部变量要使用__________伪指令声明。 〔解答〕
① 相对寻址,间接寻址,直接寻址,间接寻址 ② 1256H,3280H ③ 3721H,1
⑤ 循环初始,循环控制 ⑦ TEST ENDP,ENDM ⑧ EBP
⑨ PUBLIC,EXTERN 〔习题4.6〕
执行如下程序片断后,CMP指令分别使得5个状态标志CF、ZF、SF、OF和PF为0还是为1?它会使得哪些条件转移指令指令Jcc的条件成立、发生转移? mov eax,20h cmp eax,80h 〔解答〕
CF=1 ZF=0 SF=1 OF=0 PF=1
收集于网络,如有侵权请联系管理员删除