如何使用临时寄存器 - 返回后保留的值是多少?

时间:2011-10-06 19:19:30

标签: assembly mips mars-simulator

我正在使用MARS模拟器在MIPS程序集中编写程序。我正在使用jal进行函数调用,然后在结尾处使用jr $ra返回到程序中的原始点。

我感到困惑的是,我在函数中使用的$t寄存器在返回主程序后仍然具有值。

我应该在返回之前将这些寄存器清零,以便使用临时寄存器的未来函数可以从一个干净的平板开始吗?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:3)

  

我感到困惑的是,我在函数中使用的$ t寄存器在返回主程序后仍然具有其中的值。

是的,就像所有其他寄存器具有相同的值一样(因为从函数返回而没有什么特别的事情发生)。

  

我应该在返回之前将这些寄存器清零,以便使用临时寄存器的未来函数可以从一个干净的平板开始吗?我在这里错过了什么吗?

无需将它们归零,它们可供您使用!您可以随意使用临时寄存器做任何您喜欢的事情,请记住,如果您调用另一个函数(或您自己的!),他们将执行相同的操作,因此您不能依赖于函数的值调用。将此与您需要保存和恢复的$s寄存器进行对比,但是您可以(通常)依赖于为您执行相同操作的其他函数。这是calling convention的一部分。