0%

Intel 8086の寻址方式

根据指令内容来确定操作数的过程,被称为寻址。根据寻址计算所得到的操作数地址被称为操作数的有效地址(EA),即段内偏移地址,段内偏移地址还需要与相应的段地址组合形成20位的物理地址(PA)。

Intel 8086的寻址方式由立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、基址加变址寻址。

立即寻址

立即寻址主要用来给寄存器或存储单元赋初值,操作数直接放在指令中,与操作码一起放在代码段内;立即数既可以是8位,也可以是16位,若为16位,则低字节位于低地址处,高字节位于高地址处;立即数只能是源操作数,且只能为整数

寄存器寻址

寄存器寻址的操作数位于寄存器中,寄存器名(AX、BX、CX、DX、DI、SI、SP、BP)由指令给出,也可用于寄存器和内存单元之间传送数据

直接寻址

直接寻址是指操作数的有效地址(只包含16位偏移地址)由指令直接给出,与操作码一起存放在代码段。操作数的有效地址在指令中必须用[]括起来。直接寻址以数据段的地址为基础,Intel 8086允许段超越,即允许操作数位于以代码段、堆栈段或附加数据段为基准的内存区域中,此时需要在指令中指明段超越(即操作数位于哪个内存区域内)

寄存器间接寻址

如果寄存器中的内容为操作数的内存地址,则对应为寄存器间接寻址,寄存器在指令中必须用[]括起来。在Intel 8086中,操作数的16位偏移地址可以存放于寄存器SI、DI、BP、BX,此时分为两种情况:

  • SI、DI、BX间接寻址时,默认操作数位于数据段DS中;
  • BP间接寻址时,默认操作数位于堆栈段SS中。

变址寻址

变址寻址即在寄存器间接寻址的基础上再加一个16位的偏移量。

基址加变址寻址

基址加变址寻址时,把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容(若指令中还指定了8位或16位偏移量,则还需再加上)后作为操作数的16位偏移地址。

当使用基址寄存器BX时,操作数默认位于数据段DS中;当使用基址寄存器BP时,操作数默认位于堆栈段SS中;基址加变址寻址允许段超越,但需要在指令中指明。