2

コンパイラはバイナリ コードを別のファイルにどのように生成しますか? GCC のソース コード内のどのファイルがこれを処理するかについての参照は、非常に役立ちます。私が知りたいのは、コンパイラ (特に gcc) が ASM からマシンコードを正確に生成する方法です。

4

2 に答える 2

9

この質問に答えるには、数行ではなく、本が必要です。

非常に短いバージョンは次のとおりです。

コンパイラは 2 つの部分に分かれています。

  1. 特定の言語 (C など) を構文木 (プログラムを表す一般的な方法) に変換するフロントエンド

  2. 構文ツリーをマシン固有の (X86、ARM など) コードに変換するバックエンド。

関連するいくつかの手順があります。

  1. 字句解析(「スイッチ」などのキーワードをコードに変換)
  2. 構文解析 (前のステップから構文ツリーへの変換)
  3. コードの最適化 (構文ツリーを変更してパフォーマンスを向上させます)
  4. コード生成 (構文木から機械語を生成)
  5. リンク (より多くの実行ユニットを 1 つのバイナリ ファイルに結合する)

ググればもっと詳しい情報が得られます。

于 2012-10-04T16:43:39.347 に答える
6

アセンブラは別のユーティリティです。詳細については、http: //en.wikipedia.org/wiki/GNU_Assemblerをご覧ください。

ソース コードは binutils パッケージの一部です。ここで見つけることができます: ftp://ftp.gnu.org/gnu/binutils/

于 2012-10-04T15:43:01.287 に答える