发布时间 : 星期日 文章微机原理习 题 2更新完毕开始阅读
(1)以BX寄存器的间接寻址 (2)以BX寄存器的相对寻址 (3)以BX、SI寄存器的基址变址寻址 解:(1)MOV BX, OFFSET BLOCK +99*2
MOV AX, [BX] (2)MOV BX, 99*2 MOV AX, BLOCK[BX]
或:
LEA BX, BLOCK MOV AX, [BX+99*2]
(3)LEA BX, BLOCK MOV SI, 99*2
MOV AX,[BX+SI] 或:
LEA SI, BLOCK MOV BX, 99*2 MOV AX,[BX+SI]
2.9 已知:(BX)=1200H,(BP)=2400H,(SI)=0100H,(DI)=0200H,(SS)=1000H,
(DS)=2000H,(ES)=3000H,变量VAR1对应地址为2000H,试分别指出下列
指令中存储器的寻址方式及物理地址。 (1)MOV AL,[020H] (2)MOV AL,[BP+010H] (3)MOV [BX+SI-20H],AX (4)MOV BL,ES:[BX+10H] (5)MOV VAR1[BX+DI],AL
解:(1)直接寻址 PA=(DS)*16+EA=20000h+020H=20020H
(2)寄存器相对寻址PA=(SS)*16+EA=10000H+2400H+010H=12410H
(3)相对基址加变址寻址PA=(DS)*16+EA=20000H+1200H+0100H-20H=212E0H (4)寄存器相对寻址PA=(ES)*16+EA=30000H+1200H+10H=31210H
(5)相对基址加变址寻址PA=(DS)*16+EA=20000H+2000H+1200H+0200H=23400H
2.10 设Block为字单元1000H:001FH的符号地址(变量),该单元的内容是01A1H,试
问以下两条含有Block的指令有什么不同?指令执行后BX的内容是多少? (1)MOV
BX,Block
5
(2)LEA
BX,Block
解:(1)BX的内容为01A1H
(2)BX的内容为001FH
2.11 什么叫堆栈?采用堆栈的意义? 解:
2.12 若在数据段中从字节变量TABLE相应的单元开始存放了0~15的平方值,试写出包
含有XLAT指令的指令序列查找N(0~15)中的某个数的平方。(设N的值存放在CL中)
解: LEA BX, TABLE
2.13 编写程序对存放在DX,AX中的双字节长数据的求补 解:NOT
NOT ADD
ADC
2.14 写出实现下列计算的指令序列。(假定X、Y、Z、W、R都为有符号数字变量)
(1)Z=(W*X)/(R+6) (3)Z= (X+Y)/R - W 解:
(1)
MOV
IMUL MOV ADD IDIV MOV MOV
(2)
MOV
MOV IMUL
AX, W X BX, R BX, 6 BX Z, AX R, DX AX, Y BX, 5 BX
6
(2)Z=((W-X)/(5*Y))*2 (4)Z= (X/Y+ W )*100+R
DX AX AX, 1
DX, 0
;最低位加1,注意:不能用INC指令 ;把进位(如果有)传递到高位 ;首先将(DX, AX)取反
MOV AL, N XLAT
MOV MOV SUB MOV IMUL IDIV MOV
BX, AX AX, W AX, X CX, 2 CX BX Z, AX
(3)
MOV AX, X
ADD AX,Y CWD IDIV SUB MOV MOV CWD IDIV ADD MOV IMUL MOV MOV MOV CWD ADD ADC
AX,BX DX,CX R AX,W Z,AX AX,X Y AX,W BX,100 BX BX,AX CX,DX AX,R
(4)
;结果存放在DX、AX中
2.15 设在AX、BX、CX、DX中均存放的是用压缩的BCD码表示的4位十进制数,试
编写程序完成以下的计算: (1)(AX)+(BX) →AX (2)(DX)-(CX) →DX 解:(1)ADD AL, BL
DAA
ADC AL, BH
7
XCHG AL, AH
DAA
XCHG AL, AH (2)MOV AL,DL
SUB AL, CL
DAS
MOV DL, AL MOV AL, DH SBB AL, CH DAS
MOV DH, AL
2.16 简述指令的“DAA”和“DAS”对BCD码运算后进行调整的规则。解:DAA的调整规则:
if (AL低4位>9 或 AF=1)then AL=AL+06H ; AF=1 ; endif
if (AL高4位>9 或 CF=1)then AL=AL+60H ; CF=1 ; endif
DAS的调整规则:
if (AL低4位>9 或 AF=1)then AL=AL-06H ; AF=1 ; endif
if (AL高4位>9 或 CF=1)then AL=AL-60H ; CF=1 ; Endif
2.17 用程序段实现对存入在BX,AX的双字进行左移5位。 解:
SHL
AX,1
8