\[ \newcommand{dn}[3]{\frac{\mathrm{d}^{#3} #1}{\mathrm{d} #2^{#3}}}
\newcommand{\d}[2]{\frac{\mathrm{d} #1}{\mathrm{d} #2}}
\newcommand{\dd}[2]{\frac{\mathrm{d}^2 #1}{\mathrm{d} {#2}^2}}
\newcommand{\ddd}[2]{\frac{\mathrm{d}^3 #1}{\mathrm{d} {#2}^3}}
\newcommand{\pdn}[3]{\frac{\partial^{#3} #1}{\partial {#2}^{#3}}}
\newcommand{\pd}[2]{\frac{\partial #1}{\partial #2}}
\newcommand{\pdd}[2]{\frac{\partial^2 #1}{\partial {#2}^2}}
\newcommand{\pddd}[2]{\frac{\partial^3 #1}{\partial {#2}^3}}
\newcommand{\p}{\partial}
\newcommand{\D}[2]{\frac{\mathrm{D} #1}{\mathrm{D} #2}}
\newcommand{\Re}{\mathrm{Re}}
\newcommand{\Im}{\mathrm{Im}}
\newcommand{\bra}[1]{\left\langle #1 \right|}
\newcommand{\ket}[1]{\left|#1 \right\rangle}
\newcommand{\braket}[2]{\left\langle #1 \middle|#2 \right\rangle}
\newcommand{\inner}[2]{\left\langle #1 ,#2 \right\rangle}
\newcommand{\l}{\left} \newcommand{\m}{\middle} \newcommand{\r}{\right}
\newcommand{\f}[2]{\frac{#1}{#2}} \newcommand{\eps}{\varepsilon}
\newcommand{\ra}{\rightarrow} \newcommand{\F}{\mathcal{F}}
\newcommand{\L}{\mathcal{L}} \newcommand{\t}{\quad}
\newcommand{\intinf}{\int_{-\infty}^{+\infty}}
\newcommand{\R}{\mathcal{R}} \newcommand{\C}{\mathcal{C}}
\newcommand{\Z}{\mathcal{Z}} \newcommand{\bm}[1]{\boldsymbol{#1}} \]
RV32I
レジスタ一覧
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 にした圧縮命令セット。