第2节 8086/8088寻址方式

1.立即寻址方式
这种寻址方式所提供的操作数直接放在指令中,紧跟在操作码的后面,与操作码一起放在码段区域中。立即数可以是8位的,也可以是16位.
立即寻址主要是用来给寄存器赋初值.

例如:MOV AX,1234H ;十六进制数1234H送入AX。


2.寄存器寻址
操作数包含在CPU的内部寄存器中,例如寄存器AX、BX、SI、DI等, 虽然操作数可在CPU的内部通用寄存器的任一个中,且它们都能参与算术运算和逻辑运算并存放运算结果。但是AX是累加器,若结果是存放在AX中,则通常指令要更短些,更紧凑些。

例如:MOV AX,BX ;将寄存器BX的内容送入AX中。


3.直接寻址方式
操作数的地址的16位偏移量直接包含在指令中,它与操作码一起在码段区域中,但操作数一般在数据段区域中,它的地址为数据段寄存器DS加上它的16位地址偏移量。
指令中的16位地址偏移量是低位字节在前,高位字节在后。
这种寻址方法,是以数据段寄存器的地址为基础,可在多达64K字节的范围内寻找操作数。

EA=指令中直接给出地址
例如:MOV AL,DS:[2000H] ;将逻辑地址为DS:2000单元内的字节送入AL。
若段基址DS=4000H,则段起始物理地址为4000H左移4位,即40000H,此指令将数据段中物理地址为42000H 单元的内容56H传至AL寄存器。

4.寄存器间接寻址(间接寻址)
在这种寻址方式中,操作数是在存储器中,但是,操作数的地址的16位偏移量包含在以下四个寄存器SI、DI、BP、BX之一中。这又可分成两种情况:
1、 BX、SI、DI间址时以DS为默认段地址;
例:MOV AX,[SI]
2、BP间址时以SS为默认段地址。
例:MOV AX,[BP]

例如:MOV AX,[BX] ;BX内容为有效地址EA(偏移量)。若DS=4000H,BX=100H,此指令将物理地址40100H 单元的内容传至AL寄存器(段基地址同样为40000H)。


5.寄存器相对寻址
所谓变址寻址即以基准寄存器BX、BP、SI、DI加上给定的8位或16位偏移量作为操作数的有效地址。段地址规则同上。
例:MOV AX,MASK[SI]




6.基址加变址寻址
基址加变址寻址即以某一基地址寄存器(通常为BX、BP)的内容,加上某一变址寄存器(通常为SI,DI)的内容,形成操作数的有效地址。段地址规则同上。
例:MOV AX, [BX + SI]

例如:MOV AX,[BX+SI];BX的内容与SI的内容之和作为操作数的有效地址。传送数据段中的一个字。


7.相对基址加变址寻址
相对基址加变址寻址即以某一基地址寄存器(通常为BX、BP)的内容,加上某 一变址寄存器(通常为SI,DI)的内容,再加上给定的8位或16位偏移量,形成了操作数的有效地址。
段地址规则同上。
例:MOV AX,MASK[BX][SI]

例如:MOV AH,[BX+DI+1234H] ;BX的内容加上DI的内容再加上位移量1234H作为操作数的有效地址。




