0

而不是写

ifndef X64
  mov eax, dest
else
  mov rax, dest
endif

有没有办法在一行代码中编写它,根据机器目标自动使用正确的寄存器?

4

2 回答 2

1

您使用的是什么汇编程序和环境?也许您可以定义一个宏,根据目标扩展为 eax 和 rax。

AFAIK,大多数 x86-64 工具链的默认模式是可执行文件始终放置在低 4GB 的地址空间中。(不过,共享库可以放在更高的地址。)这种假设几乎总是正确的,并且有助于减少代码大小。此外,写入eax隐式清除rax. 因此,您可以(可能)安全地写入eax32 位和 64 位...

于 2012-10-31T12:15:42.917 回答
0

我想你可以写一堆宏来做到这一点,但我不确定它会有多有效,因为并非所有操作都兼容 64 位和 32 位寄存器......并不是人们真正做的事情......

于 2012-10-31T12:09:46.770 回答