- 直接寻址
指令中直接写出存储单元的变量名,或者地址
在直接寻址方式中,有效地址EA直接写在指令中,用中括号里的数值作为EA
MOV AX,[2000H] EA=2000H
- 立即数寻址
立即数寻址方式中指令的操作数是8位(00H-0FFH)或16位(0000H-0FFFFH)立即数,并直接出现在指令中。
立即数寻址只能用于源操作数,不能用于目的操作数。
MOV AX,1010 DX=1010H
MOV AX,0102 DX=0102H
- 寄存器寻址
操作数存放在CPU的内部寄存器reg中
8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL
16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP
4个段寄存器seg: CS、DS、SS、ES
BX=2000H mov dx,BX
DX=2000H
- 寄存器间接寻址
间接寻址就是把存储单元的偏移地址事先装入某个寄存器,再通过这个寄存器间接地找到这个存储单元。
操作数的形式:[Reg],Reg只能使用基址寄存器BX、BP或变址寄存器SI、DI。
有效地址EA=BX/BP/SI/DI。
默认的段地址在DS(若寄存器为BX、SI、DI)中或SS(若寄存器为BP)中,但可使用段超越前缀改变。
BX=2000H mov dx,[BX]
EA=2000H
- 寄存器相对寻址
操作数的形式:[Reg+Disp]
Reg只能使用基址寄存器BX、BP或变址寄存器SI、DI
Disp是8位或16位位移量。
BX=2000H mov dx,[BX+1234H]
EA=2000H+1234H=3234H
- 基址变址寻址
操作数的形式:[Base+Index]
Base只能是基址寄存器BX或BP
Index只能是变址寄存器SI或DI。
BX=2000H DI=40H mov dx,[BX+DI]
EA=2000H+40H=2040H
- 相对基址变址寻址
操作数的形式:[Base+Index+Disp]
Base只能是基址寄存器BX或BP
Index只能是变址寄存器SI或DI
Disp是8位或16位位移量。
BX=2000H DI=40H mov dx,[BX+DI+1234H]
EA=2000H+40H+1234H=3274H
- 例题:
说明下列指令中源操作数的寻址方式?
如果BX=1000H,BP=0500H,SI=0100H,CX=2000H,给出DX的值或有效地址EA的值。
(1) mov dx,[1340]
(2) mov dx,1340
(3) mov dx,cx
(4) mov dx,[bp]
(5) mov dx,[bx+1234]
(6) mov dx,[bx+si]
(1)mov dx,[1340]
直接寻址 EA=1340H
(2)mov dx,1340
立即数寻址 DX=1340H
(3)mov dx,cx
寄存器寻址 DX=2000H
(4)mov dx,[bp]
寄存器间接寻址 EA=0500H
(5)mov dx,[bx+1234]
寄存器相对寻址 EA=1000H+1234H=2234H
(6)mov dx,[bx+si]
相对基址变址寻址 EA=1000H+0100H=1100H