daisuzz.log

"コンピュータシステムの理論と実装 第7章 バーチャルマシン#1:スタック操作" を読んだ

「コンピュータシステムの理論と実装」を読んでメモを書いていきます。

前回は↓

iikanji.hatenablog.jp

メモ

コンパイル

  • VMを介したコンパイルのステップ
    • 高水準言語→VM言語に変換するステップ(フロントエンド)
    • VM言語→機械語に変換するステップ(バックエンド)

中間コード

VM言語

  • 算術操作, メモリ操作, プログラムフロー, サブルーチン呼び出しなどを提供する
  • 今回実装するVMの仕様
    • スタックマシンを使ってVM言語におけるデータを格納する方法を採用
    • functionと呼ばれるプログラムユニットでまとめられる
    • 16ビットのデータ型
    • 4種類のコマンドで構成される
      • 算術コマンド
        • スタック上で算術演算と論理演算を行う
        • add, sub, and, or, など
      • メモリアクセスコマンド
        • スタックとメモリ領域間でデータの転送を行なう
        • VMコマンドを実行すると裏でスタックとヒープを暗黙的に利用する
        • pop(pop) segment indexという形式
        • segmentは以下8つ
          • local
          • argument
          • pointer
          • this
          • that
          • constant
          • temp
          • static
      • プログラムフローコマンド
        • 分岐処理を行う
      • 関数呼び出しコマンド
        • 関数呼び出しとリターンを行う
    • コマンド構成
      • .vmファイルの集まり
      • 各ファイルには1つ以上の関数
      • //以降の文字や空行は無視
      • VMコマンドのフォーマット
        • command
        • command arg
        • command arg1 arg2

実装

  • Hackプラットフォーム上でVMの仕様を実現するためにVM変換器を実装する
  • VM変換器
    • 入力はVM言語で記述されたプログラムファイルの集合
    • 出力はHackアセンブリ言語で書かれた.asmファイル

実際にKotlinで実装したソースコードは以下

github.com

次章はこちら

iikanji.hatenablog.jp