csrw伪

csrw

伪
RISC-V 汇编 参考

lyszt.net 更详细地介绍了 csrw 和其他 RISC-V 指令。

描述

csrw 将一个寄存器复制到控制寄存器中。控制与状态寄存器(CSR)保存处理器状态,例如陷阱处理程序地址和中断开关(参见 csrrw)。下面的形式将 rs 复制到 CSR 中并丢弃旧值。

csrw csr, rs

它是一条伪指令,即汇编器会将其重写为真实指令的可读名称。它会变成下面的指令,其中 rd 为 zero,因此不会读取旧值。

csrrw zero, csr, rs

最常见的用途是设置陷阱处理程序。下面的行将标签 handler 的地址放入 mtvec。

la t0, handler
csrw mtvec, t0

mtvec 的低两位选择模式。为 00 时,每个陷阱都跳转到 mtvec 中的地址。为 01 时,称为向量模式,中断会跳转到该地址加上其原因代码的 4 倍,因此按钮中断(代码 11)会落在基地址之后 44 字节处。地址本身的低两位必须空闲,因为它们保存模式。

RISC-V 手册将 csrw csr, rs1 定义为 csrrw x0, csr, rs1。

展开为

csrrw zero, csr, rs

汇编器会将此伪指令替换为上面列出的真实指令或指令。

示例

li t0, 0x100
csrw mtvec, t0   # mtvec = 0x100