【发布时间】:2014-09-01 05:06:45
【问题描述】:
) 我正在尝试将标签的地址移动到 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 位寄存器中,那我该如何实现呢?
谢谢
【问题讨论】:
-
你可能可以避免使用计算 goto 的汇编代码,即labels as values GCC 扩展。
-
您是否尝试将其移至
eax?我认为这就是它所说的意思。你在 Mac OS X 中对吗?我认为 Mac 上的所有 64 位代码都必须是rip相对的。不支持绝对地址,因此您不能在寄存器中加载一个。 -
正如所写,我能够正确编译这段代码。您将需要提供更多详细信息/上下文。此外,您确实知道“asm 语句可能不会跳转到其他 asm 语句”(gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html),对吧?也许您应该描述您实际尝试做的事情,以便提供更有用的答案。
标签: gcc assembly inline-assembly