我正在尝试使用另一个寄存器 t1 加载 mstatus。
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
时,汇编程序给出Error: illegal operands 'lw mstatus, t1'
我不知道是什么导致了这个错误,mstatus 寄存器是一个读/写寄存器。它应该工作。
最佳答案
mstatus
不是内存部分。然后它不能在通用寄存器(x1-x31)下用 lw/sw 指令加载/存储。mstatus
是 CSR(配置状态寄存器)的一部分,通过控制和状态寄存器指令进行访问(参见 riscv-spec 的第 2.8 章)。
然后要加载 mstatus
,您应该使用 csrrs/c 指令并根据您想要执行的操作编写 csrrw 指令,您也可以只清除/设置寄存器的单个位。
在 mstatus
中写入 t1 并且不关心 mstatus
旧值 (x0):
读取 t1 中的 mstatus 并且不要触摸 mstatus 值:
或者
关于riscv - 为 RISC-V 设置 mstatus 寄存器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59524849/