【问题标题】:Restoring registers in MIPS在 MIPS 中恢复寄存器
【发布时间】:2012-02-27 22:52:17
【问题描述】:

在下面一段MIPS代码中,不得不说开场时必须保存哪些寄存器,以后再恢复。我发现了一些,包括: $ra、$a0 和 $v0

但是任何不明显的东西是否也必须保存/恢复,例如 $sp 或 $fp?谢谢。

func: #insert function prologue here   
bne $a0, $0, else
addi $v0, $0, 1
j ret
else:
srl $a0, $a0, 1
jal func
addi $v0, $v0, 1
ret: #insert function epilogue here
jr $ra

【问题讨论】:

    标签: mips restore cpu-registers


    【解决方案1】:

    我假设 $a0 是函数的输入参数,而 $v0 是函数的返回值。

    这些寄存器不需要保存和恢复,因为它们会被使用/修改。

    您的函数是递归的,因此您需要保存和恢复返回地址 $ra。您不必保存和恢复任何未修改的寄存器,或者您将函数与输入函数时保持相同的状态。在这种情况下,$sp 可能会被(由您)修改,但您会在返回之前恢复其先前的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多