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 等和中断相关的寄存器变化。