SD
只读状态脏摘要位;当 FS、VS 或 XS 表示 Dirty 时为 1。RV32 中对应 bit31。
这个字段控制什么
- - 状态脏摘要位;当 FS、VS 或 XS 表示 Dirty 时为 1。RV32 中对应 bit31。
常见取值
FS、VS、XS 中没有字段处于 Dirty 状态。
FS、VS 或 XS 至少有一个字段处于 Dirty 状态。
监管者状态寄存器,mstatus中与S模式相关的字段子集视图。
状态脏摘要位;当 FS、VS 或 XS 表示 Dirty 时为 1。RV32 中对应 bit31。
FS、VS、XS 中没有字段处于 Dirty 状态。
FS、VS 或 XS 至少有一个字段处于 Dirty 状态。
RV64 中 U 模式有效 XLEN 编码。
对应有效 XLEN=32。
对应有效 XLEN=64。
保留编码;可移植软件不应写入或依赖。
允许从可执行页读取数据。
Load 只能从可读页读取;MXR 对未启用分页地址转换时无影响。
Load 可从可读页或可执行页读取;MXR 对未启用分页地址转换时无影响。
允许 S 模式访问 U 页。
S 模式访问 U=1 的页会 fault;SUM 对未启用分页地址转换时无影响。
S 模式 load/store 可访问 U=1 的页;S 模式仍不能从用户页取指。
额外用户扩展状态。
扩展状态关闭;使用相关扩展状态会触发异常或不可用。
扩展状态处于初始值。
扩展状态与内存中保存的上下文一致。
扩展状态可能已被修改,通常需要在上下文切换时保存。
浮点状态。
扩展状态关闭;使用相关扩展状态会触发异常或不可用。
扩展状态处于初始值。
扩展状态与内存中保存的上下文一致。
扩展状态可能已被修改,通常需要在上下文切换时保存。
向量状态;是 mstatus.VS 的 S 模式视图。
扩展状态关闭;使用相关扩展状态会触发异常或不可用。
扩展状态处于初始值。
扩展状态与内存中保存的上下文一致。
扩展状态可能已被修改,通常需要在上下文切换时保存。
进入 S 模式 trap 前的特权级。
陷入 S 模式前的特权级为 User;SRET 返回到 U 模式。
陷入 S 模式前的特权级为 Supervisor;SRET 返回到 S 模式。
U 模式显式内存访问字节序控制。
U 模式显式内存访问按小端解释;指令取指不受该位影响。
U 模式显式内存访问按大端解释;指令取指不受该位影响。
进入 S 模式 trap 前的 SIE 值。
进入 S 模式陷阱前 SIE 为 0,或保存的返回后中断状态为关闭。
进入 S 模式陷阱前 SIE 为 1,SRET 可按规则恢复。
S 模式全局中断使能。
当前在 S 模式运行时,Supervisor 全局中断关闭。
当前在 S 模式运行时,Supervisor 全局中断开启;具体递送还取决于 sie/sip。
sstatus 是 Supervisor 状态、trap 与中断 CSR 中的 读写 CSR,地址为 0x100。先确认当前特权级和扩展实现情况,再根据位字段判断该 CSR 影响的架构状态。
使用 csrr/csrw/csrs/csrc 指令读写 sstatus,参考 RISC-V Privileged Architecture §2.8
sstatus 是 mstatus 中 S 模式相关字段的受限视图——S 模式软件通过 sstatus 操作自身特权级可见字段。S 模式中断是否进入,取决于当前特权级、sstatus.SIE 以及 sip/sie 中对应挂起与使能位;不要把它简化成由 mstatus.MIE 控制。陷阱进入时硬件将 SIE 保存到 SPIE,并清零 SIE;sret 执行时从 SPIE 恢复到 SIE。
SIE(bit1) S模式中断使能 | SPIE(bit5) 陷阱前SIE保存值 | SPP(bit8) 陷阱前特权模式(0=U,1=S) | SUM(bit18) 允许S模式访问U模式内存 | MXR(bit19) 使可执行页可读
初始化或进入相关特权流程时,软件先读取 sstatus 了解当前状态。
根据字段定义只修改目标位,保留其余位的原值。
修改后再次读取或通过后续 trap/中断/上下文切换行为验证配置是否生效。
不能只看 CSR 名称判断。官方 CSR 地址编码和表格给出最低访问特权级;sstatus 当前记录为 S模式,权限不足或未实现时访问会触发非法指令异常。
不要把整个 CSR 当普通整数覆盖。应只修改目标字段,保留未修改位,并按规范处理 WARL、WLRL、WPRI 或保留字段。