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