RISC-V 特权指令简介
1 CSR 读后写指令:csrrw
这一条指令的格式是:
这条指令会把 csr
寄存器的值读入 rd
,然后把 rs
的值写入 csr
寄存器。
2 CSR 读后写立即数指令:csrrwi
这一条指令的格式是:
这条指令会把 csr
寄存器的值读入 rd
,然后把立即数 zimm
写入 csr
寄存器。不同于普通指令立即数,zimm
只有 5 位,在计算时需要进行零扩展。
3 CSR 读后置位指令:csrrs
这一条指令的格式是:
这条指令会把 csr
寄存器的值读入 rd
,然后把 rs
寄存器的值与 csr
寄存器的值进行按位或运算,结果写入 csr
寄存器。表现为 csr
以 rs
为掩码,置位 rs
中为 1 的位。
4 CSR 读后置位立即数指令:csrrsi
这一条指令的格式是:
这条指令会把 csr
寄存器的值读入 rd
,然后把 5 位立即数 zimm
零扩展至 32 位,并与 csr
寄存器的值进行按位或运算,结果写入 csr
寄存器。表现为 csr
以 zimm
为掩码,置位 zimm
中为 1 的位。
5 CSR 读后复位指令:csrrc
这一条指令的格式是:
这条指令会把 csr
寄存器的值读入 rd
,之后把 rs
寄存器的值按位取反,并与 csr
寄存器的值进行按位与运算,结果写入 csr
寄存器。表现为 csr
以 rs
为掩码,复位 rs
中为 1 的位。
6 CSR 读后复位立即数指令:csrrci
这一条指令的格式是:
这条指令会把 csr
寄存器的值读入 rd
,然后把 5 位立即数 zimm
零扩展至 32 位并按位取反,再与 csr
寄存器的值进行按位与运算,结果写入 csr
寄存器。表现为 csr
以 zimm
为掩码,复位 zimm
中为 1 的位。
7 环境调用指令:ecall
环境调用指令会主动触发 RISC-V 中的一种异常——系统调用异常。这种异常将会向操作系统发起进入更高级别运行环境的申请。系统调用本质上也是异常,因此其与普通异常一样,都会被处理器捕获、设置某些 CSR 的值并跳转到异常处理流程中。
8 机器模式异常返回指令:mret
在机器模式处理完异常后,可以通过 mret
指令返回到之前的模式。这个指令会恢复异常发生时 PC 的值,并更新 CSR 状态使其回到用户态。需要注意的是,本课程中我们不涉及外设中断,因此可以忽视 MIE
等和中断相关的寄存器变化。