(3)ADD AX,[BX+DI] (4)AND AX,BX (5)MOV [SI],AX (6)PUSHF
答:(1)目的操作数字段的寻址方式是寄存器寻址,源操作数字段的寻址方式是立即数寻址;
(2)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是寄存器相对寻址;
(3)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是基址变址寻址;
(4)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式也是寄存器寻址;
(5)目的操作数的寻址方式是寄存器间接寻址,源操作数的寻址方式是寄存器寻址;
(6)目的操作数的寻址方式是寄存器间接寻址,源操作数的寻址方式是寄存器寻址;
6.试述指令MOV AX,H和MOV AX,DS:[H] 的区别。
答:指令MOV AX,H是将立即数H送AX寄存器,而指令MOV AX,DS:[H]是将DS段有效地址为H的两个单元的内容送AX。 7.写出以下指令中内存操作数的所在地址。 (1)MOV AL,[BX+5] (2)MOV [BP+5],AX
(3)INC BYTE PTR [SI+3] (4)MOV DL,ES:[BX+DI] (5)MOV BX,[BX+SI+2]
答:(1)指令MOV AL,[BX+5]中内存操作数的所在地址=(DS)*10H+(BX)+5;
(2)指令MOV [BP+5],AX中内存操作数的所在地址=(SS)*10H+(BP)+5和(SS)*10H+(BP)+6;
(3)指令INC BYTE PTR[SI+3]中内存操作数的所在地址=(DS)+(SI)+3; (4)指令MOV DL,ES:[BX+DI]中内存操作数的所在地址=(ES)*10H+(BX)+(DI);
(5)指令MOV BX,[BX+SI+2]中内存操作数的所在地址=(DS)*10H+(BX)+(SI)+2和(DS)*10H+(BX)+(SI)+3;
8.判断下列指令书写是否正确,如有错误,指出错在何处并用正确的程序段(一条或多条指令)实现原错误指令((8)、(13)除外)期望实现的操作。 (1)MOV AL,BX (9)MOV ES,3278H (2)MOV AL,SL (10)PUSH AL (3)INC [BX] (11)POP [BX]
(4)MOV 5,AL (12)MOV [1A8H],23DH (5)MOV [BX],[SI] (13)PUSH IP (6)MOV BL,F5H (14)MOV [AX],23DH (7)MOV DX,2000H (15)SHL AX,5
(8)POP CS (16)MUL AX,BX
答:(1)MOV AL,BX 错,源操作数为字类型,目的操作数为字节类型,二者不一致。应改为:MOV AX,BX 或 MOV AL,BL ;
(2)MOV AL,SL 错,SI寄存器不能分为高8位和低8位使用,即没有SL寄存器。应改为:MOV AX,SI
(3)INC [BX] 错,未指定操作数的类型。应改为:INC BYTE PTR [BX] (4)MOV 5,AL 错,目的操作数使用了立即数,在指令中一般不允许。应改为:MOV DS:[5],AL
(5)MOV [BX],[SI] 错,源操作数和目的操作数均为内存单元,不允许。 应改为:MOV AX,[SI]
MOV [BX],AX
(6)MOV BL,F5H 错,源操作数错,以A~F开头的数字前应加0。应改为:MO
V BL,0F5H
(7)MOV DX,2000H 正确。
(8) POP CS 错,不能将栈顶数据弹至CS中。 (9)MOV ES,3278H 错,立即数不能直接送ES寄存器。
应改为:MOV AX,3278H MOV ES,AX
(10)PUSH AL 错,栈操作不能按字节进行。应改为:PUSH AX (11)POP [BX] 正确。
(12)MOV [1A8H],23DH 错,源操作数是立即数,目的操作数必须使用寄存器指出。应改为:
MOV BX,1A8H MOV [BX],23DH
(13)PUSH IP 错,不能用IP寄存器做源操作数。
(14)MOV [AX],23DH 错,不能用AX寄存器间接寻址。应改为:MOV BX,AX MOV [BX],23DH (15)SHL AX,5 错,不能用大于己于1的立即数指出移位位数。应改为:
MOV CL,5 SHL AX,CL
(16)MUL AX,BX 错,目的操作数AX是隐含的,不能在指令中写出。应改为:MUL BX
9.设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问: (1)执行指令PUSH AX后 (SP)=?
(2)再执行PUSH BX及POP AX后 (SP)=?(AX)=?(BX)=? 答:(1)执行指令PUSH AX后 (SP)=2000H-2=1FFEH;
(2)再执行PUSH BX及POP AX后 (SP)=1FFEH, (AX)=5000H, (BX)=5000H 10.要想完成把[2000H]送[1000H]中,用指令:MOV [1000H],[2000H]是否正确?如果不正确,应用什么方法?
答:把[2000H]送[1000H]中,用指令 MOV [1000H],[2000H]不正确,应改为:
MOV AX,[2000H] MOV [1000H],AX
11.假如想从200中减去AL中的内容,用SUB 200,AL是否正确?如果不正确,应用什么方法?