SD
只读状态脏摘要位;当 FS、VS 或 XS 表示 Dirty 时为 1。RV32 中对应 bit31。
这个字段控制什么
- - 状态脏摘要位;当 FS、VS 或 XS 表示 Dirty 时为 1。RV32 中对应 bit31。
常见取值
FS、VS、XS 中没有字段处于 Dirty 状态。
FS、VS 或 XS 至少有一个字段处于 Dirty 状态。
机器模式状态寄存器,包含全局中断使能、特权级栈、扩展状态等控制字段。
状态脏摘要位;当 FS、VS 或 XS 表示 Dirty 时为 1。RV32 中对应 bit31。
FS、VS、XS 中没有字段处于 Dirty 状态。
FS、VS 或 XS 至少有一个字段处于 Dirty 状态。
保留的 WPRI 位;软件写入时应保留原值,读取值应忽略。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
M 模式禁用陷阱位(Smdbltrp);用于控制 M 模式敏感陷阱阶段的意外/双重陷阱行为。显式写 1 会清除 MIE;在 M 模式执行 MRET/SRET 会清零。
未设置机器双重陷阱保护位。
机器双重陷阱保护位已设置;后续 M 模式陷阱按 Smdbltrp 规则处理。
Zicfilp 定义的机器先前期望落点状态。陷阱进入 M 模式时保存先前 ELP;MRET 按目标特权级的 LPE 恢复 ELP 后将其清为 NO_LP_EXPECTED。
不期望落点指令。
期望落点指令。
保留的 WPRI 位;软件写入时应保留原值,读取值应忽略。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
Hypervisor 扩展定义的机器先前虚拟化模式;记录进入 M 模式陷阱前的 V 状态。未实现 Hypervisor 扩展时该字段不存在。
陷入 M 模式前未处于虚拟化执行状态。
陷入 M 模式前处于虚拟化执行状态。
Hypervisor 扩展定义的客户虚拟地址标志;指示写入 mtval 的地址是否为客户虚拟地址。未实现 Hypervisor 扩展时该字段不存在。
mtval 中的地址不是 guest virtual address。
mtval 中的地址是 guest virtual address。
M 模式大端控制(Machine Big-Endian)。当 MPRV=0 时控制 M 模式的非取指内存访问;指令取指始终小端。SBE 和 UBE 可设为 MBE 的只读副本。
MPRV=0 时,M 模式非取指内存访问按小端解释;指令取指始终为小端。
MPRV=0 时,M 模式非取指内存访问按大端解释;指令取指仍始终为小端。
S 模式数据访问字节序控制;0 为小端,1 为大端,指令取指仍为小端。
S 模式显式内存访问按小端解释;指令取指不受该位影响。
S 模式显式内存访问按大端解释;指令取指不受该位影响。
RV64 中 S 模式有效 XLEN 编码;未实现 S 模式时为只读 0。
对应有效 XLEN=32。
对应有效 XLEN=64。
保留编码;可移植软件不应写入或依赖。
RV64 中 U 模式有效 XLEN 编码;未实现 U 模式时为只读 0。
对应有效 XLEN=32。
对应有效 XLEN=64。
保留编码;可移植软件不应写入或依赖。
保留的 WPRI 位;软件写入时应保留原值,读取值应忽略。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
Ssdbltrp 定义的 S 模式禁用陷阱位。显式写 1 会清除 SIE;陷阱进入 S 模式时若原值为 0 则置 1,若已为 1 则按双重陷阱规则处理;SRET 将其清零。未实现 Ssdbltrp 时为只读 0。
S 模式双重陷阱保护未置位。
S 模式双重陷阱保护已置位。
Zicfilp 定义的 S 模式先前期望落点状态。陷阱进入 S/HS 模式时保存先前 ELP;SRET 按目标特权级的 LPE 恢复 ELP 后将其清为 NO_LP_EXPECTED。
不期望落点指令。
期望落点指令。
为 1 时,S 模式执行 SRET 会陷入 M 模式。
S 模式执行 SRET 不因 TSR 置位而陷入。
S 模式执行 SRET 会触发非法指令异常。
为 1 时,低特权级 WFI 若未在实现定义的有界时限内完成,将触发非法指令异常;实现也可以总是触发该异常。
低特权级 WFI 不因 TW 置位而被强制超时陷入。
低特权级 WFI 若未在实现定义的有界时限内完成,将触发非法指令异常。
为 1 时,S 模式访问 satp 或执行 SFENCE.VMA/SINVAL.VMA 会触发非法指令异常;未实现 S 模式时为只读 0。
S 模式可按通常规则访问 satp 并执行地址转换栅栏。
S 模式访问 satp 或执行 SFENCE.VMA/SINVAL.VMA 会陷入。
允许从可执行页读取数据。
Load 不能仅因为页可执行就读取该页。
Load 可从可执行页读取数据。
允许 S 模式访问 U 页。
S 模式不能访问 U=1 的页,除非还有其他架构规则允许。
S 模式可访问 U=1 的页,但执行取指仍受规范限制。
数据内存访问使用 MPP 指定的有效特权级。
数据内存访问使用当前特权级。
数据内存访问按 MPP 指定的有效特权级执行。
额外用户扩展状态。
对应扩展状态关闭;使用相关扩展状态会触发异常或不可用。
扩展状态处于初始值。
扩展状态与内存中保存的上下文一致。
扩展状态可能已被修改,通常需要在上下文切换时保存。
浮点状态。
对应扩展状态关闭;使用相关扩展状态会触发异常或不可用。
扩展状态处于初始值。
扩展状态与内存中保存的上下文一致。
扩展状态可能已被修改,通常需要在上下文切换时保存。
进入 M 模式 trap 前的特权级。
陷入 M 模式前的特权级为 User。
陷入 M 模式前的特权级为 Supervisor。
该编码保留;可移植软件不应写入或依赖。
陷入 M 模式前的特权级为 Machine。
向量状态;控制向量指令和向量 CSR 是否可用并跟踪脏状态。
对应扩展状态关闭;使用相关扩展状态会触发异常或不可用。
扩展状态处于初始值。
扩展状态与内存中保存的上下文一致。
扩展状态可能已被修改,通常需要在上下文切换时保存。
进入 S 模式 trap 前的特权级。
陷入 S 模式前的特权级为 User。
陷入 S 模式前的特权级为 Supervisor。
进入 M 模式 trap 前的 MIE 值。
进入 M 模式陷阱前 MIE 为 0,或保存的返回后中断状态为关闭。
进入 M 模式陷阱前 MIE 为 1,MRET 可按规则恢复。
U 模式显式加载/存储字节序控制;0=小端,1=大端。未实现 U 模式时为只读 0,也可能是 MBE 或 SBE 的只读副本。
U 模式显式内存访问按小端解释;指令取指不受该位影响。
U 模式显式内存访问按大端解释;指令取指不受该位影响。
进入 S 模式 trap 前的 SIE 值;未实现 S 模式时为只读 0。
进入 S 模式陷阱前 SIE 为 0,或保存的返回后中断状态为关闭。
进入 S 模式陷阱前 SIE 为 1,SRET 可按规则恢复。
保留位,写入保留原值,读取忽略(WPRI)。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
M 模式全局中断使能。
当前在 M 模式运行时,Machine 全局中断关闭。
当前在 M 模式运行时,Machine 全局中断开启;具体递送还取决于 mie/mip 和委托状态。
保留位(WPRI)。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
S 模式全局中断使能;未实现 S 模式时为只读 0。
当前在 S 模式运行时,Supervisor 全局中断关闭。
当前在 S 模式运行时,Supervisor 全局中断开启;具体递送还取决于 sie/sip 和委托状态。
保留位,写入保留原值,读取忽略(WPRI)。
这个字段更适合结合上下文字段解释,不用按固定枚举背诵。
mstatus 是 Machine 状态、trap 与中断 CSR 中的 读写 CSR,地址为 0x300。先确认当前特权级和扩展实现情况,再根据位字段判断该 CSR 影响的架构状态。
使用 csrr/csrw/csrs/csrc 指令读写 mstatus,参考 RISC-V Privileged Architecture §2.8
mstatus 是 M 模式的核心状态寄存器。sstatus 是 mstatus 中与 S 模式相关字段的受限视图,包括 SIE、SPIE、SPP、SUM、MXR 等字段。mstatus.MIE 控制 M 模式全局中断使能;M 模式中断还需要结合 mie/mip 和委托状态判断。FS/VS/XS 字段控制浮点/向量/扩展寄存器的上下文保存策略。
MIE(bit3) 全局中断使能 | MPIE(bit7) 陷阱前 MIE 的保存值 | MPP(bits12:11) 陷阱前特权模式(00=U,01=S,11=M) | FS(bits14:13) FPU 状态(00=Off,01=Initial,10=Clean,11=Dirty) | SD(XLEN-1;RV64 bit63,RV32 bit31) 状态脏位汇总(FS/VS/XS 任一为 Dirty 时置 1)
初始化或进入相关特权流程时,软件先读取 mstatus 了解当前状态。
根据字段定义只修改目标位,保留其余位的原值。
修改后再次读取或通过后续 trap/中断/上下文切换行为验证配置是否生效。
不能只看 CSR 名称判断。官方 CSR 地址编码和表格给出最低访问特权级;mstatus 当前记录为 M模式,权限不足或未实现时访问会触发非法指令异常。
不要把整个 CSR 当普通整数覆盖。应只修改目标字段,保留未修改位,并按规范处理 WARL、WLRL、WPRI 或保留字段。