寻址方式
1立即寻址方式
操作数包含在指令中,作为指令的一部分,跟在操作码后存放在代码段。这种操作数称为立即数,可以是16位,也可以是8位。前者按照高高低低原则存放。
例子:MOV AX, 1234H
2寄存器寻址方式
操作数在CPU内部的寄存器中,指令中指定寄存器号。对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP和BP等;对于8位操作数,寄存器可以是AL,AH等。
例子:MOV SI, AX
MOV AL,DH
目的和源操作数都是寄存器寻址。3.1中的目的操作数也是寄存器寻址。
由于操作数在寄存器中,不需要访问存储器来取操作数,所以采用这种寻址方式指令执行速度最快。
3直接寻址方式
操作数在存储器中,指令直接包含有操作数的有效地址。操作数一般存放在数据段,所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
例子:假设数据段寄存器DS的内容为50000H,地址为51234H字存储单元中的内容为6789H,那么执行指令 MOV AX,[1234H]后寄存器AX的内容为6789H。
4寄存器间接寻址方式
操作数在存储器中,操作数有效地址在SI,DI,BX,BP这四个寄存器之一中。如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值;如果有效地址在BP中,则以SS段寄存器之内容为段值。也就是说操作数可能在数据段,也可能在堆栈段。
例子1: MOV AX, [SI]
假设:(DS)=50000H, (SI)=1234H
例子2:MOV [BP],CX
此条指令中目的操作数采用寄存器间接寻址,由于使用BP作为指针寄存器,所以缺省的段寄存器是SS。
注意 MOV [SI],AX ;目的操作数寄存器间接寻址
MOV SI, AX ;目的操作数寄存器寻址
5寄存器相对寻址方式
操作数在存储器中,操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器的(SI,DI)内容加上指令中给的8位或16位位移量之和。即:
一般情况下,如果SI,DI或BX之内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP之内容作为有效地址的一部分,那么引用的段寄存器是SS。
例子: MOV AX, [DI+1223H] <=> MOV AX, 1223H[DI]
假设: (DS)=50000H, (DI)=3678H
6 基址加变址寻址方式
操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容相加而得。
例子: MOV AX, [BX+DI] <=> MOV AX, [BX][DI]
7相对基址加变址寻址方式
操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容及指令中给定的8位或16位位移量相加而得。即:
例子: MOV AX, [BX+DI-2]
例子: MOV AX, [BX+DI+1223H]
<=> MOV AX, 1223H[BX+DI]
<=> MOV AX, 1223H[BX][DI]
<=> MOV AX, 1223H[DI][BX]