てきとうなさいと べぇたばん

コンピュータシステムの理論と実装 バーチャルマシン#2

完成した動画のスクショです。

コンピュータシステムの理論と実装 VM

GitHub上でこのコードあります: https://github.com/youkidearitai/nand2tetris

8章の実装が完了した。8章はVM(バーチャルマシン)の後半部分で、関数呼び出しなどを作成する。

https://www.oreilly.co.jp/books/9784873117126/

VMファイルからアセンブリを吐き出すソフトウェアを書く。プログラミング言語は要件を満たせればなんでもよく、今回はPythonを使った。

実装内容について

今回は、VMの関数の定義・呼び出しを実装することになる。関数を呼び出すときにその時のリターンアドレスやLCL、ARG、THIS、THATをスタックにプッシュしていき、定義された関数のアドレスへ移動して処理を行うことになる。その関数の処理が終わったら、プッシュしたLCL、ARG、THIS、THATを戻し、リターンアドレスへジャンプすることで呼び出し元へ戻る。

このスタック処理のほかに、ブートストラップコードが必要になってきたり、複数の.vmコードを一つにまとめてアセンブリにすることも必要になる。特に後者の複数の.vmをコードにするときに、コードがダブったりすることでおかしい結果になったりすることもある。CPUEmulatorはその重複したシンボルに対してエラーを出さないので気をつけよう。結構私はハマった。

これでVMの実装は終わるけれども、コンパイラはこのVMを使って実装するので、本当にバグが発生するのはこれからかもしれない。

一覧