第3章习题参考答案
1分别指出下列指令中的源操作数和目的操作数的寻址方式。
答:源操作数目的操作数(1)MOV AX,[SI] 寄存器寻址寄存器间接寻址
(2)MOV DI,100 寄存器寻址立即寻址
(3)MOV [BX],AL 寄存器间接寄存器
(4)MOV [BX][SI],CX 基址+变址寄存器
(5)ADD DX,106H[SI] 寄存器变址
(6)PUSH AX 寄存器
(7)ADD DS:[BP],AX 带段超越寄存器间接寻址寄存器
(8)OR AX,DX 寄存器寄存器
2.设寄存器(DS)=2000H,(SS)=1500H,(ES)=3200H,(SI)=0A0H,(BX)=100H,(BP)=10H,数据段中变量VAL的偏移地址为50H。
试指出下列各条指令中源操作数的寻址方式是什么?对于存储器操作数,其物理地址是多少?
答:操作数的寻址方式存储器操作数PA (1)MOV AX,[100H] 直接寻址20100H
(2)MOV CX,ES:[BX] 带段超越的寄存器间接寻址32100H
(3)MOV DX,[BX][SI] 基址+变址寻址200F0H
(4)MOV AX,V AL[SI] 变址寻址200F0H
(5)MOV BX,1234[BX] 基址寻址205D2H
(6)MOV AX,[BP] 寄存器间接寻址15010H
3. 判断下列指令有误错误,若有,则改之。
答:
(1)PUSH CL 有错,对堆栈操作数总是16位的。
改为:PHSH CX (2)ADCAX,0ABH 无,只是CF的值是不确定的(0或1)
(3)OUT 3EBH, AX 有,输出设备的端口地址若超过8位,应使用DX 间接寻址。
改为:
MOV DX, 3EBH
OUT DX,AX
(4)MUL AL, CL 有错。
乘法指令中有AX或AL寄存器是隐含的。
改为:
MUL CL
(5)MUL AX, 25 有错。
乘法指令中不能用立即数。
改为:
MOV BX,25
MUL BX
(6)ROL DX,5 有错。
移位的次数由CL寄存器控制。
改为:
MOV CL,5
ROL DX,CL
(7)CALL FAR SUM 无错。
(8)POP FR 有错。
寄存器FR是不能单独操作的,改为:POPF
(9)MOV 234H, BX 有错。
立即数不能作为目的操作数。
改为:
MOV BX, 234H
(10)INC [SI] 有错。
该错误主要是针对汇编程序的。
由于翻译这条指令时,不知是8位的还是16位的目标码,故要加入宏汇编的综合运算符PTR。
改为:INC BYTE PTR [SI]
(11)ADD [BX],456H有错。
改为:ADD WORD PTR [BX], 456H
(12)INT O有错。
这条指令是没有的
(13)DIV AX ,BX 有错。
除法指令中,AX或DX.AX作为被除数是隐含的。
改为:DIV BX
(14)DEC [BP] 有错。
与题(10)有类似的错误。
改为:
DEC WORD PTR [BP]
(15)XLAT BX XLAT的操作数是隐含的,它是一条复合指令,在执行该指令之前,将BX指向表的手地址,AL中存入被转换的码,然后执行该指令。
(16)ADD CX+1 有错。
操作数CX+1是完全错误的。
改为:INC CX (17)DAA AX 有错。
调整指令是专门对AL寄存器的内容进行调整的,故指令中操作数是隐含的。
改为:DAA
4选择题
(1)带符号数-86所表示的二进制数值是(A)
A. 10101010B
B. 01100101B
C. 10011101B
D. 11001011B
(2)执行MOV DL, 2AH 和SHR DL,1两条指令后,DL寄存器与CF标志分别为(D)
A. DL=10110110 CF=1
B. DL=00110101 CF=0
C. DL=00110100 CF=1
D. DL=00010101 CF=1
(3)可将AX寄存器中D0, D5, D8和D11位求反,其余位不变的指令是(C)
A. AND AX,921H
B. OR AX,910H
C. XOR AX,0921H
D. XOR AX,0110H
(4)某存储单元物理地址为3B4FH,其段地址和偏移地址可选为(B)
A. 3B4FH和104EH
B. 3B40H和00FEH
C. 2A00H和114FEH
D. 3B4FH和0H
(5)两个8位二进制数00110101及10110110做“异或”操作后,寄存器FR的下面3个状态标志分别是(C)
A. PF=1 SF=1 ZF=0
B. PF=0 SF=1 ZF=1
C. PF=0 SF=1 ZF=0
D. PF=1 SF=1 ZF=1
(6)当执行存储器写指令时,如MOV [SI],AX, 则CPU的外部管脚状态是(D)
A. WR=1 RD=1 M\IO=0
B. WR=0 RD=1 M\IO=1
C. WR=1 RD=0 M\IO=1
D. WR=0 RD=1 M\IO=1
5:已知(DS)=2000H,(BX)=100H,(SI)=02H,从物理地址20100H单元开始,依次存放数据12H,34H,56H,78H,而从物理地址21200H单元开始,依次存放数据2AH,,4CH,8BH,98H。
试说明下列各条指令单独执行后AX寄存器的
内容。
答:
(1)MOV AX,3600H 3600H
(2)MOV AX,[1200H] 4C2AH
(3)MOV AX,BX 0100H
(4)MOV AX,[BX] 3412H
(5)MOV AX,1100H[BX] 4C2AH
(6)MOV AX,[BX][SI] 7856H
6.设堆栈指针SP的初值为2400H,
(AX)=4000H,(BX)=3600H,问:
(1)执行指令“PUSH AX”后,SP=?
(2)再执行“PUSH AX”和”POP AX”后,(SP)=? (AX)=?
(BX)=?
试画出堆栈变化示意图。
答:
(1)执行指令“PUSH AX”后,则将AX的内容推入
堆栈,SP先减2((SP)=23FEH),以指示栈顶位置,AL
的内容推入23FEH,而AH的内容推入23FFH
(2)再执行“PUSH AX”,SP先减2((SP)=23FCH),BL的内容推入23FCH,而BH的内容推入23FDH
(3)再执行“POP AX”,从SP指针指示的单元(23FCH)中弹出数据,存入AX中,SP加2((SP)=23FEH),指示栈顶位置。
故3条指令执行完毕,
(SP)=23FEH (AX)=3600H (BX)=3600H
7. 指出下面指令序列的执行结果。
答:
(1)MOV DX, 2000H
MOV BX, 1000H
XHGH BX, DX
(BX)=2000H, (DX)=1000H
(2)MOV AX,1234H
PUSH AX
POP BX
(AX)=1234H, (BX)=1234H
(3)LEA DX,[ 2000H]
MOV BX, DX
(BX)=2000H
(4)MOV AL,08
ADD AL,08
AAA
(AX)=0106
(5)MOV AL,48H
ADD AL,39H
DAA
(AL)=87H
(6)AND AL,AL
MOV AL,80
ADC AL,AL
(AL)=0A0H
(7)MOV DX,OFFFH
NEG DX
(DX)=0001H
(8)MOV BL,OB8H
ROR BL,1
(BL)=5CH, CF=0(9)SUB AX,AX
AND DX,AX
(DX)=0
(10)MOV CL,3
MOV AH,42H
SHR AH,XL
(AH)=08H,CF=0 (11)MOV AX, 34EBH
MOV CL,5FH
DIV CL
(AX)=8FH
(12)MOV AL,08H
MOV BL,09
MUL BL
AAM
(AX)=0702H
(13)MOV BL,9
MOV AX,0702H
AAD
DIV BL
(AX)=0008H
(14)MOV AL98H
CBW
(AX)=0FF98H
(15)MOV AH,2
MOV DL,`W`
INT 21H
结果=执行DOS的2号功能调用,在屏幕上显示字母W。