DRET

RISC-V DRET 指令详解

指令手册I-type

从调试模式返回:PC←dpc,恢复 dcsr 记录的 prv/v(以及适用时的 pelp)状态。仅在 D-mode 且不从 Program Buffer 执行时有定义。

指令语法

dret
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数所在的寄存器。
立即数 imm:12 位有符号立即数,符号扩展后与 rs1 进行运算。
Debug系统与特权

指令行为说明

DRET 由 Debug Module 用于恢复正常执行。它的推荐编码为 0x7b200073;执行时 PC 从 dpc 恢复,正常执行按 dcsr 中的 prv 和 v 恢复,适用时 ELP 从 pelp 恢复。DRET 仅在 D-mode 且不从 Program Buffer 执行时有定义;页面不把未定义上下文伪装成 xRET、非法指令或固定平台行为。

快速理解与检索要点

DRET 是调试规范定义的系统级指令,页面说明只覆盖官方规定的架构语义,不推断平台固件策略。

DRET 的推荐编码是 0x7b200073;PC 从 dpc 恢复。
正常执行按 dcsr.prv 和 dcsr.v 恢复,适用时 ELP 从 pelp 恢复;它不是 mret/sret 的中断使能恢复序列。
仅 D-mode 且不从 Program Buffer 执行时有定义;不要推断未定义上下文的异常或平台策略。

常见使用场景

调试器返回

结合 «dret» 等实际代码理解该场景。

硬件断点恢复

结合 «dret» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认立即数字段在有效范围内。
  • 确认源寄存器 rs1 指向正确的操作数。
语义检查
  • 确认立即数符号扩展是否符合预期。
  • 确认结果寄存器 rd 的用途是否明确。

容易混淆 / 常见误区

仅调试模式可执行
非标准ISA(调试规范)

常见问题

它是用户态普通指令吗?

不是。DRET 只在 D-mode 且不从 Program Buffer 执行时有定义;它不是用户态汇编指令。

DRET 恢复哪些架构状态?

PC 从 dpc 恢复;正常执行按 dcsr.prv 与 dcsr.v 恢复,适用时 ELP 从 pelp 恢复。官方文本没有把它定义为 mret/sret 的中断使能恢复序列。