* 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: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||関数終了。||