而不是写
ifndef X64
mov eax, dest
else
mov rax, dest
endif
有没有办法在一行代码中编写它,根据机器目标自动使用正确的寄存器?
而不是写
ifndef X64
mov eax, dest
else
mov rax, dest
endif
有没有办法在一行代码中编写它,根据机器目标自动使用正确的寄存器?
您使用的是什么汇编程序和环境?也许您可以定义一个宏,根据目标扩展为 eax 和 rax。
AFAIK,大多数 x86-64 工具链的默认模式是可执行文件始终放置在低 4GB 的地址空间中。(不过,共享库可以放在更高的地址。)这种假设几乎总是正确的,并且有助于减少代码大小。此外,写入eax
隐式清除rax
. 因此,您可以(可能)安全地写入eax
32 位和 64 位...
我想你可以写一堆宏来做到这一点,但我不确定它会有多有效,因为并非所有操作都兼容 64 位和 32 位寄存器......并不是人们真正做的事情......