) 我正在尝试将标签的地址移动到64位寄存器中,它不会让我。
我得到了:
fatal error: error in backend: 32-bit absolute addressing is not supported in 64-bit mode
以下是我正在尝试做的一个例子:
asm ("mov $label, %rax"); // Tried movq, movl (No difference)
...
asm volatile("label:");
...
为什么它不让我?它是否允许仅将标签移动到32位寄存器中? 我必须将该标签的地址插入64位寄存器,我该如何实现呢?
感谢
答案 0 :(得分:1)
尝试以下两种asm语句之一:
asm ("movabs $label, %rax");
asm ("lea label(%rip), %rax");
第一个使用64位立即数操作数(因而是64位绝对重定位),而第二个使用RIP相对寻址。第二种选择可能是最好的,因为它更短,但它要求label
在2 ^ 31字节之内。
然而,正如David Wohlferd所说,你的代码不太可行。