习题 9. 假设堆栈寄存器(SS)= 1E2CH,程序中设定堆栈的长度为100个字节。试计算该程序的堆栈栈底字单元的物理地址,堆栈指针SP的初始值(即堆栈中没有数据时)和SP初始值指向的物理地址。 解:
100=64H
堆栈栈底字单元的物理地址: 1E2CH×10H+64H-2=1E322H 堆栈指针SP的初始值: 64H SP初始值指向的物理地址:1E2CH×10H+64H=1E324H
习题 10. 设(SP)=40H,(BX)=1234H ,(DS)=5678H. 如现有两条压栈指令: PUSH BX PUSH DS
试问两条指令执行后,图4 – 46中各单元的的数据是多少?(SP)等于多少? 答: (SP)=3CH
习题 11. 设(SP)=60H,则执行下述3条指令后,(水平)的值为多少? PUSH AX ; (SP)=5EH PUSH BX ; (SP)=5CH POP CX ; (SP)=5EH 解: (SP)=5EH
习题 12. 试分别说明下列各指令中源操作数和目的操作数使用的寻址方式,试说明如何确定有效地址EA.
(1) ADD AX , 0A51H
(2) MOV BL , DATA1
(3) MOV DS , AX
17 / 42
(4) AND AL , VAR1+2
(5) TEST [SI] , CL
(6) OR ARRY[BX] , - 1
(7) SUB DS:[01FEH] , DX
(8) ADC [BP][DI] , BH
18 / 42
(9) AND CX , - 19[BX][SI]
(10) PUSH ES
(11) CLC ; CF←0
13. 试分别指出下列各指令语句的语法是否有错误,若有错,指明是什么错误。 (1) MOV AL , 0F5H ;√ (2) (2)ADD [BX][BP] , BX ; √ (3) (3)CMP AL , 100H ; √ (4) (4)TEST [BP] , DL ; √
(5) (5)ADC 15H , CL ; × ADC是双操作数指令; 目的地址不能为立即数
(6) (6)SUB [DI] , DA_WORD ; × 源操作数和目的操作数不能同时为存储器操作数 (7) (7)OR CH , CL ; √
(8) (8)MOV AL , 1000H ; × 源操作数和目的操作数类型属性不一致 (9) (9)SAR 10H[DI] , 2 ; √ 移位次数大于1时, 应由CL指定移位次数 (10) NOT AL , BL ; × NOT 是单操作数指令 (11) (11)DEC CX , 1 ; × DEC是单操作数指令
(12) (12)LEA ES , TAB[BX] ; × LEA指令的目的地址必须是通用寄存器 14. 执行下面2条指令后,标志寄存器中CF,AF,ZF,SF和OF分别是多少? MOV AL , 91 ;91=01011011B
19 / 42
ADD AL , 0BAH ; 0BAH=10111010B
15. 假设(DS) = 091DH , (SS) = 1E4AH , (AX) = 1234H , (BX) = 0024H , (CX) = 5678H , (BP) = 0024H , (SI) = 0012H , (DI) = 0032H , (09226H) = 00F6H , (09228H) = 1E40H , (1E4F6H) = 091DH . 试给出下列各指令或程序段执行的分别执行的结果. (1) (1)MOV CL , 20H[BX][SI]
解 : 源操作数的物理地址: (DS)×10H + 20H+(BX)+(SI)
将09226H字节单元的内容送CL,结果(CL) = 00F6H (2) MOV [BP][DI] , CX
解 : 目的操作数的物理地址: (SS)×10H + (BP)+(DI)
将CX寄存器的内容传送到1E4F6H字单元 , 结果 (1E4F6H) = (CX) = 5678H (3) (3)LEA BX , 20H[BX][SI] MOV AX , 2[BX]
解 : 执行完第一句指令后,BX的内容为:
第二句指令中,源操作数的物理地址为 EA = (DS)×10H+2+(BX)
将09228H字单元的内容送AX寄存器 , 结果 (AX) = 1E40H (4)LDS SI , [BX][DI]
MOV [SI] , BX
解 : 第一句指令中源操作数的逻辑地址为 DS:(BX)+(DI) 其偏移量为 (BX)+(DI) = 0024H+0032H = 0056H, 执行完第一句指令后, (SI) = 0056H 第二句指令中,源操作数的物理地址为
(DS)×10H+(SI) = 091D0H+0056H = 09226H 将BX寄存器的内容送09226单元 , 结果 (09226H) = (BX) = 0024H (5)(5)XCHG CX , 32H[BX]
20 / 42