0
這是第一次我寫彙編代碼。 在第一個開始,我寫了
#include<stdio.h>
int main(){
int x,y;
asm("movl $2,%eax");
asm volatile(
"movl $1,%0\n\t"
"movl %0,%%ebx\n\t"
"leal 2(%%ebx,%%eax,$2),%1"
:"=m"(x),"=r"(y)
);
printf("x is %d, y is %d\n",x,y);
return 0;
}
的GCC 5.4.0編譯器會發出錯誤信息:
test.c: Assembler messages:
test.c:7: Error: bad or irreducible absolute expression
test.c:7: Error: expecting scale factor of 1, 2, 4, or 8: got `$2'
然後我改變了
"leal 2(%%ebx,%%eax,$2),%1"
到
"leal 2(%%ebx,%%eax,2),%1"
它是o ķ。但是,2美元不等於2?
在此語法的數量必須是沒有$,這就是它只是如何定義的。通常情況下$意味着一個常量,但由於在尋址模式中除了特定的常量外沒有別的東西,所以它不會使用前綴來表示這是一個常量。 –
僅供參考,不重挫告訴編譯器(帶撞約束)'%ebx'將導致不可預知的結果。 (好吧,如果你用'gcc -O2 -S'從編譯器中讀取最終的asm輸出結果是可以預測的)。請參閱https://stackoverflow.com/tags/inline-assembly/info –