/*本函数作用为取输入参数的绝对值*/
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