csrrw

csrrw

RISC-V アセンブリ 参考

lyszt.netはcsrrwおよびその他のRISC-V命令をより詳しく扱っています。

説明

csrrw は制御レジスタと汎用レジスタを交換します。制御・ステータスレジスタ (CSR) はプロセッサの状態を保持する特別なレジスタで、トラップハンドラのアドレスや割り込みが有効かどうかを含みます。CSR は 12 ビットの番号を持ち、通常は mtvec のような名前が付いています。CSR にアクセスできるのは CSR 命令だけで、lw や sw ではアクセスできません。この名前は atomic read and write CSR の略です。atomic とは、読み出しと書き込みが単一の不可分なステップとして行われることを意味します。

csrrw rd, csr, rs1

CSR の古い値は rd に書き込まれ、rs1 の値は CSR に書き込まれます。次の行は t0 のアドレスを mtvec に格納し、以前の mtvec の値を t1 に残します。

csrrw t1, mtvec, t0

rd が zero の場合、古い値は破棄され、CSR は読み出されません。この形式は csrw の省略形です。rs1 が zero の場合、CSR は 0 で上書きされます。

このシミュレータは 6 つの CSR を提供します: mstatus、mie、mtvec、mepc、mcause、mip。mip への書き込みは、ハードウェアが設定するため無視されます。その他の CSR 番号は 0 として読み出され、書き込みは無視されます。読み出しについては csrr を、単一ビットの変更については csrs と csrc を参照してください。

RISC-V マニュアルには、rd=x0 の場合 csrrw は CSR を読み出さず、rs1=x0 の csrrw はそれに 0 を書き込もうとすると記載されています。

例

li t0, 0x100
csrrw t1, mtvec, t0   # mtvec = 0x100, t1 = old mtvec