5.3 习题

5.1、书写正确的MOV指令,需要符合哪些规定?在32位CPU中,增加了什么指令来克服不同数据类型之间的数据传送?

5.2、简述指令MOV BX, 1234H、MOV BX, [1234]和MOV BX, offset [1234H]的功能和它们之间区别。

5.3、简述指令MOV BX, Data和MOV BX, offset Data之间的区别。

5.4、选择指令实现下列要求,OPN1 ← OPN2的含义:把操作数OPN2的值传送给OPN1

1)、EBX ← EDX
3)、SI ← BX
5)、AL ← BH
7)、AX ← 13AH
9)、SI ← 1000H

2)、BX ← CL
4)、DS ← AX
6)、AL ← 12H
8)、CX ← 0CDH                        (假设0CDH为无符号数)
10)、EBX ← 1200A2H

5.5、PUSHA指令能把哪些寄存器压栈?它们进栈的顺序是什么?可用什么指令把这些寄存器依次弹出堆栈?

5.7、PUSHAD指令完成什么操作?它与什么操作的作用相反?

5.8、在16位/32位CPU中,标志位寄存器的内容进栈和出栈的指令是什么?

5.9、写出下列指令序列中每条指令的执行结果,请在Debug环境下验证之,并注意各标志位的变化情况。

MOV   BX, 23ABH
ADD   BL, 0ACH
MOV   AX, 23F5H
ADD   BH, AL
SBB    BX, AX
ADC   AX, 12H
SUB   BH, -9

5.10、假定DS=1123H,SS=1400H,BX=0200H,BP=1050H,DI=0400H,SI=0500H,LIST的偏移量为250H,试确定下面各指令访问内存单元的地址。

1)、MOV AL, [1234H] 2)、MOV AX, [BX]
3)、MOV [DI], AL 4)、MOV [2000H], AL
5)、MOV AL, [BP+DI] 6)、MOV CX, [DI]
7)、MOV EDX, [BP] 8)、MOV LIST[SI], EDX
9)、MOV CL, LIST[BX+SI] 10)、MOV CH, [BX+SI]
11)、MOV EAX, [BP+200H] 12)、MOV AL, [BP+SI+200H]
13)、MOV AL, [SI-0100H] 14)、MOV BX, [BX+4]

5.11、用一条指令实现把BX和SI之和传送给CX。

5.12、试比较下列三组指令的功能。

1)、LDS SI, [DI] 2)、MOV SI, [DI]   3)、MOV SI, [DI+2]
  MOV SI, [DI+2]    MOV SI, [DI]

5.13、标志位CF有着重要的作用,请简述之,并至少写出三种把CF置0的方法。

5.14、写一个计算DL三次方的指令序列,假设幂不超过16位二进制。

5.15、写出一个指令序列实现:用CL中数据除BL中的数据,然后商乘2,最后的结果存入DX中。

5.16、按下列要求编写指令序列。

1)、清除DH中的最低三位而不改变其它位,结果存入BH中;
2)、把DI中的最高5位置1而不改变其它位;
3)、把AX中的0~3位置1,7~9位取反,13~15位置0;
4)、检查BX中的第2、5和9位中是否有一位为1;
5)、检查CX中的第1、6和11位中是否同时为1;
6)、检查AX中的第0、2、9和13位中是否有一位为0;
7)、检查DX中的第1、4、11和14位中是否同时为0;

5.17、简述指令AND和TEST、NOT和NEG之间的区别。

5.18、选择适当的指令实现下列功能。

1)、右移DI三位,并把零移入最高位;
2)、把AL左移一位,使0移入最低一位;
3)、AL循环左移三位;
4)、EDX带进位位循环右移四位;
5)、DX右移六位,且移位前后的正负性质不变。

5.19、判断下列指令的正确性,若某指令是错误的,请说明其错误原因。

1)、MOV BL, CX 2)、MOV DS, SS
3)、MOV [BX], [DI] 4)、MOV AL, [BX][SI]
5)、MOV ES, AL 6)、MOV DS, DX
7)、MOV CS, AX 8)、MOV BX, CS
9)、MOV DS, 1230H 10)、MOVSX  DS, AL
11)、XCHG BX, 3 12)、POP CS
13)、MOV IP, SI 14)、PUSH CS
15)、PUSH BL 16)、MOV [SP], BX
17)、MOV AX, BX+3 18)、MOV AX, [BX+3]
19)、MOV BX, [BX] 20)、MOV BH, [BL]
21)、XCHG ES, AX  22)、LEA AX, [BX+SI]
23)、MUL 10H 24)、IMUL DX, 10H
25)、DIV 10 26)、IDIV DX, 10H
27)、SHL AX, CX 28)、SHR BX, CH
29)、ROL BX, 20 30)、RCR AX, CL
31)、CMP AX,1234H 32)、CMP 12H, CL
33)、JCXZ next 34)、JEBXZ next   (假设标号next已存在)

5.20、方向标志DF的作用是什么?用于设置或消除该标志位的指令是什么?

5.21、串指令用DI和SI寻址哪些内存段中的内存数据?

5.22、段间转移和段内转移之间的区别是什么?

5.23、SCASB指令的作用是什么?叙述指令REPE  SCASB指令所完成的功能。

5.24、指令REPNE  SCASB结束执行的条件是什么?

5.25、REP前缀的作用是什么?能用指令REP LODSB读取DS:SI所指内存中的每个字符来进行处理吗?若不能,请说明原因。

5.26、编写指令序列,在字符串LIST中查寻字符'B',若找到,则转向Found,否则,转向NotFound,假设该字符串含有300个字符。

5.27、编写指令序列,把Source存储区域中的12个字节传送到Dest存储区域内。

5.28、设计一个短指令序列,将32位数AX:BX中的8位BCD与CX:DX中的8位BCD相加,并把所得结果存入CX:DX中。

5.29、有符号数比较后,用什么样的条件转移指令实现转移?无符号数比较后,用什么样的条件转移指令实现转移?