命令セットアーキテクチャを考える13 (命令コード)
命令コードフォーマットのうちopcode 6bitの割り当て概略案です。
opcodeの構成(上位3bit)
000 : load/store(4) + 分岐(branch/jump)命令(4)
001 : 整数演算命令(四則演算)(6)
010 : 水平演算(7) + スワップ命令(1)
011 : 論理演算命令(3) + シフト命令(5)
100 : 浮動小数点演算命令(15)
101 : 同上
110 : bit操作命令(7)
111 : special
# loop命令を追加したため、分岐命令の数を3→4に変更しました。(2018/03/21)
# add/subの符号なし命令を削除したため、整数演算命令の数を8→4に変更しました。(2018/03/21)
これで上位3bitを見るだけで、どういった命令かがわかるようになります。
その4で書いた、命令コードフォーマットのちょっと変態なビット割り付けの理由がここでわかります。
最初の前提条件で書いたように、「16進ダンプを見てもプログラムがわかるのが理想」なのですが、いろいろとやって見ても難しかったので、それじゃぁ「8進ダンプならどうか」って考えました。実は、64本というレジスタ本数も6bitで表現できるということが理由です。8bit(256本)にしたらもっと良かったのですが、残念ながら3オペランド命令形式では、レジスタ指定ビットだけで24bit使っちゃうので、命令コードが入りません。
その4で書いた命令コードフォーマットですが、ちょっと変則的に16bit(2バイト)単位に下位から3bitずつ区切ると区切りやすいようなっています。
[命令コードフォーマット]
bit[31:28] : Mode(1+1+2) :vector/PC相対/increment,imm/offset,データ長
bit[27:22] : OPcode(6)
bit[21:16] : Rs(6)
bit[15:6] : imm/offset(10) : imm/offsetとRtはどちらか一方
bit[11:6] : Rt(6)
bit[5:0] : Rd(6)
とりあえず、このシリーズはいったん終了です。
| 固定リンク
この記事へのコメントは終了しました。


コメント