【问题标题】:MIPS: Saving the return address in nested proceduresMIPS:在嵌套过程中保存返回地址
【发布时间】:2013-10-26 21:45:27
【问题描述】:

假设我有:

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。但我找不到任何真正说明惯例是做什么的。在调用jal function_b 之前,我是否在function_a 中将$ra 存储在堆栈中?我是否在调用jal function_b 之前将$ra 存储在s-register 中,然后将该s-register 保存在function_b 的开头(我认为这是暗示here)?有些不同?有关系吗?

【问题讨论】:

    标签: assembly mips


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 1970-01-01
      • 2016-04-17
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多