汇编跳转指令的小错误

 

/*本函数作用为取输入参数的绝对值*/

LEAF_ENTRY(func)

 

.set noreorder

 

    bltz    a0,1f                #本意为,如果参数1 a0 小于零即跳转到1标志处,并执行下面的语句,把a0取反

    subu  a0,zero,a0       #如果a0大于等于0,则这一句指令不会执行,直接返回正数

1: jr        ra

    or       v0,a0,zero

 

    .set reorder
    .end func  

 

 

结果发生错误。 输入参数如果是负的,返回的结果也是负的。 因为无论是否发生跳转都会执行取反那一个骤。

修改后的代码:

 

LEAF_ENTRY(func)

 

.set noreorder

 

    bltzl    a0,1f                #使用可能跳转指令,若该判断不成立,即跳转没有实际发生时,取反指令不会被执行

    subu  a0,zero,a0       #如果a0小0,则取反

1: jr        ra

    or       v0,a0,zero

 

    .set reorder
    .end func  

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值