它是用户态普通指令吗?
不是。该类指令受特权级和扩展支持约束,用户态是否可执行必须看官方特权规则。
MRET 使用 opcode 1110011(0x73)、funct3 000、funct12 001100000010。rs1 字段选择源寄存器,12 位立即数提供第二操作数,rd 选择目标寄存器。
MRET 从机器模式陷阱处理程序返回:pc 设置为 mepc,当前特权级恢复为 mstatus.MPP,MIE 恢复为 MPIE,MPIE 置 1,MPP 置为最低支持特权级。若实现 H 扩展,还会按 MPV/MPP 恢复虚拟化状态。MRET 只能在 M-mode 执行;较低特权级执行会触发非法指令异常。
MRET 是特权架构定义的系统级指令,页面说明只覆盖官方规定的架构语义,不推断平台固件策略。
结合 «mret # Return from M-mode trap» 等实际代码理解该场景。
结合 «mret # Return from M-mode trap» 等实际代码理解该场景。
不是。该类指令受特权级和扩展支持约束,用户态是否可执行必须看官方特权规则。
不能简单替代。地址转换、指令获取和数据内存排序分别有不同的 fence/失效指令。