Risc-Vの即値表現
Day3:Risc-Vの即値表現
risc-vの命令を逆アセンブラを作成しているときに即値のビット列が並び変わっていてややこしく感じたのでそれについて便所の落書き程度に書く。
Risc-Vには即値命令のデータを用いる命令がいくつか存在するが、その中でも S-type,B-type,J-typeの三種類は即値が2つに分割して格納されていたり、ビット列が並び変わってたりする。そのため命令を解釈するためにはビット列を並べ替え数値として扱える状態に変形しなければならない
S-type
この表現を持つ命令SB, SH, SW
S-typeの命令は2つに分割された即値を持っている。この表現を持つ命令はメモリへデータを書き込むストア系の命令であり、即値は書き込み先のアドレスを表す。次節以降の2つB-type、J-typeと比較すると最下位ビット(0の桁)を持っているという違いがある。まぁ次の2つはジャンプのアドレスで、この命令はデータのアドレスなんだから当たり前だよね。よってメモリ番地上で任意の1バイトにアクセスすることが出来る。
B-type
この表現を持つ命令 BEQ, BNE, BLT, BGE, BLTU, BGEU
B-typeの命令は2つに分割され、更にその中で並べ替えられた即値を持っている。これは分岐命令に使われる表現であり、即値はアドレスを表す。即値が格納されている場所はS-typeと同じであるが最下位ビットが存在せず表現はbyte飛ばしになる。
J-type
この表現を持つ命令 JAL
J-typeは並べ替えられた20bit分の即値を持つ命令であり、ジャンプ命令に用いられる。即値は最下位ビットが1から始まることからアドレスは2個飛ばしとなる。
感想とか
MIPSはI形式やJ形式でも即値がきれいにまとまっていたので、こうやってビットが並び変わっているのはPIC16FのA/Dコンバータの出力みたいで、人間には読みづらいなと思いました。(粉みかん)tしかし、並び変わっているビット列が他のタイプの命令と同じビットの区分で並べられていたり計算機にしてみたらよくまとまっており、かなり考えて作られていることが伺える。