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