RISC-V架构中mret、sret、ret三个指令的区别

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用于从高特权模式切换回陷入前的地特权模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值