我正在尝试在GCC中编写内联汇编,将#define中的值写入寄存器。
#define SOME_VALUE 0xDEADBEEF
void foo(void)
{
__asm__("lis r5, SOME_VALUE@ha");
__asm__("ori r5, r5, SOME_VALUE@l");
}
然而,当我编译时出现错误:
未定义的引用 `SOME_VALUE'
汇编程序有办法看到内联汇编中的 #define
吗?
我通过以下方式解决了这个问题:
#define SOME_VALUE 0xDEADBEEF
__asm__(".equ SOME_VALUE, 0xDEADBEEF");
void foo(void)
{
__asm__("lis r5, SOME_VALUE@ha");
__asm__("ori r5, r5, SOME_VALUE@l");
}
然而,我真的不想复制这个值。
__asm__
接受一个字符串作为参数。因此,请考虑宏字符串化值/连接字符串。 - Eugene Sh.SOME_VALUE
作为立即数。或者只需要求编译器将其放入r5
中,使用register int foo asm("r5") = SOME_VALUE;
,然后将其用作输入。或者,如果您不关心寄存器,则让编译器选择。 - Peter Cordes