MIPS:在嵌套过程中保存返回地址

时间:2013-10-26 21:45:27

标签: assembly mips

让我说我有:

main:

    // stuff

    jal function_a

function_a:

    // function_a stuff

    jal function_b

    jr $ra

function_b:

    // function_b stuff

    jr $ra

根据我的理解,当它执行jal function_a时,main会在$ ra中保存相应的返回地址,但是当它执行jal function_b时,function_a会覆盖$ ra,所以很明显需要在某些时候保存$ ra。但我找不到任何实际说明这样做的惯例。在调用jal function_b之前,我是否在function_a中将$ ra存储在堆栈上?在调用jal function_b之前,我是否将$ ra存储在s寄存器中,然后将该s寄存器保存在function_b的开头(我认为这意味着here)?有些不同?这有关系吗?

1 个答案:

答案 0 :(得分:1)

通常的做法是直接在堆栈上保存$ra。将它存储在(例如)$s0中没有多大意义,因为根据正常的调用约定function_a也必须保留$s0,所以首先你必须保存$s0在堆栈上为$ra腾出空间。如果你不遵循正常的调用约定,那么你当然可以做任何你想做的事。