2 番目のパス

2 番目のパスでは、アセンブラーは保管場所への記号参照についてオペランドを調べ、記号テーブル内の情報を使用してこれらの記号参照を解決します。

2 番目のパスでは、アセンブラーは次のことを行います。

  • ストレージ・ロケーションへのシンボル参照のオペランドを調べ、シンボル・テーブル内の情報を使用してこれらのシンボル参照を解決します。
  • 命令に無効な命令形式が含まれていないことを確認します。
  • ソース・ステートメントをマシン・コードおよび定数に変換し、割り振られたスペースをオブジェクト・コードで埋めます。
  • エラー・メッセージがある場合は、それを含むファイルを作成します。

2 番目のパスの開始時に、アセンブラーは各ソース・ステートメントをもう一度スキャンします。 アセンブラーは、各命令を変換するたびに、ロケーション・カウンターに入っている値を増分します。

特定のシンボルがソース・コードにあっても、そのシンボルがシンボル・テーブルに見つからない場合は、そのシンボルは定義されていません。 つまり、アセンブラーは、最初のパスでスキャンされたどのステートメントのラベル・フィールドにもシンボルを検出しなかったか、シンボルが .comm.csect.lcomm.sect、または .set 疑似命令の対象ではありませんでした。

これは、意図的な外部参照であるか、または記号名のつづりの誤りなどのプログラマー・エラーである可能性があります。 アセンブラーがエラーを示しています。 すべての外部参照は、 .extern または .globl ステートメントで指定する必要があります。

アセンブラーは、誤ったデータ位置合わせなどのエラーをログに記録します。 ただし、多くの位置合わせの問題は、アセンブリーを停止しないステートメントによって示されます。 これらの警告メッセージを表示するには、 -w フラグを使用する必要があります。

プログラマーがアセンブリー・エラーを訂正した後、プログラムをリンクする準備ができます。

注: 最初のパスで警告のみが生成された場合、アセンブリー・プロセスは 2 番目のパスに進みます。 アセンブラー・リストには、アセンブラーの 2 回目の受け渡し中に生成されたエラーおよび警告が含まれています。 最初のパスで生成された警告は、アセンブラー・リストには表示されません。