Skip to content

Pass1アセンブラ

hangedman edited this page Apr 1, 2023 · 5 revisions

Pass1アセンブラ

目的

  • JMPに限らずアセンブラのラベルジャンプの処理を作成するには、その絶対アドレスの計算の前にすべての命令を構文解析しないといけない
  • この問題は"forward reference"として知られ、一般的には「Pass1アセンブラ」という設計で克服可能

具体的にはPass1アセンブラでは、最初に機械語のサイズを計算しlocation counterに格納、symbol tableにラベルの絶対アドレスを格納しておくことでPass2での処理につかう。

ソフトウェアコンポーネントについて

  • 登場人物

    • ソースコード: 元のアセンブラ文
    • LC(Location Counter;ロケーションカウンタ): 現在のプログラムカウント(現在のアドレス)を指す。アセンブラがプログラムを解析している途中で、各命令のサイズを確定し、各命令に対応する絶対アドレスを計算するために使用される。LCは、プログラムの解析が進むにつれて逐次増加する。そのため、LCの値は常に現在のアドレスを示す。
    • IC(Intermediate Code;中間言語): プログラムのコンパイル処理の途中結果。opennaskではbnfcを使っているので、構文解析後のASTを利用。
  • 補助的要素

    • ST (Symbol Table;シンボルテーブル): アセンブラ言語において、シンボル名とそのシンボルに対応する値を格納するためのテーブル
    • LT (Literal Table;リテラルテーブル): アセンブラ言語において、リテラル(プログラム中に直接定義された定数値)に対応するアドレスを格納するためのテーブル
  • Intermediate Code;中間言語、の一般的な表し方。この辺はASTが処理系にあるならばそれを使ったほうがいいと思う。

    • AD (Address)
    • DL (Data Length)
    • IS は命令セット(=Instruction)

これらの用語の意味は、特定のアセンブラにおいての文脈に応じて決定されるため、具体的な解釈については使用されているアセンブラのドキュメンテーションを参照することが望ましい。

フローチャート

パス1アセンブラの解説

概説

Two Pass Assemblers Tutorial

Clone this wiki locally