コンパイラとアセンブラの違い

著者: Laura McKinney
作成日: 1 4月 2021
更新日: 9 5月 2024
Anonim
コンパイルとは?|コンパイルとは何か、仕組みについて3分でわかりやすく解説
ビデオ: コンパイルとは?|コンパイルとは何か、仕組みについて3分でわかりやすく解説

コンテンツ


コンパイラとアセンブラは、プログラムの実行において重要な役割を果たします。一部のコンパイラは、アセンブリコードではなく実行可能コードを直接生成します。コンパイラは前処理されたソースコードを取得し、アセンブリコードに変換します。アセンブラは、コンパイラからアセンブリコードを取得し、再配置可能なマシンコードに変換します。この記事では、コンパイラーとアセンブラーの違いを、以下に示す比較チャートを使用して説明しました。

  1. 比較表
  2. 定義
  3. 主な違い
  4. 結論

比較表

比較の根拠コンパイラ アセンブラ
ベーシックアセンブリ言語コードを生成するか、実行可能コードを直接生成します。再配置可能なマシンコードを生成します。
入力前処理されたソースコード。アセンブリ言語コード。
フェーズ/パスコンパイル段階は、字句解析器、構文解析器、意味解析器、中間コード生成、コード最適化、コード生成です。アセンブラーは、指定された入力に対して2つのパスを作成します。
出力コンパイラによって生成されるアセンブリコードは、マシンコードのニーモニックバージョンです。アセンブラーによって生成される再配置可能なマシンコードは、バイナリコードで表されます。

コンパイラの定義

コンパイラ ソース言語で書かれたプログラムを読み取り、同等のものに翻訳するコンピュータープログラム アセンブリ言語 アセンブリ言語コードを アセンブラ。ソースコードからアセンブリコードへの変換中に、コンパイラは エラー ユーザーへのソースコードで。


コンパイラも次のように分類されます シングルパス、マルチパス、ロードアンドゴー、デバッグおよび最適化。 分類は、コンパイラーが実行する機能とその構築方法に基づいて行われます。これらの複雑さにもかかわらず、コンパイラの基本的なタスクは同じままです。

コンパイルは2つの部分で実行されます。 分析部 そして 合成部。の 分析部 ソースコードを構成要素に分割し、ソースコードの中間表現を形成します。の 合成部 中間表現からターゲットコードを形成します。

コンパイルは、次のフェーズで実行されます。

字句解析器、構文解析器、意味解析器、中間コード生成器、コードオプティマイザー、コード生成器、シンボルテーブル、エラーハンドラー。

  • 字句解析器 ソースコードの文字を読み取り、それらをグループ化します トークンのストリーム。各トークンは、次のような文字の論理シーケンスを表します キーワード、識別子、演算子。トークンを形成する一連の文字は 語彙素.
  • 構文アナライザー 字句解析器から取得したトークンを解析し、トークンをグループ化します 階層構造.
  • セマンティックアナライザー ソースコードをチェックして セマンティックエラー.
  • 中間コードジェネレーター を生成する 中間表現 ソースコードの
  • コードオプティマイザー 中間コードを高速化されたマシンコードに最適化します。
  • コードジェネレーター 最終的にターゲットコードを生成します 再配置可能なマシンコードまたはアセンブリコード.
  • シンボル表 ソースコード内の各識別子のレコードを含むデータ構造です。
  • エラーハンドラー 各フェーズでエラーを検出し、それらのエラーを処理します。

アセンブラーの定義

一部のコンパイラーは、アセンブラーのタスクを実行し、アセンブリー・コードの代わりに再配置可能なマシン・コードを直接生成します。これはさらにリンカー/ローダーに直接渡されます。の アセンブラ コンパイラによって生成されたアセンブリコードを入力として受け取り、それを 再配置可能なマシンコード.


マシンコードとアセンブリコードの違いを見てみましょう。 アセンブリコード それは ニモニック マシンコードのバージョン。つまり、アセンブリコードは操作を表すために名前を使用し、さらにメモリアドレスに名前を付けます。一方、 マシンコード 使用する バイナリコード 操作およびメモリアドレスの表現用。

最も単純な形式のアセンブラーでも実行されます 2パス 入力の上。の 最初のパス すべてを検出する 識別子 格納場所を示すアセンブリコードで、 シンボル表 (コンパイラシンボルテーブルを除く)。の 保管場所が割り当てられます 最初のパスで遭遇する識別子に。

の中に セカンドパス、入力が再度スキャンされ、今回は オペコード翻訳済み ビットのシーケンス マシンコードでその操作を表します。 2番目のパスも変換します 識別子住所 シンボルテーブルで定義されます。したがって、2番目のパスは 再配置可能なマシンコード.

  1. コンパイラとアセンブラの主な違いは、 コンパイラ アセンブリコードを生成し、一部のコンパイラは実行可能コードを直接生成することもできますが、 アセンブラ 再配置可能なマシンコードを生成します。
  2. コンパイラは入力として 前処理されたコード プリプロセッサによって生成されます。一方、アセンブラーは アセンブリコード 入力として。
  3. コンパイルは次の2つの段階で行われます 分析フェーズ そして 合成段階。分析フェーズでは、入力が通過します 字句解析器、構文解析器、意味解析器 一方、合成分析は 中間コードジェネレーター、コードオプティマイザー、コードジェネレーター。一方、アセンブラーは入力を 二段階。最初のフェーズでは識別子を検出し、2番目のフェーズでアドレスを割り当てて、アセンブリコードをバイナリコードに変換します。
  4. コンパイラによって生成されたアセンブリコードは ニーモニック版 マシンコードの。ただし、アセンブラーによって生成される再配置可能なマシンコードは バイナリ再配置可能コード.

結論:

一部のコンパイラは実行可能コードを直接生成するため、アセンブラは必要ありません。アセンブラを使用する場合、リンカーはすべての組み込みライブラリをソースコードで使用されるライブラリ関数にリンクする必要があります。