假设我有:
main:
// stuff
jal function_a
function_a:
// function_a stuff
jal function_b
jr $ra
function_b:
// function_b stuff
jr $ra
据我了解,main 在执行 jal function_a 时会将适当的返回地址保存在 $ra 中,但随后 function_a 在执行 jal function_b 时会覆盖 $ra,因此显然需要在某个时候保存 $ra。但我找不到任何真正说明惯例是做什么的东西。在调用之前,我是否在 function_a 中将 $ra 存储在堆栈中jal function_b
?我是否在调用之前将 $ra 存储在 s-register 中jal function_b
,然后将该 s-register 保存在 function_b 的开头(我认为这里暗示了这一点)?有些不同?有关系吗?