目录
  1. 1. 有效地址EA
  2. 2. 与数据有关的寻址方式
    1. 2.1. 立即数寻址
    2. 2.2. 寄存器寻址
    3. 2.3. 直接寻址
    4. 2.4. 寄存器间接寻址
    5. 2.5. 寄存器相对寻址
    6. 2.6. 基址变址 寻址
    7. 2.7. 相对基址变址寻址
8086寻址方式

有效地址EA

  • 8086中把操作数的偏移地址称为有效地址(EA)
    EA = 基址 + (变址*比例因子) + 位移量
四种成分 16位寻址 32位寻址
位移量 0、8、16位 0、8、16、32位
基址寄存器 BX,BP 任何32位通用寄存器(包括ESP)
变址寄存器 SI,Di 除ESP以外的32位通用寄存器
比例因子 1、2、4、8
  • 比例因子为固定值,其他三个成分都可正可负,以保证指针移动的灵活性
  • 比例因子:386及后续机型新增的寻址方式中的一个术语,其值可以为1、2、4、8。

与数据有关的寻址方式

  • 以MOV指令为例
    • 立即寻址:MOV AX,3069H
    • 寄存器寻址:MOV AL,BH
    • 直接寻址:MOV AX,[2000H]
    • 寄存器间接寻址:MOV AX,[BX]
    • 寄存器相对寻址:MOV AX,COUNT[SI]
    • 基址变址寻址:MOV AX,[BP][DI]
    • 相对基址变址寻址:MOV AX,MASK[BX][SI]

立即数寻址

如:MOV AX, 3069H

  • 操作数作为指令的一部分直接写在指令中,这种操作数成为立即数,这种寻址方式也成为立即数寻址方式
  • 特点:操作数存放在存储器中,指令的下一单元即为立即操作数n

寄存器寻址

如:MOV AL, BH

  • 指令中要用到的操作数已经存储在某寄存器中,或把目标操作数存入某寄存器。把指令中指出所使用寄存器(即寄存器的助记符)的寻址方式成为寄存器寻址
  • 特点:操作数直接存放在寄存器中,速度较快

直接寻址

如:MOV AX, [2000H]

  • EA = 操作数
  • 指令所要的操作数存放在内存中,指令中直接给出该操作数的有效地址
  • 特点:操作数的有效地址只包含位移量一种成分
  • 直接寻址的地址要写在”[]”内

寄存器间接寻址

如:MOV AX, [BX]

  • EA = BX
  • 操作数在存储器中,操作数的有效地址使用SI、DI、BX和BP等四个寄存器之一来指定
  • 特点:有效地址在寄存器中,操作数在存储器中

寄存器相对寻址

如:MOV AX,COUNT[SI] (也可表示为 MOV AX, [COUNT+SI])

  • EA = COUNT + SI
  • 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和
  • 特点:有效地址由两种成分组成

基址变址 寻址

如:MOV AX,[BP][SI](或MOV AX,[BP+SI])

  • EA = BP+SI
  • 操作数存储在存储器中,其地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和
  • 处理数组和表格,首地址放在基址寄存器(BX,BP),而用变址寄存器(SI,DI)来访问数组的各个元素

相对基址变址寻址

如:MOV AX,MASK[BX][SI]

  • EA = MASK+BX+SI
  • 操作数存放于存储器中,其有效地址是由一个基址寄存器(BX、BP)、一个变址寄存器(SI、DI)和指令中的8位/16位偏移量之和
  • 通常用于二维数组的寻址
文章作者: EasonZzZz
文章链接: http://yoursite.com/2019/12/13/学习/汇编/8086寻址方式/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Nice To Meet U