1
我在一個C程序中遇到了一段彙編代碼,我試圖在FreeBSD 64位上運行。gcc中彙編語句問題
void *curbrk;
__asm__ __volatile__(
"movl .curbrk, %%eax;"
"movl %%eax, %0"
: "=r" (curbrk)
:: "%eax"
);
我得到這樣的「MOV缺少後綴或操作數」(上面的代碼如下AT & T語法)什麼決定了語法,我應該在代碼中使用了錯誤 - 編譯器(GCC如下AT & T語法)或處理器(我正在使用英特爾處理器)。問題是由於代碼位於AT & T語法還是還有其他遺漏?
您是否知道在GCC內聯中選擇「mov」而不是'movq'的基本原理amd64指令的彙編語法? – 2011-04-25 11:18:03
@Pascal:您可以同時使用'mov'和'movq':'mov'指示彙編器「猜測」目標數據大小,而'movq'表示我們正在談論64位值。例如,'mov 0,foo'不會被編譯,因爲彙編器不知道變量'foo'的大小,而'mov 0,%% rax'會被隱式理解爲'movq',因爲'%rax '是一個64位寄存器。請注意,GCC不理解以上任何內容:使用內聯彙編,GCC只是將字符串轉儲到生成的程序集中(在替換'%'-things之後):_assembler_處理它。 – 2011-04-25 14:58:25