* フロントエンドバイトコードの仕様
-(by [[K]], 2014.08.13)
** (1)
-1: LB命令
--1:
---LB(0, ...);を生成します。optはゼロで、ラベル番号は直前に生成したラベル番号+1が自動的に指定されます。
--41(op):
---LB(opt, no);を生成します。opt=op&0xff;で、no=「直前に生成したラベル番号+1」+op/256;になります。
-2: LIMM命令, CP命令
--2(imm)(reg0):
---immの値が定数を表しているときは、LIMM(32, reg0, imm);命令を生成します。32の部分をほかの数値にさせることもできて、その際はimmやreg0の部分でプリフィックスをつけて指定することになります。
---immの値がレジスタを表しているときは、CP(32, reg0, reg1);命令を生成します。32の部分をほかの数値にさせることもできて、その際はimmやreg0の部分でプリフィックスをつけて指定することになります。
---immは以下のルールでエンコードされています。

---4ビットモードのとき:
|0|1|2|3|4|5|6|
|0|1|2|3|4|rep0|-1|
---rep0はリピートレジスタ0を表していて、直前に代入されたRxxレジスタを意味します。

---8ビットモードのとき:
|80...96|0x0~0x16|
|97...9f|下記の表を参照|
|a0...ae|R00~R0E|
|af|R3F|
|b0...b7|rep0~rep7|
|b8...bf|-0x8~-0x1|

|97|98|99|9a|9b|9c|9d|9e|9f|
|0x20|0x18|0x40|0x80|0x100|0xff|0x7f|0x3f|0x1f|

---12ビットモードのとき:
|c00...cee|0x0~0xee|
|cef...cff|下記の表を参照|
|d70...dff|-0x90~-0x1|
|d00...d3f|R00~R3F|
|d60...d6f|0x20000, 0x40000, ..., 0x100000000|
|d50...d56|bit1, bit2, bit4, bit8, ..., bit64 (プリフィクス)|
|d57|更に柔軟なbit指定プリフィクス|
|d58...d5e|リザーブ(将来の拡張用)|
|d5f|10のベキ指定プリフィクス|
---d5f-x-y と書くと、imm=x*10^(3+y)と解釈されます。

|cef|cf0|cf1|cf2|cf3|cf4|cf5|cf6|cf7|
|0x200|0xf0|0x400|0x800|0x1000|0x2000|0x4000|0x8000|0x10000|

~
|cf8|cf9|cfa|cfb|cfc|cfd|cfe|cff|
|0xffff|0x7fff|0x3fff|0x1fff|0xfff|0x7ff|0x3ff|0x1ff|

---16ビットモードのとき:
|e000...e7de|0x0~0x7de|
|e9e0...efff|-0x620~-0x1|
|e7df...e7ff|リザーブ(将来の拡張用)|
|e800...e9df|リザーブ(将来の拡張用)|

---reg0の部分は単純にRxxの番号を符号なしのhh4で記述したものです。

(早くも力尽きた・・・)

-3: PLIMM命令
--3(imm):
---PLIMM(P3F, ...);を生成します。ラベル番号は直前に生成したラベル番号+immが使われます。しかし、この命令がデータラベルを指し示すことはないため、ラベル番号は単純な加算、減算ではなく、1つ先、2つ先、1つ前、2つ前・・・の分岐可能なラベルという意味に解釈されます。またoptが2や3のラベルを指し示すこともできず、それらもスキップしながら目的のラベル番号を探します。
--43(imm)(preg):
---PLIMM(Pxx, ...);を生成します。ラベル番号は直前に生成したラベル番号+immが使われます。しかし、この命令がopt=1以外のラベルを指し示すことはないため、ラベル番号は単純な加算、減算ではなく、1つ先、2つ先、1つ前、2つ前・・・の代入可能なラベルという意味に解釈されます。

-4: 第一プリフィックス命令
--44(reg):
---CND(Rxx);を生成します。

----
--dc0:
--dc1:
--dc2~dfb: リザーブ
--dfc(reg0): レジスタの値を10進数でコンソールに出力
--dfc(reg0): レジスタの値を16進数でコンソールに出力
---reg0は以下のルールでエンコードされています。

---4ビットモードのとき:
|0|1|2|3|4|5|6|
|R00|rep0|rep1|rep2|rep3|rep4|rep5|
---8ビットモードのとき:
|80...9f|R00~R1F|
|a0...af|rep0~rep15|
|b0...bf|R30~R3F|
---12ビットモードのとき:
|c00...c3f|R00~R3F|


--dfd(reg0): レジスタの値を16進数でコンソールに出力
--dfd(reg0): レジスタの値を10進数でコンソールに出力
--dfe: リザーブ
--dff: 特殊リマーク

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS