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"
を変更: は非常にまず最初に、私は、GCC 5.4.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;
}
を書きました
k。しかし、$ 2は2と等しくないのですか?
この構文では、数字は$が付いていないはずです。通常は$は定数を意味しますが、アドレッシングモードの特定の定数以外のものを持つことはできません。これは定数と言う接頭辞を使用しません。 –
FYI、 '%ebx'をコンパイラーに知らせることなく(クローバー制約付きで)、予期しない結果が生じるでしょう。 (あなたが 'gcc -O2 -S'を使ってコンパイラからの最後のasm出力を読んでいれば予測可能です)。 https://stackoverflow.com/tags/inline-assembly/infoを参照してください。 –