自动定位x64或x86寄存器

时间:2012-10-31 12:06:06

标签: assembly

而不是写

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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