我正在使用MARS模拟器在MIPS程序集中编写程序。我正在使用jal
进行函数调用,然后在结尾处使用jr $ra
返回到程序中的原始点。
我感到困惑的是,我在函数中使用的$t
寄存器在返回主程序后仍然具有值。
我应该在返回之前将这些寄存器清零,以便使用临时寄存器的未来函数可以从一个干净的平板开始吗?我在这里错过了什么吗?
答案 0 :(得分:3)
我感到困惑的是,我在函数中使用的$ t寄存器在返回主程序后仍然具有其中的值。
是的,就像所有其他寄存器具有相同的值一样(因为从函数返回而没有什么特别的事情发生)。
我应该在返回之前将这些寄存器清零,以便使用临时寄存器的未来函数可以从一个干净的平板开始吗?我在这里错过了什么吗?
无需将它们归零,它们可供您使用!您可以随意使用临时寄存器做任何您喜欢的事情,请记住,如果您调用另一个函数(或您自己的!),他们将执行相同的操作,因此您不能依赖于函数的值调用。将此与您需要保存和恢复的$s
寄存器进行对比,但是您可以(通常)依赖于为您执行相同操作的其他函数。这是calling convention的一部分。