编写程序练习直接、间接、相对、基址变址寻址
直接寻址方式
操作数在存储单元中,指令的操作码之后给出该存储单元的有效地址EA。
指令中,EA可以是数值形式,也可以是符号地址形式;
例如:MOV AX,[100H]; 数值地址必须加方括号
MOV AX , x; 符号地址X必须事先定义
在默认情况下,数据在DS段中
物理地址PA= (DS) ×16+EA MOV AX,ES:[100H]
可使用段超越前缀的方式改变默认段;
例:
执行指令MOV Bx , [1234H]时,(DS)=2000H,存储单元21234H的值为5213H,问执行该指令后BX的值是什么?
该指令源操作数的寻址方式为直接寻址方式;
有效地址EA= 1234H,默认为DS段;
物理地址PA=2000H ×16+1234H =21234H
所以,该指令执行后(BX)=5213H
间接寻址方式
操作数在存储单元中,指令的操作码之后给出存放该单元有效地址的寄存器编码或名称。可以用于这种寻址方式的寄存器称为间址寄存器。
间址寄存器有:BX、BP、SI、DI
例如:MOV AX ,[BX]
默认情况下,数据在DS段或SS段中,由间址寄存器决定;
物理地址PA=(DS)x 16+(BX/SI/DI) ;DS段
物理地址PA=(SS)x 16+ (BP) ;SS段
执行指令MOV BX , [DI]时,(DS)=1000H,(DI)=2345H,存储单元12345H的值为4354H,则指令执行后BX的值为多少?
该指令源操作数的寻址方式为寄存器间接寻址方式;
有效地址EA=(DI)=2345H,默认为DS段;
物理地址PA= (DS) ×16+EA=1000H ×16+2345H =12345H
所以,该指令执行后(BX)=(12345H)=4354H
寄存器相对寻址方式
操作数在存储单元中,操作数的有效地址为指令中指定间址寄存器的值与指令中给出的偏移量(DISP)之和。
指令格式
间址寄存器:BX、BP、SI、DI;
偏移量:数值形式、或符号地址形式;
例如: MOV AX ,[BX+100H] MOV AX ,100H[BX]
MOV AX,[BX][100H]
物理地址的形成与寄存器间接寻址相似;
PA= (DS) × 16+(BX/SI/DI)+DISP
PA= (SS)× 16+(BP) + DISP
执行指令MOV BX,[SI+100H]时,(DS)=1000H,(SI)=2345H,存储单元12445H的值为2715H,则指令执行后BX的值为多少?
该指令源操作数的寻址方式为寄存器相对寻址方式;
有效地址EA=(SI)+ 100H =2445H,默认为DS段;
物理地址PA= (DS) x 16+ EA=1000H ×16+2445H = 12445H
所以,该指令执行后(BX)= (12445H)=2715H
基址变址寻址方式
操作数在存储单元中,操作数的有效地址为指令中指定的基址寄存器的值与变址寄存器的值之和。
指令格式
基址寄存器:BX、BP;变址寄存器:SI、DI;
例如: MOV AX,[BX+SI] MOV AX ,[BP][SI]
MOV AX,[BX]+[SI]
默认情况下,数据在DS段或SS段中,由基址寄存器决定;
物理地址PA= (DS) × 16+(BX)+ (SL/DI)
物理地址PA=(SS)× 16+(BP)+ (SI/D1)
例:
执行指令MOV BX ,[BX+SI]时,(DS)=1000H,(BX)=2100H,(SI)=0011H,存储单元12111H的值为1234H,则指令执行后BX的值为多少?
该指令源操作数的寻址方式为基址变址寻址方式;
有效地址EA=(BX)+(SI)=2100H +0011H =2111H
物理地址PA= (DS) x 16+EA= 1000H ×16+2111H=12111H
所以,该指令执行后(BX)=(12111H) =1234H