assembly - X86_64 - 汇编 - 为什么位移不是 64 位?

标签 assembly x86-64 memory-address

我正在阅读 Intel x86_64 指南 vol.1 以刷新内存寻址的工作方式。

仍然,

3.7.5 Specifying an Offset

The offset part of a memory address can be specified directly as a static value (called a displacement) or through an address computation made up of one or more of the following components:

• Displacement — An 8-, 16-, or 32-bit value.



我在 Agner Fog 的汇编指南中读到,当与 (r/e)ax 寄存器一起使用时,64 位绝对寻址是可能的。

所以..

是否可以使用带有 64 位地址的绝对寻址来 jmp、mov 和 call(使用所有寄存器),或者我是否必须继续使用 Base + 位移组合 ?

最佳答案

只有进出累加器的移动具有 64 位绝对地址变量。
所有其他移动仅限于 32 位位移方法。

关于assembly - X86_64 - 汇编 - 为什么位移不是 64 位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853189/

相关文章:

python - 无法访问传递给 NASM 64 位 DLL 的数组指针

assembly - xmm 指令 - 内存源操作数的段错误

assembly - 分支预测会导致非法指令吗?

linux - x86-64 汇编代码未运行

c - 在 x64 处理器上字对齐加载是否比非对齐加载更快?

c - 如何将一个字节写入特定内存地址的寄存器?

C# 反射 : If . .. 否则?

assembly - 难倒在 LC-3 组装的扩展乘法上

c - 如何初始化和操作地址指针

assembly - 使用手写汇编调用 native 代码