まなめ VM は以下のパーツから構成されています。 これらはまなめ命令セットによって制御することができます。
まなめ VM にはレジスタがあります。このレジスタ群を使用して計算を行います。
まなめ VM は以下のレジスタを備えています。
アキュムレータは 1 つ、表または裏レジスタは 3 つ記憶領域を持っています。 それらの記憶領域のサイズは 32 ビットになります。 要するに数値として -2147483648 〜 2147483647 の値のどれかを保持できる領域です。
主に計算を実行する為のレジスタで、特にアキュムレータを呼びます。 各種対応する命令でレジスタを指定する場合は「まなめ」と記述することで指定できます。 実行出来る計算は加減乗除と余りになります。
例: アキュムレータの値を画面に出力する
まなめ爆発しろ!
表または裏のレジスタ群として 3 つがセットになったレジスタがあります。 デフォルトでは表レジスタを使用しますが、ABSOLUTE_REG 命令や TOGGLE_REG 命令で、 使用するレジスタを変更したりできます。
こちらのレジスタは主に、ちょっとした値を保持しておいたり、ここの値を使って計算をする元にしたりする領域です。 各種対応する命令でレジスタを指定する場合は1番目から順番に「は」「う」「す」と記述することでこのレジスタを指定します。
例: 現在使用中のレジスタの値を 3 番目 2 番目 1 番目の順番で出力する
す爆発しろ! う爆発しろ! は爆発しろ!
レジスタの値を保存しておく領域があります。スタック構造で保存出来ます。
レジスタ群のレジスタの値 3 つをセットで保存することが出来ます。 何度も保存することが出来ます。 ただし、取り出す時は最後に保存した値しか取り出すことが出来ません。 3 回前に保存した値を取り出すといった事は出来ません。 必ず最後に保存した値のみ取り出すことが出来ます。
典型的な使い方は、サブルーチン処理の最初に PUSH 命令を RETURN 命令の直前に POP 命令を使用することで、 呼び出し元のレジスタの値を破壊しないといった使い方になるでしょう。
例: 現在使用中のレジスタの値をスタックに保存した後、取り出す。
ゆっくりしていってね!!! ゆっくりした結果がこれだよ!!!
プログラム実行を制御している部分です。命令を逐次処理しています。
この部分は以下の 3 つに大別できます。
プログラムの実行は以下のように実行されます。
ユーザが記述した命令の集合であるプログラムを保持している部分です。 これらの命令を逐次処理していく事になります。
現在実行している命令のアドレスを保持しています。 このカウンタの値と連動してプログラムコードの命令を逐次処理していきます。
JUMP 系の命令や CALL 系の命令はこのプログラムカウンタの値を書き換える命令となっています。
プログラムカウンタの値をスタック構造で保持することが出来ます。 スタック構造である為、保存した値を戻す時は最後に保存した値を戻す事になります。
操作契機 | 対応する命令 |
---|---|
値を保存する時 | CALL 系の命令を実行した時 |
保存した値を戻す時 | RETURN 命令を実行した時 |
まなめ VM はメモリがあります。
メモリにはアドレスがあり、そのアドレスに対し 1 つのレジスタの値を保存できるようになっています。
メモリのアドレスに指定出来る値は -2147483648 〜 2147483647 になります。 一般的なコンピュータと異なり、負の値のアドレスが存在します。
保存するときは、アキュムレータの値を保存するようになっています。
レジスタの領域だけでは値を保持できないほど多くの値を取り扱うときに便利でしょう。
例: 現在のアキュムレータの値を 1 番目のレジスタの値のアドレスが指すメモリに保存する
なめまは
まなめ VM は一つの出力画面を持っています。
出力画面には、レジスタの値を出力することができます。 出力には 2 種類の形式で出力することができます。
例: アキュムレータの値を文字として出力する。その後、アキュムレータの値を数値として出力する。
まなめ爆発しろ! まなめ爆発しる!