执行jal(MIPS)之前$ ra中存储的内容

问题描述 投票:0回答:1

enter image description here

在此函数的第一个迭代中,我们可以执行recur:并执行以下行:sw $ra, 0($sp),这是在任何jal语句之前完成的。据我了解,jal(跳转和链接)语句将输入到$ra寄存器中,即直接位于jal之后的位置。那么,如果$ra中还没有存储任何内容,示例中会发生什么呢?

assembly mips fibonacci
1个回答
1
投票

这是一个功能;在条目$ra上保留呼叫者希望您跳回的回信地址。

寄存器不能保存“ nothing”,它始终是32位值。

[如果某些代码将$ra设置为0或某个无效的地址,并使用j而不是jal跳转到此函数,则返回时它将崩溃,这将是调用者的错误。您的函数可以简单地假设$ra在函数入口上拥有有效的返回地址,无论是来自递归调用还是来自其他调用者。

(这是递归函数的要点,实际上您只是在对该函数进行函数调用,而从哪里调用都没有关系。)

© www.soinside.com 2019 - 2024. All rights reserved.