MRET 和普通 JALR 返回有什么区别?
MRET 的目标来自 mepc,并同时恢复特权级和中断使能状态;JALR 只按寄存器加立即数更新 PC,并可写链接寄存器。
机器模式陷阱返回:pc<-mepc,返回模式由 mstatus.MPP 和(H 扩展下的)MPV 确定,MIE<-MPIE,并按特权规范更新 MPIE、MPP、MPV 和相关状态。
MRET 是机器模式陷阱处理程序使用的特权返回指令。它先由 mstatus(RV32 上也可能为 mstatush)中的 MPP 和 MPV 确定返回模式,再将 MPV 清零、MIE 恢复为 MPIE、MPIE 置 1、MPP 置为最低支持特权级,最后将 pc 设为 mepc;返回到低于 M 的模式时 MPRV 也被清零。MPV 仅在实现 H 扩展时参与虚拟化返回模式的选择,且 MPP=M 时被忽略。MRET 只能在 M-mode 执行,较低特权级执行会触发非法指令异常。
从 SYSTEM 固定编码开始,展示 xRET 的权限检查、EPC 到 PC 的恢复,以及 previous interrupt-enable 和 previous privilege 字段更新。
该动画展示核心 xRET 状态及 MRET 的 MPV 返回分支;不模拟扩展条件状态(例如 MDT、ELP)、操作系统调度、handler 内容、流水线、延迟或平台策略。
MRET 把机器模式 trap handler 保存的返回上下文恢复到架构状态:PC 来自 mepc,返回模式由 MPP 和(H 扩展下的)MPV 确定,中断使能来自 MPIE。它不是函数返回或普通跳转。
结合 «mret # Return from M-mode trap» 等实际代码理解该场景。
结合 «mret # Return from M-mode trap» 等实际代码理解该场景。
MRET 的目标来自 mepc,并同时恢复特权级和中断使能状态;JALR 只按寄存器加立即数更新 PC,并可写链接寄存器。
不会。它的编码中 rd 固定为 x0,架构效果是 PC、当前特权级和相关 mstatus 字段的更新。