コンピューター理論、チョットデキルようになりたい

コンピュータサイエンスの学び直しです

学び直し30日目:6章 アセンブラ:実装、展望

記録

アセンブラをどうやって実装するか見た。4つのモジュールから構成されるようにすればよさげ。また、アセンブラはどの言語を用いても作れるみたいなので、割となじみのある Python で書こうと思う。
困ったらこの方のコードを参考にさせてもらおう。
github.com

仕様

アセンブラを構成するモジュール

以下3つのモジュールを駆使して、メインプログラムを書くことになりそう。

  1. Parser モジュール
    • 構文解析する。「A 命令か、C 命令か、疑似コマンドかの判別」、「シンボルはどれか」、「dest, comp, jump はどれか」。
    • 構文解析って何ぞやって感じだったけど、ググったら正に"構文解析"としか呼びようがないんですね。
  2. Code モジュール
  3. SymbolTable モジュール
    • Symbol と実際のアドレスを紐づけるモジュール。Python なら辞書型使えばよさそう。
シンボルを含むアセンブラ

アセンブリプログラムはシンボル定義前でもそのシンボルを使える。そのため、アセンブラアセンブリプログラムを最初から最後まで読む作業を2回続けて繰り返しているらしい。

  • 一回目:シンボルテーブル作成。バイナリコードは生成しない。
  • 二回目:シンボルテーブルを利用して、最終的なバイナリコードを生成する。

展望

アセンブラ単体で使用されることはほぼないらしい。人ではなくコンパイラによってアセンブリプログラムが書かれる(生成される)ことが多いのだそう。コンパイラも直接機械語を生成した方が都合がいいので、多くの高水準言語のコンパイラは、高水準プログラム言語のコード中にアセンブリ言語によるコードを埋め込むことを許可しているとのこと(C言語とか)。

今日の筋トレ

今日は休筋日