RISCV 的系统寄存器被称为 CSR(Control and Status Register, 控制和状态寄存器) 。RISCV 的基础指令都具有 3 个操作数,而不是像 Arm64 一样的 2 个。
csrrw(CSR read and write):读写,csr中的值写入rd,rs1的值写入csr。csrrs(CSR read and set):读并置位,csr中的值写入rd,rs1的值或上csr中的值再写入csr。csrrc(CSR read and clear):读并清除,csr中的值读入rd,根据rs1的值对csr中的值按位清零再写入csr中。
csrrwi 、 csrrsi 、 csrrci 分别于 csrrw 、 csrrs 、 csrrc 相似,除了它们是使用一个处于 rs1 字段的、零扩展到 XLEN 位的 5 位立即数。
我们常用的系统寄存器读指令 csrr ,系统寄存器写指令 csrw ,系统寄存器清空指令 csrc 和系统寄存器置位指令 csrs 都是伪指令,如下所示:
csrr rd, csr    // csrrs rd, csr, zero
csrw csr, rs1   // csrrw zero, csr, rs1
csrc csr, rs1   // csrrc zero, csr, rs1
csrs csr, rs1   // csrrs zero, csr, rs1