csrrs
lyszt.net 更详细地介绍了 csrrs 和其他 RISC-V 指令。
描述
csrrs 读取一个控制寄存器并设置其中的位。控制与状态寄存器(CSR)保存处理器状态,例如陷阱处理程序地址和中断开关(参见 csrrw)。该名称是 atomic read and set bits in CSR(在 CSR 中原子地读取并设置位)的缩写。CSR 的旧值会写入 rd,然后 rs1 中为 1 的每一位都会在 CSR 中被置为 1。rs1 中为 0 的位保持其值。
csrrs rd, csr, rs1
寄存器 rs1 用作掩码,即一种模式,其 1 位选择要更改哪些位。下面的几行设置 mstatus 的第 3 位(全局中断使能),并将之前的值留在 t1 中。
li t0, 8 csrrs t1, mstatus, t0
8 是二进制 1000,因此只有第 3 位会改变。当 rs1 为 zero 时,CSR 只被读取而从不被写入,这就是 csrr 简写。当 rd 为 zero 时,旧值被丢弃,这就是 csrs 简写。有关此模拟器中 CSR 的列表,请参见 csrrw;有关清除位,请参见 csrrc。
RISC-V 手册指出,rs1=x0 的 csrrs 完全不写入 CSR。
示例
li t0, 8 csrrs t1, mstatus, t0 # sets bit 3 of mstatus, t1 = old mstatus
