2

在阅读Intel 64 and IA-32 Architectures Software Developer's Manual时,LEA 指令(加载有效地址)的操作部分使用了一个EffectiveAddress(SRC)在其他任何地方都没有定义的计算。

有效地址的定义是什么,有什么作用EffectiveAddress(SRC)

4

2 回答 2

11

同一文档的第 3.7.5 节(指定偏移量)指出:

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

  • 位移 — 8、16 或 32 位值。
  • Base — 通用寄存器中的值。
  • 索引 — 通用寄存器中的值。
  • 比例因子 - 乘以索引值的 2、4 或 8 值。

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

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

Base + (Index*Scale) + Displacement
于 2016-04-18T21:20:11.753 回答
0

有效地址是从段基地址偏移的。当您在保护模式(32 位模式)下看到类似call 0x80000000情况时,CPU 会将 0x80000000 添加到 CS 段寄存器指向的段的基地址中。

在 64 位模式下,它等于线性地址,因为分段基本上被禁用。

于 2022-02-18T19:59:58.753 回答