什么是有效地址?

Dou*_*son 2 x86 x86-64 intel

在阅读英特尔64和IA-32架构软件开发人员手册时,LEA指令的操作部分(加载有效地址)使用了一个EffectiveAddress(SRC)在其他任何地方都没有定义的计算.

有效地址的定义是什么,EffectiveAddress(SRC)做什么?

Dou*_*son 7

同一文件的第3.7.5节(指定偏移)说明:

存储器地址的偏移部分可以直接指定为静态值(称为位移),也可以通过由以下一个或多个组件组成的地址计算:

  • 位移 - 8位,16位或32位值.
  • Base - 通用寄存器中的值.
  • Index - 通用寄存器中的值.
  • 比例因子 - 值为2,4或8,乘以索引值.

添加这些组件所产生的偏移称为有效地址.除缩放因子外,这些组件中的每一个都可以具有正或负(2s补码)值.

EffectiveAddress使用以下方法计算有效地址:

Base + (Index*Scale) + Displacement
Run Code Online (Sandbox Code Playgroud)

  • 另请参阅[x86 寻址模式](http://stackoverflow.com/questions/34058101/referencing-the-contents-of-a-memory-location-x86-addressing-modes/34058400#34058400)。它们都是 `base + index*scale + disp` 的子集,除了 64 位模式下的 RIP 相对寻址。 (3认同)