* ES-VMバイトコード暫定仕様#1
-(by [[K]], 2020.07.17)

** (0)
-(註)ここは確定情報ではないので何度も修正します。

** (1) 基本構造
-1つの関数は以下の2ブロックに分かれています。
--宣言ブロック
--コードブロック

** (2) 宣言ブロックについて
-ここでローカル変数、使用する定数、関数の引数などの様々な情報を記述します。
|RIGHT:0x1|宣言ブロックを終了して、コードブロックへ移行します。|
|RIGHT:0x2|変数の基本ビット数を変更します。後続の引数の4倍が設定されます(2なら8bit、8なら32bit、16なら64bitなど)。|
----
-デフォルト設定:
--基本ビット数:32bit
|オペランド番号||
|RIGHT:0x00-0x0f|基本ビット数の整数レジスタ|
|RIGHT:0x10-0x1f|リザーブ(ポインタレジスタなどを予定)|
|RIGHT:0x10-0x1f|偶数:ポインタレジスタ、奇数:アクセス権レジスタ|
|RIGHT:0x20-0x27|整数定数: 0, 1, 2, 3, 4, 5, 6, 7|
|RIGHT:0x28-0x2f|整数定数: 8, 15, 16, 31, 32, 63, 64, 127|
|RIGHT:0x30-0x37|整数定数: 128, 255, 256, 511, 512, 1023, 1024, 2047|
|RIGHT:0x38-0x3f|整数定数: 2048, 4095, 4096, 8191, 8192, 0x3fff, 0x4000, 0x7fff|

** (3) コードブロック
|RIGHT:0x1||ローカルラベル宣言。||
|RIGHT:0x2|a,b|代入命令。 a=b||
|RIGHT:0x3|a|ローカルラベルへのgoto。|aはオペランド番号ではない。|
|RIGHT:0x4||プリフィクス。||
|RIGHT:0x10|a,b|OR演算。 a|=b||
|RIGHT:0x11|a,b|XOR演算。 a^=b||
|RIGHT:0x12|a,b|AND演算。 a&=b||
|RIGHT:0x14|a,b|加算命令。 a+=b|プリフィクス4をつけると、a=b+cにできる。|
|RIGHT:0x15|a,b|減算命令。 a-=b||
|RIGHT:0x16|a,b|乗算命令。 a*=b||
|RIGHT:0x21|a,b,c|条件分岐。if(a!=b)goto c|cはオペランド番号ではない。ローカルラベル番号の相対値。|
|RIGHT:0x3f||関数終了。||



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS