3

我在 IA-32 中搜索过寻址模式,但我没有看到任何网站或文章简单地解释了寻址模式。我需要一篇文章或其他东西,只需通过一些内存图片来解释这个问题,并通过图片指定地址模式。

我知道在 IA-32 中,寻址的一般形式遵循以下形式:

Segment + Base + (index * scale) + 位移

我想知道位移、比例、索引以及最后的基数的确切含义。由于我也不懂英语,所以我被迫搜索它们,但我没有找到这种情况下单词的技术意思(我的意思是汇编编程语言)。

最后,我想简单地解释一下 IA-32 中的寻址模式,最好用关于内存及其偏移量的图片来表示......

我通过Linux 的汇编编程指南学习汇编编程语言。

那谢谢啦。

4

1 回答 1

3

从这个幻灯片演示中找到这张图片。

寻址模式

这意味着您可以拥有类似的地址[eax + ecx * 2 + 100]。您不一定必须使用所有这些字段。

另请参阅引用内存位置的内容。(x86 寻址模式)

比例因子被编码为机器代码作为 2 位移位计数。ESP 不能是索引,因为在特殊情况下指示存在 SIB 字节和没有索引的 SIB 字节。看到rbp 不允许作为 SIB 基础?了解特殊情况。


在 Linux 等普通操作系统下,可以在 32/64 位模式下忽略分段

段寄存器是根据寻址模式中的基址寄存器自动选择的,或者带有段覆盖前缀(例如ds:cs:)。

但是 Linux 使用平面内存模型,因此所有段的段基数始终为 0(除了fsor gs,用于线程本地存储)。段基数与基数、索引、比例和位移计算的“偏移量”相加,得到最终的线性地址。所以通常“偏移”部分是整个线性地址。

该线性地址是一个虚拟地址,硬件通过页表/TLB(由内核管理)将其转换为物理地址。

于 2014-08-29T12:26:37.660 回答