1、ret指令
- ret用于函数调用时返回。可以把C语言函数反汇编,可以看到最后一句反汇编代码都是ret,对应于C语言的return语句
- 执行ret函数后,会把PC设置成ra寄存器中保存的值,继续执行函数调用前的指令
- 更多函数调用细节可参考博客:《RISC-V架构的函数调用规范和栈布局》;
2、mret指令
- 当芯片陷入到M特权模式的异常模式后,想从M特权模式返回到陷入前的特权模式继续执行,必须使用mret指令,PC被设置成mepc寄存器保存的值,继续执行陷入M特权模式前的指令
- 执行mret指令,可能返回到S特权模式、U特权模式,也可能返回到M特权模式的普通模式,mret指令的返回操作就是中断的恢复现场,要理解mret指令背后硬件做了什么操作,需要学习RISC-V架构的中断机制
- 《RISC-V架构——中断处理和中断控制器介绍》
3、sret指令
- 和mret指令的作用几乎一样,是从S特权模式返回陷入到S特权模式之前的特权模式继续执行
4、总结
- ret用于函数调用返回,mret和sret用于从高特权模式切换回陷入前的地特权模式