我正在为 x86/x64 CPU 指令编写一个编译器,但我似乎无法弄清楚人们所说的“位移”地址是什么意思。例如,添加指令详细信息如下:http://www.c-jump.com/CIS77/CPU/x86/X77_0150_encoding_add_edx_displacement.htm http://www.c-jump.com/CIS77/CPU/x86/X77_0150_encoding_add_edx_displacement.htm
我只是想实现添加指令,其中将寄存器添加到正常的内存地址。问题是,该地址是一个“位移地址”。这是否意味着该地址是一个有符号值,即距指令位置的偏移量?
x86 中有几种不同形式的间接操作数:
- [reg]
- [规则+位移]
- [移位]
- [reg * 常量 + reg]
- [reg * 常量 + reg + 位移]
“位移”只是一个添加到地址其余部分的常数。如果地址除了常量之外没有任何组成部分,则仍然称为“位移”。这主要是为了与其他寻址形式保持一致。
另一种看待它的方式是所有地址的形式
[reg * 常量 + reg + 位移]
每个组件允许值为 0。
[displacement] 形式只是编码,其中除位移之外的所有分量均为零。
作为编译器编写者,最后两种形式特别有趣。它们使编码变得很容易,例如pArray[index]->field + 1
在一条指令中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)