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

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

学び直し38日目:7章 バーチャルマシン#1:実装

記録

仕事がちょっと立て込んでて、一日に進める量が最近少なめ。やっと実装の節に目を通せた。VM 言語からアセンブリ言語への変換プログラムを実装することになる。このプログラムを、VM 変換器と呼ぶ。

やること

Xxx.vm を Xxx.asm に変換するようなプログラムを作る。
つまり、VM 言語とアセンブリ言語マッピングするプログラムを作る。

マッピング

アセンブリ言語から機械語に変換するときにも出てきた言葉。意味合いは同じで、あるガイドラインに従って「対応付け」すること。

ガイドライン

実装する際のベースとなるルール。標準的なルールを設けておくことで、VM 言語同士でないプログラムとやり取りする際の仕様が明確になる。また、複数人でソフトウェアやテストを書くことが可能となる。

RAM アドレス0~15

Hack 機械語では、RAM の先頭から16番目までの領域に R0~R15 のシンボルが割り当てられている。この16個の領域には、別途スタック操作時に使用するメモリアクセスコマンド向けのシンボルも割り当てられている(SP, LCL, ARG, などなど)。

VM 変換器の使い方

VM 変換器を使う際には、「VM 変換器 + 変換元ファイル」という形式で使う。以下のような感じ。変換後は、Xxx.asm というファイルがひとつ生成される。

$ VMtranslator (path)/Xxx.vm
プログラムの構成

以下三つ。基本的には、アセンブラと同じかな。

  • Parserモジュール:.vm ファイルを構文解析(どこにどんな情報が書かれているか解析)するモジュール。
  • CodeWriterモジュール:VM コマンドを Hack アセンブリコードに変換するモジュール。
  • メインプログラム:上記二つをうまいこと使って、.vm ファイルからアセンブリコードを生成し、それを .asm ファイル形式で出力する。

今日の筋トレ

リングフィットアドベンチャー。。。最近出来てない。