我正在使用MARS模拟器在MIPS汇编中编写一个程序。我使用jal
进行函数调用,然后在调用结束时使用jr $ra
返回到程序中的原点。
我感到困惑的是,我在函数中使用的$t
寄存器在返回主程序后仍然有值。
我是否应该在返回之前将这些寄存器清零,以便将来使用临时寄存器的函数可以从头开始?我是不是遗漏了什么?
我感到困惑的是,我在函数中使用的$t寄存器在返回主程序后仍然有值。
是的,就像所有其他寄存器都有相同的值一样(没有什么特别的事情发生,只是因为你从函数返回(。
我是否应该在返回之前将这些寄存器清零,以便将来使用临时寄存器的函数可以从头开始?我是不是遗漏了什么?
无需将它们归零,它们就在那里供您使用!您可以随意使用临时寄存器,只需记住,如果您调用另一个函数(或您自己的函数!(,它们也会做同样的事情,因此您不能依赖于函数调用之间的值。相比之下,如果修改$s
寄存器,则需要保存和恢复这些寄存器,但您可以(通常(依赖其他函数为您做同样的事情。这是呼叫约定的一部分。