第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,VAL[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