コンパイラはバイナリ コードを別のファイルにどのように生成しますか? GCC のソース コード内のどのファイルがこれを処理するかについての参照は、非常に役立ちます。私が知りたいのは、コンパイラ (特に gcc) が ASM からマシンコードを正確に生成する方法です。
2 に答える
9
この質問に答えるには、数行ではなく、本が必要です。
非常に短いバージョンは次のとおりです。
コンパイラは 2 つの部分に分かれています。
特定の言語 (C など) を構文木 (プログラムを表す一般的な方法) に変換するフロントエンド
構文ツリーをマシン固有の (X86、ARM など) コードに変換するバックエンド。
関連するいくつかの手順があります。
- 字句解析(「スイッチ」などのキーワードをコードに変換)
- 構文解析 (前のステップから構文ツリーへの変換)
- コードの最適化 (構文ツリーを変更してパフォーマンスを向上させます)
- コード生成 (構文木から機械語を生成)
- リンク (より多くの実行ユニットを 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 に答える