RISC-V の ISA
RV32I
レジスタ一覧
id | name | |
---|---|---|
x0 | zero | 値はゼロで固定 |
x1 | ra | 戻りアドレス |
x2 | sp | スタックポインタ |
x3 | gp | グローバルポインタ |
x4 | tp | スレッドポインタ |
x5~x7 | t0~t3 | 一時レジスタ(関数呼び出し前後で保持されない) |
x8 | fp | フレームポインタ |
x8~x9 | s0~s1 | 保存レジスタ(関数呼び出し前後で保持される) |
x10~x11 | a0~a1 | 関数の引数/返値 |
x12~x17 | a2~a7 | 関数の引数 |
x18~x27 | s2~s11 | 保存レジスタ |
x28~x31 | t3~t6 | 一時レジスタ |
pc | プログラムカウンタはレジスタとしてアクセスできない |
命令フォーマット
ロード
x[rd] = sext?( M[x[rs1] + sext(imm)] [7?15?31? : 0] )
b(byte)/h(halfword)/w(word)で,メモリから読み出す長さを決めます.
()signed/(u)unsigned で,メモリから持ってきた値を符号拡張するかを決めます.
ストア
M[ x[rs1] + sext(imm) ] = x[rs2] [7?15?31?:0]
b(byte)/h(halfword)/w(word)で,メモリに書き込む長さを決めます.
RV32C
命令長を 16bit にした圧縮命令セット。