伪指令ret & 真实指令jalr x0,x1,0

伪指令&真实指令

伪指令:

  • 没有对应的机器码
  • 可以被汇编器翻译成一条/多条真实指令
  • 方便程序员编写/阅读代码
  • 简化常用操作

真实指令:

  • RV32I
  • RV32F等

ret&jalr x0,x1,0

ret:

  • 伪指令
  • 从一个子程序返回到调用该子程序的地方

jalr x0,x1,0:

  • 真实指令
  • 把x1(即ra)寄存器中的值作为跳转目标地址,同时把x0寄存器(即0)作为返回地址寄存器
  • 相当于跳转到返回地址,且不保存新的返回地址 

jalr基本用法 

指令格式:jalr rd,rs1,imm

说明:

  • rd是跳转返回地址寄存器
  • rs1是跳转目标基地址寄存器
  • imm是跳转目标偏移地址立即数

过程:

  • 把当前pc+4存入rd寄存器(这样 程序就可以在执行完子程序后,通过rd寄存器中的值返回到调用它的地方)
  • 把rs1+imm的值作为新的pc值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据提供的代码,可以将 `Condi` 和 `sub_whenw` 视为两个函数或者过程,其 `Condi` 接受一些参数并返回一个布尔值,`sub_whenw` 接受一些参数并执行一些操作。其,`!RET`、`DFTRAMBYP`、`TENA`、`QNAPA`、`CENA`、`TONAPA`、`TCENA`、`EMAA[0]`、`EMAA[1]`、`EMAA[2]` 和 `EMASA` 等变量或者常量的含义没有给出,需要根据上下文或者其他信息进行推断。 根据条件 `!RET&(!DFTRAMBYP&((TENA&! QNAPA&! CENA)|(!TENA&!TONAPA&!TCENA)) IDFTRAMBYP) &EMAA[2]&EMAA[1]&EMAA[O]&EMASA` 可以得出 `sub_whenw` 的第一种情况: ``` !RET&!DFTRAMBYP&TENA&!TONAPA&!CENA&EMAA[2]&EMAA[1]&EMAA[0]&EMASA ``` 根据条件 `!RET&!DFTRAMBYP&!TENA&!TONAPA&!TCENA&EMAA[2]&EMAA[1]&EMAA[0]&EMASA` 可以得出 `sub_whenw` 的第二种情况: ``` !RET&!DFTRAMBYP&!TENA&!TONAPA&!TCENA&EMAA[2]&EMAA[1]&EMAA[0]&EMASA ``` 根据条件 `!RET&TENA&((DFTRAMBYP&!SEA)|(!DFTRAMBYP&!CENA))` 可以得出 `sub_whenw` 的第三种情况: ``` !RET&TENA&DFTRAMBYP&!SEA ``` 或者: ``` !RET&TENA&!DFTRAMBYP&!CENA ``` 根据这些条件可以得出通用的代码设计,例如: ``` sub sub_whenw { my ($RET, $DFTRAMBYP, $TENA, $QNAPA, $CENA, $TONAPA, $TCENA, $EMAA0, $EMAA1, $EMAA2, $EMASA) = @_; if (!$RET || !$TENA || $EMAA0 || $EMAA1 || $EMAA2 || !$EMASA) { # do nothing } elsif (!$DFTRAMBYP && (($TENA && !$QNAPA && !$CENA) || (!$TENA && !$TONAPA && !$TCENA))) { # do something } elsif (!$DFTRAMBYP && !$TENA && !$TONAPA && !$TCENA && !$CENA && !$QNAPA) { # do something else } elsif ($TENA && (($DFTRAMBYP && !$SEA) || (!$DFTRAMBYP && !$CENA))) { # do something different } } ``` 需要注意的是,这只是一个草稿,如果变量的含义或者条件的逻辑不正确,需要进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

罗马尼亚硬拉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值