在阅读Intel 64 and IA-32 Architectures Software Developer's Manual时,LEA 指令(加载有效地址)的操作部分使用了一个EffectiveAddress(SRC)
在其他任何地方都没有定义的计算。
有效地址的定义是什么,有什么作用EffectiveAddress(SRC)
?
在阅读Intel 64 and IA-32 Architectures Software Developer's Manual时,LEA 指令(加载有效地址)的操作部分使用了一个EffectiveAddress(SRC)
在其他任何地方都没有定义的计算。
有效地址的定义是什么,有什么作用EffectiveAddress(SRC)
?
同一文档的第 3.7.5 节(指定偏移量)指出:
内存地址的偏移部分可以直接指定为静态值(称为位移),也可以通过由以下一个或多个组件组成的地址计算来指定:
- 位移 — 8、16 或 32 位值。
- Base — 通用寄存器中的值。
- 索引 — 通用寄存器中的值。
- 比例因子 - 乘以索引值的 2、4 或 8 值。
添加这些组件所产生的偏移量称为有效地址。这些组件中的每一个都可以具有正值或负值(2s 补码),但比例因子除外。
EffectiveAddress使用以下方法计算有效地址:
Base + (Index*Scale) + Displacement
有效地址是从段基地址偏移的。当您在保护模式(32 位模式)下看到类似call 0x80000000
情况时,CPU 会将 0x80000000 添加到 CS 段寄存器指向的段的基地址中。
在 64 位模式下,它等于线性地址,因为分段基本上被禁用。