ぼくのかんがえたさいきょうCPU 8bit可変長命令フォーマット続き

 8bit可変長フォーマットを少し直した。

 以前の→ ぼくのかんがえたさいきょうCPU 8bit可変長命令フォーマット

※2016/2/8微修正

0で始まるものは命令、1で始まるものはオペランド。
命令フォーマットは 命令[オペランド]の組み合わせ。

0xxxxxxx 命令ヘッダ
・2,3バイト命令はRd(destination register)をフォーマット内に含む。

00xx_xxxx 1バイト命令ヘッダ
010x_xxxx_xxdddddd 2バイト命令ヘッダ
011x_xxxx_xxxxxxxx_xxdddddd 3バイト命令ヘッダ

1xxxxxxx オペランド指定

10cccccc 6bitリテラル 終端
1100_AAAA AABB_BBBB 2オペランド 即値が後ろに続く
1101_AAAA AABB_BBBB 2オペランド 終端
1110_AAAA AABB_BBBB ss_CCCCCC 3オペランド 終端
1111_0000 reserved
1111_nnnn cccc_cccc 8x(nnnn) リテラル 8~120bit 終端

オペランド指定は以下のパターン
(1) なし
(2) 即値のみ 10ccccccまたは1111_nnnn ...
(3) 2オペランドのみ 1101_RaRb
(4) 2オペランド+即値 1100_RaRb の後ろに(2)
(5) 3オペランド 1110_RaRb_ssRc

オペランドの組み合わせによって命令の動作を修飾できる。

例:演算命令

1バイト命令
0000_aaaa オペランドなし Reserved
0000_aaaa 即値 直前の命令のRdに即値を演算、結果をこの命令のRdとする。
0000_aaaa Ra,Rb Rb = Rb 演算 Ra
0000_aaaa Ra,Rb 即値 Rb = Ra 演算 即値
0000_aaaa Ra,Rb,Rc Reserved(バイト命令の3オペランド命令とかぶる)

2バイト命令
010_0_aaaa 00_dddddd オペランドなし Reserved
010_0_aaaa 00_dddddd 即値のみ Rd=即値 or Reserved
010_0_aaaa 00_dddddd Ra,Rb Rd = Rb 演算 Ra
010_0_aaaa 00_dddddd Ra,Rb 10_cccccc SIMD演算
010_0_aaaa 00_dddddd Ra,Rb 1111_nnnn ... Rd = Rb 演算 Ra 演算 即値 4オペランド命令
010_0_aaaa 00_dddddd Ra,Rb,Rc Rd = Rb 演算 Ra 演算 Rc ssで優先順など指定 4オペランド命令


例:分岐命令

1バイト命令:直前の命令の実行結果のフラグを見る。
0010_cond オペランドなし 条件成立で1命令スキップ
0010_cond 即値 条件成立で相対分岐
0010_cond Ra,Rb 条件成立でレジスタの値をコピー(Conditional Move)
0010_cond Ra,Rb 即値 Rb-Raの結果で条件を判断し、相対分岐
0010_cond Ra,Rb,Rc Ra-Rbの結果で条件を判断し、Rcを操作(0クリアなど。ssで指定)

2バイト命令:なし

例:メモリ操作命令

1バイト命令:なし

2バイト命令:(EAはEffective Address 操作対象となるアドレス)
010_0_mmmm 11_dddddd オペランドなし Reserved
010_0_mmmm 11_dddddd 即値 即値をEAとしてロードストア
010_0_mmmm 11_dddddd Ra Rb EAは[Ra+Rb]
010_0_mmmm 11_dddddd Ra Rb 10_cccccc EAは[Ra+Rb] ccccccの6bitを修飾 endian swapなど
010_0_mmmm 11_dddddd Ra Rb 1111_nnnn ... EAは[Ra+Rb+即値]
010_0_mmmm 11_dddddd Ra Rb Rc EAは[Ra+Rb]:ASI(Rc) ssの2bitでASI空間の指定(即値orレジスタ参照)

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

なるほど(納得、参考になった、ヘー)

この記事へのコメント

この記事へのトラックバック