重複の可能性:
プログラミング言語コンパイラは、最初にアセンブリに変換しますか、それとも直接マシン コードに変換しますか?
例えば:
gcc -c myprogram.c
上記のコマンドは、オブジェクト ファイルである myprogram.o を生成します。内部的に知りたいのですが、GCC はアセンブラーのステップを経る必要がありますか? 例えば:
myprogram.c -> myprogram.asm -> myprogram.o
重複の可能性:
プログラミング言語コンパイラは、最初にアセンブリに変換しますか、それとも直接マシン コードに変換しますか?
例えば:
gcc -c myprogram.c
上記のコマンドは、オブジェクト ファイルである myprogram.o を生成します。内部的に知りたいのですが、GCC はアセンブラーのステップを経る必要がありますか? 例えば:
myprogram.c -> myprogram.asm -> myprogram.o
私の知る限り、はい。gcc によって生成されたアセンブリ コードは、オブジェクト ファイルの書き込みに使用されます。
あなたが言及したところでコンパイラがアセンブリに変換するのは標準です。「彼らはしなければならないのですか?」に関しては。-- そうでないコンパイラを書くことはできますが、最近では一般的でもありそうでもありません。
gcc を呼び出すと、実際にはコンパイラの内部ステップとしてターゲット アーキテクチャのアセンブリ コードが生成されます。
オプションを使用し-S
て、コンパイラが生成するアセンブリ コードを確認してみてください。
実行可能なオブジェクト ファイルは、発行したコマンドの一部として内部的に呼び出されるリンカーによって生成されます。