小さい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;
}