フロントエンドバイトコードの仕様

  • (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ビットモードのとき:
    0123456
    01234rep0-1
  • rep0はリピートレジスタ0を表していて、直前に代入されたRxxレジスタを意味します。
  • 8ビットモードのとき:
    80...960x0~0x16
    97...9f下記の表を参照
    a0...aeR00~R0E
    afR3F
    b0...b7rep0~rep7
    b8...bf-0x8~-0x1
9798999a9b9c9d9e9f
0x200x180x400x800x1000xff0x7f0x3f0x1f
  • 12ビットモードのとき:
    c00...cee0x0~0xee
    cef...cff下記の表を参照
    d70...dff-0x90~-0x1
    d00...d3fR00~R3F
    d60...d6f0x20000, 0x40000, ..., 0x100000000
    d50...d56bit1, bit2, bit4, bit8, ..., bit64 (プリフィクス)
    d57更に柔軟なbit指定プリフィクス
    d58...d5eリザーブ(将来の拡張用)
    d5f10のベキ指定プリフィクス
  • d5f-x-y と書くと、imm=x*10^(3+y)と解釈されます。
cefcf0cf1cf2cf3cf4cf5cf6cf7
0x2000xf00x4000x8000x10000x20000x40000x80000x10000


cf8cf9cfacfbcfccfdcfecff
0xffff0x7fff0x3fff0x1fff0xfff0x7ff0x3ff0x1ff
  • 16ビットモードのとき:
    e000...e7de0x0~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): レジスタの値を16進数でコンソールに出力
    • reg0は以下のルールでエンコードされています。
  • 4ビットモードのとき:
    0123456
    R00rep0rep1rep2rep3rep4rep5
  • 8ビットモードのとき:
    80...9fR00~R1F
    a0...afrep0~rep15
    b0...bfR30~R3F
  • 12ビットモードのとき:
    c00...c3fR00~R3F
  • dfd(reg0): レジスタの値を10進数でコンソールに出力
  • dfe: リザーブ
  • dff: 特殊リマーク

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-11-13 (金) 18:50:08 (1161d)