6.常见寄存器和指令
一.寄存器
1.通用寄存器

2.特殊寄存器
stvec(Supervisor Trap Vector) |
内核在这里写入trap处理程序的地址;RISC-V会跳转到stvec 中的地址来处理trap,xv6的stvec就是trampoline page的起始地址 |
---|---|
sepc | 发生trap时,RISC-V将当前的pc 值存储到这里(pc 随后会被stvec 中的值覆盖)。从trap返回时,sret 指令会将sepc 复制回pc 。内核可以通过写入sepc 来控制sret 的去向。 |
scause | RISC-V在这里放置一个数字,描述产生trap的原因 |
sscratch | trap handler刚开始执行时,没有可用通用寄存器供使用,sscratch 可作为临时存储器来存储某一通用寄存器的值,以提供一个可用寄存器 |
sstatus | sstatus中的SIE 位控制设备中断是否启用。如果内核清空SIE ,RISC-V将推迟设备中断,直到内核重新设置SIE 。SPP 位指示trap 是来自用户模式还是管理模式,并控制sret 返回的模式。 |
2.1 mstatus寄存器

SIE: 监管者模式(supervisor mode)的全局中断使能位。
MIE: 机器模式(machine mode)的全局中断使能位。
SPIE:用于保存进入异常之前,SIE的值。
MPIE:用于保存进入异常之前,MIE的值。
SPP:用于保存进入异常之前,处理器处于那种模式。(只有一位,只能用于保存 S-mode 或者 U-mode 模式)
MPP:用于保存进入异常之前,处理器处于那种模式。(有两位, U-mode,S-mode,M-mode 都可以保存)
FS:用于维护或者反映浮点单元状态的位域。这个位域可以用于操作系统上下文切换时对浮点状态的判断。
XS:用于维护或者反映用户自定义扩展指令单元的状态。这个位域可以用于操作系统上下文切换时对用户自定义扩展指令单元状态的判断。
SD: 用于反映FS或者XS的位域是否处于脏(dirty)状态。这个位域是 FS,XS 状态的汇总,方便操作系统上下文切换时快速判断(即:是否需要对浮点上下文或者其他扩展指令状态进行保存)。
2.2 medeleg&mideleg
-
medeleg(machine exception delegation Registers):机器异常委托寄存器
-
mideleg(machine interrupt delegation Registers): 机器中断委托寄存器
默认情况下,任何特权级别的所有陷阱都会在机器模式下处理,当然机器模式处理程序可以使用 MRET 指令将陷阱重定向回适当的模式级别。但是为了提高性能,RISC-V 提供了一种硬件机制,那就是异常中断委托机制。有了这个机制后,就不再需要软件程序上使用 MRET 指令将陷阱重定向回想要的模式级别。
2.3 PMP指令
为了安全或其他原因,需要限制可访问的内存范围,就可以通过PMP指令做到
PMP指令由pmpcfgX
和pmpaddrX
组成,以riscv32为例,一共有16个pmpcfg
和pmpaddrX
,其中pmpcfg
是4个表项占用一个寄存器,每个pmpaddr
单独占用一个寄存器,又因为RV32拥有34位物理地址空间,而寄存器只有32位,所以只存储\([2,33]\)位,低2位不存储

二.指令
csrr
,读取一个 CSR 的值到通用寄存器。如:csrr t0, mstatus
,读取mstatus
的值到t0
中。csrw
,把一个通用寄存器中的值写入 CSR 中。如:csrw mstatus, t0
,将t0
的值写入mstatus
。csrs
,把 CSR 中指定的 bit 置 1。如:csrsi mstatus, (1 << 2)
,将mstatus
的右起第 3 位置 1。csrc
,把 CSR 中指定的 bit 置 0。如:csrci mstatus, (1 << 2)
,将mstatus
的右起第 3 位置 0。csrrw
,读取一个 CSR 的值到通用寄存器,然后把另一个值写入该 CSR。如:csrrw t0, mstatus, t0
,将mstatus
的值与t0
的值交换。csrrs
,读取一个 CSR 的值到通用寄存器,然后把该 CSR 中指定的 bit 置 1。csrrc
,读取一个 CSR 的值到通用寄存器,然后把该 CSR 中指定的 bit 置 0。sfence.vma
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步