小さいVMが動いた
とりあえずな感じのVMを実装して動かしてみた。扱える値はintのみ。
pushi(1) で1をスタックにpush。ref(0)でスタックの上から0番目を演算レジスタに読み込み。addi(1)で演算レジスタに1加算。say()で演算レジスタの中身を表示。jmpでラベルまでジャンプ。以下無限ループ。
ソースはこちら。http://unicus.ddo.jp/public/browser/tivi/trunk
#include "tivi.hpp" using namespace Tivi; int main(){ TiviAssembler tasm; tasm.pushi(1) .ref(0) .label("hoge") .addi(1) .say() .jmp("hoge") ; TiviVM vm(tasm); cout << "result: " << vm.run_program() << endl; return 0; }