Assembly MIPS:在嵌套过程中保存返回地址
假设我有:Assembly MIPS:在嵌套过程中保存返回地址,assembly,mips,Assembly,Mips,假设我有: 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中,但在执行jal function_b时,function_a会覆盖$ra,因此
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中,但在执行jal function_b时,function_a会覆盖$ra,因此显然需要在某个时候保存$ra。但我找不到任何东西能真正说明公约是怎么做的。调用
jal function\u b
之前,是否在函数a中的堆栈上存储$ra?在调用jal function_b
之前,我是否将$ra存储在s寄存器中,然后将该s寄存器保存在function_b的开头(我认为这是隐含的)?有什么不同的吗?这有关系吗?通常的做法是直接在堆栈上保存$ra
。将其存储在(比如)$s0
中没有多大意义,因为根据正常的调用约定函数a
也必须保存$s0
,因此首先必须在堆栈上保存$s0
,为$ra
腾出空间。当然,如果你不遵守正常的通话惯例,你可以做任何你想做的事情