【发布时间】:2020-05-11 12:48:27
【问题描述】:
我知道jal 和jalr 都可以用于调用函数,而相反,只有jal 可以用于从这样的函数返回:
sum3:
add a0, a0, a1
add a0, a0, a2
jalr x0, 0(ra)
但是,此代码使用 jal 而不是 jalr 从函数返回并且效果很好:
call sum3
ret_sum3:
# following instructions
# ...
sum3:
add a0, a0, a1
add a0, a0, a2
jal x0, ret_sum3
有鉴于此,为什么说jalr是函数返回的指令呢?我也可以使用jal。
【问题讨论】:
-
call指令捕获程序计数器 + 4,并将其放入返回地址寄存器ra- 有效地将其作为参数传递给子程序。子例程使用该值返回给调用者,无论调用者在哪里。因此,调用者不必知道是谁调用的。