gcc コマンドで正常にコンパイルされる次のコードがありますgcc ./example.c。プログラム自体は、単純に 2 つの整数を加算する関数「add_two」を呼び出します。拡張アセンブリ命令内で intel 構文を使用するには、最初に intel に切り替えてから AT&T に戻す必要があります。gcc のドキュメントによると、を使用して intel 構文に完全に切り替えることができますgcc -masm=intel ./exmaple。
スイッチ-masm=intelでコンパイルしようとすると、コンパイルされず、理由がわかりませんか? すでに命令を削除しようとしました.intel_syntaxが、まだコンパイルされません。
#include <stdio.h>
int add_two(int, int);
int main(){
int src = 3;
int dst = 5;
printf("summe = %d \n", add_two(src, dst));
return 0;
}
int add_two(int src, int dst){
int sum;
asm (
".intel_syntax;" //switch to intel syntax
"mov %0, %1;"
"add %0, %2;"
".att_syntax;" //switch to at&t syntax
: "=r" (sum) //output
: "r" (src), "r" (dst) //input
);
return sum;
}
上記のプログラムをコンパイルすることによるエラーメッセージgcc -masm=intel ./example.cは次のとおりです。
tmp/ccEQGI4U.s: Assembler messages:
/tmp/ccEQGI4U.s:55: Error: junk `PTR [rbp-4]' after expression
/tmp/ccEQGI4U.s:55: Error: too many memory references for `mov'
/tmp/ccEQGI4U.s:56: Error: too many memory references for `mov'