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