0
使用GCC
和inline assembly
,我想立即加载一个特定的寄存器r0
。但是,我没有得到正确的结果。PowerPC内联汇编:将C值加载到寄存器
unsigned short value = 0x1337;
asm volatile
(
"li 0, %0\n\t"
"sc\n\t"
"blr"
: /* Output registers */
:"r"(value) /* Input registers */
: /* No clobbered registers */
);
在编译时,这给
li r0, 9
sc
blr
来自哪里的9
?我想要指定的值0x1337
。 Here是我看过的教程。
是的,勿庸置疑,这是一个简单的解决方案 – BullyWiiPlaza
@BullyWiiPlaza:使用'GCC -mregnames'获得注册不属于裸数名,所以你不能混淆寄存器和立即数。另外,确保你告诉编译器关于你打开的任何寄存器,并使用'asm goto'告诉它你跳了。尽管我不确定是否有安全的方法来告诉编译器,你的asm需要'lr'中的返回地址并且它会返回。你可能应该用asm编写你的整个函数,因为我不明白它如何内联。 –
@PeterCordes:是的,这是整个功能。 :) – BullyWiiPlaza