我搜索过IA-32中的寻址模式,但没有看到任何网站或文章对寻址模式进行简单的解释。
我需要一篇文章或其他东西来简单地通过内存变化期间的一些图片来解释这个问题,并通过图片指定地址模式。
我知道在 IA-32 中,寻址的一般形式遵循以下形式:
线段 + 基数 + (索引 * 比例) + 位移
我想知道位移、比例、指数和底数的确切含义。
由于我也不懂英语,所以我被迫搜索它们,但我没有找到这种情况下单词的技术含义(我的意思是在汇编编程语言中)。
最后,我想要简单地解释 IA-32 中的寻址模式,最好用有关内存及其偏移量的图片来表示......
我通过以下方式学习汇编编程语言Linux 中的汇编编程指南's book.
那谢谢啦。
找到这张图片来自这个幻灯片演示 http://people.sju.edu/~ggrevera/arch/slides/addressing.ppt.
这意味着您可以拥有类似的地址[eax + ecx * 2 + 100]
。您不必使用所有这些字段。
也可以看看引用内存位置的内容。 (x86 寻址模式) https://stackoverflow.com/questions/34058101/referencing-the-contents-of-a-memory-location-x86-addressing-modes
比例因子作为 2 位移位计数编码到机器代码中。 ESP 不能作为索引,因为指示 SIB 字节存在的特殊情况以及带有以下内容的 SIB 字节no指数。看rbp 不允许作为 SIB 基础? https://stackoverflow.com/questions/52522544/rbp-not-allowed-as-sib-base了解特殊情况的概要。
在Linux等普通操作系统下,32/64位模式下可以忽略分段.
段寄存器根据寻址模式中的基址寄存器自动选择,或者使用段覆盖前缀(例如ds:
, cs:
).
但 Linux 使用平面内存模型,因此所有段的段基数始终为 0(除了fs
or gs
,用于线程本地存储)。段基址加上根据基址、索引、标度和位移计算出的“偏移量”,得到最终的线性地址。所以通常“偏移”部分是整个线性地址。
该线性地址是虚拟地址,硬件通过页表/TLB(由内核管理)将其转换为物理地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)