![](/img/trans.png)
[英]GCC baremetal inline-assembly SI register not playing nicely with pointers
[英]Inline-Assembly : bad register name
編譯時出現“錯誤:錯誤的寄存器名稱'%% ecx'”
#include <stdio.h>
int main(void){
asm("mov 3, %%ecx\n\t");
// ...
return 0;
}
如果要使用gcc的“擴展的內聯匯編”以及輸入,輸出和內容清單,則使用寄存器的雙百分號。 這是因為內聯匯編程序保留了單個百分號,以根據這些列表和%
之后的數字替換實際的操作數名稱。
如果您不想使用“擴展”內聯程序集,只需使用常規的AT&T語法即可。 做這樣的事情:
int main(void)
{
asm("mov 3, %ecx\n\t");
return 0;
}
與gcc 4.6.3完美兼容。 我還假設您知道mov 3, %ecx
和mov $3, %ecx
之間的區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.