簡體   English   中英

內聯匯編:錯誤的寄存器名稱

[英]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, %ecxmov $3, %ecx之間的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM