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