设置RISC-V的mstatus寄存器

时间:2019-12-30 01:46:26

标签: riscv

我试图用另一个寄存器t1加载mstatus。

check2=false

最初的 lw t1, mstatus # load mstatys register into t1 xori t1, t1, 0x8 # xor mstatus to set 3rd bit and leave everything else as is lw mstatus, t1 # set mstatus 可以正常工作。但是,当尝试lw t1, mstatus时,汇编器会给出

lw mstatus, t1

我不知道是什么原因导致此错误,mstatus寄存器是读/写寄存器。应该可以。

2 个答案:

答案 0 :(得分:3)

mstatus不是内存部分。这样就不能在通用寄存器(x1-x31)下用lw / sw指令加载/存储它。

mstatus是CSR(配置状态寄存器)的一部分,可通过控制和状态寄存器指令进行访问(请参阅riscv-spec的2.8章)。

然后要加载mstatus,您应该使用csrrs / c指令并根据要执行的操作编写csrrw指令,也可以只清除/设置寄存器的单个位。

mstatus中写入t1,而不管mstatus的旧值(x0):

  

csrrw t1,mstatus,x0

在t1中读取mstatus,不要触摸mstatus值:

  

csrrs x0,mstatus,t1

  

csrrc x0,mstatus,t1

答案 1 :(得分:2)

除了@FabienM的答案外,我还将添加对处理CSR的伪指令的引用。例如。 csrr rd, csr的缩写,csrrs rd, csr, x0,仅读取给定的CSR。这些可以在规范enter link description here的第25章中找到。