| | | |
?? 20H 0FH 86H 80H
|0FFACH←SP |0FFADH |0FFAEH |0FFAFH
再执行一条POP后:
| |0FF00H←SS ?? | 86H |0FFAEH←SP | 80H |0FFAFH
10. 用一条指令实现将BX与SI之和传送给CX的功能。
答:LEA CX, [BX+SI]
11. 写出下列指令中每条指令的执行结果,并指出标志位CF、ZF、OF、SF的变化情况。
MOV BX, 40ABH ADD BL, 09CH MOV AL, 0E5H CBW ADD BH, AL SBB BX, AX ADC AX, 20H SUB BH, -9 答:MOV BX, 40ABH ;将立即数40ABH传给寄存器BX,对标志位无影响 ADD BL, 09CH ;将9CH与ABH相加,结果47H存入BL,CF=1,ZF=0, ;OF=1,SF=0 MOV AL, 0E5H ;将立即数E5H传给寄存器AL,对标志位无影响 CBW ;对AL进行符号扩展,即AX为FFE5H,对标志位无影响 ADD BH, AL ;将AL中的数即E5H与BH中的数40H相加,结果25H存BH, ;CF=1,ZF=0,OF=1,SF=0 SBB BX, AX ;将BX中的数2547H减去AX中的数FFE5H,再减去标志位 ;CF=1,即将结果2561H存入BX中,CF=1,ZF=0,OF=1,SF=0 ADC AX, 20H ;将AX中的数FFE5H加20H,再加CF=1,即得0006H存 ;入AX,CF=1,ZF=0,OF=1,SF=0 SUB BH, -9 ;将BH中的数25H加上F7H(补码),即得1BH存入BH,CF=1,
;ZF=0,;OF=1,SF=0
12. 简述乘法指令和除法指令寻址方式的特点。
答:都是隐含寻址指令。都分8位和16位两种情况,其中8位乘法的被乘数在AL ·6·
中,指令给出8位乘数,得到的16位结果存放在AX中;16位乘法的被乘数在AX中,指令给出16位被乘数,32位结果在DX:AX中。8位除法的16位被除数在AX中,指令给出8位除数,8位商在AL中,8位余数在AH种;16位除法的32位操作数在DX:AX中,指令给出16位操作数,16位商在AX中,16位余数在DX中。乘法指令和除法指令都不允许立即数。
13. 完成一个计算DL(无符号数)三次方的指令序列。
答:MOV AL,DL IMUL DL MUL DL 14. 按下列要求编写指令序列。
清除DH中的最低三位而不改变其他位,结果存入BH中;
把DI中的最高5位置1而不改变其他位; 把AX中的0~3位置1,7~9位取反,13~15位置0; 检查BX中的第2、5和9位中是否有一位为1; 检查CX中的第1、6和11位中是否同时为1; 检查AX中的第0、2、9和13位中是否有一位为0; 检查DX中的第1、4、11和14位中是否同时为0; 答:(1)MOV BH,F8H
AND
BH,DH
(2)OR DI,FFF8H (3)OR AX,000FH XOR AX,0380H
AND
AX,1FFFH
(4)MOV DX,BX
TEST DX,0004H;若ZF=0,则第2位为1 TEST DX,0020H;若ZF=0,则第5位为1
TEST
DX,0200H;若ZF=0,则第9位为1
(5)XOR CX,0824H
JE
YES
(6)TEST DX,0001H;若ZF=1,则第0位为0
7·
·
TEST TEST TEST
DX,0002H;若ZF=1,则第2位为0 DX,0200H;若ZF=1,则第9位为0 DX,2000H;若ZF=1,则第13位为0
(7)XOR DX,4812H
JE
YES
15. NOT指令和NEG指令有何不同?编写指令序列将(DX:AX)中的双字算数求反。
答:NOT指令是对操作数的按位求反,称为逻辑求反。而NEG指令是算数求反。 NOT NOT ADD ADC
AX DX AX,1 DX,0
16. 使用移位指令将40和-49分别乘2和除2,请注意选择合适的移位指令。
答:MOV
SHL MOV SAR MOV SHL MOV SAR
AX,0028H;将40存入AX AX,1;(AX)*2 AX,0028H;将40存入AX AX,1;(AX)/2
AX,FFCFH;将-49存入AX AX,1;(AX)*2
AX,FFCFH;将-49存入AX AX,1;(AX)/2
17. 分析下面指令序列完成的功能。
MOV CL, 4 SHL
DX,
CL
MOV BL, 4H SHL SHR
AX, BL, CL
CL
·8·
OR DL,BL
CL,
4;将4存入CL
答:MOV SHL
DX, CL;(DX)*16
MOV BL, 4H;将4H存入BL SHL SHR OR
AX,
CL;(AX)*16
BL, CL;(BL)右移4位,为0 DL,BL;BL为0,取得DL的高四位
18. 方向标志DF的作用是什么?用于设置或消除该标志位的指令是什么?
答:作用是控制串的处理方向。指令STD设置DF=1,CLD清除DF。
19. 已知数据段中保存有100个字的数组,起始地址为0B00H。编写指令序列实现将-1插入
到第一个字。 答:
20. 什么是段间转移?什么是段内转移?它们的实现机制有何不同?
答:根据转移指令和转移指令要转移到的目标位置之间的关系,把转移分为段内转移和段间转移。段内转移中,转移的目标位置在当前代码段内,CS的内容不变,只改变IP的内容;段间转移中,转移的目标地址不在本段,此时CS和IP的内容都需要修改。 21. 条件转移指令中,所谓的“条件”是什么,如何做到?如何使用?请举例说明。
答:所谓的条件就是某个标志位或某几个标志位的状态。单一条件的5个标志位ZF、CF、OF、SF和PF,以及它们的否定。多个标志位的联合还可以构成复合条件。例如:
CMP JZ ?? Equal:
22. 假设AX和BX中的内容是有符号数,CX和DX中的内容是无符号数,试实现:
如果(DX)>(CX),则转到EXCEED; 如果(BX)>(AX),则转到EXCEED;
AX,1 ;执行(AX)-1不保存结果 Equal
;如果结果为零(ZF=1)则转移到Equal
·9·
如果(CX)=0,则转到ZERO;
如果(BX)-(AX)将产生溢出,则转到OVERFLOW; 如果(BX)?(AX),则转到NOTBIG; 如果(DX)?(CX),则转到NOTBIG; 答:(1)CMPDX,CX
JA
EXCEED
(2)CMPBX,AX
JG
EXCEED
(3)CMPCX,0
JZ
ZERO
(4)CMPBX,AX
JO
OVERFLOW
(5)CMPBX,AX
JLE
NOTBIG
(6)CMPDX,CX
JBE
NOTBIG
23. 已知数据段中保存有100个字的数组,起始地址为0B00H。编写指令序列实现将数组中
的每个字加1。 答:LEA
MOV
SI,0B00H CX,100 AX,[SI] AX [SI],AX SI,2 L1
L1:MOV
INC MOV ADD LOOP
24. 简述段内调用和段间调用的主要区别。
· ·10