1

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

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

我是否应该在返回之前将这些寄存器归零,以便将来使用临时寄存器的函数可以从头开始?我在这里错过了什么吗?

4

1 回答 1

3

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

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

我是否应该在返回之前将这些寄存器清零,以便将来使用临时寄存器的函数可以从头开始?我在这里错过了什么吗?

无需将它们归零,它们就在那里供您使用!您可以随意使用临时寄存器做任何您喜欢的事情,请记住,如果您调用另一个函数(或您自己的!),它们会做同样的事情,所以您不能依赖函数中的值来电。将此与修改时需要保存和恢复的寄存器进行对比$s,但您可以(通常)依赖其他功能为您做同样的事情。这是调用约定的一部分。

于 2011-10-06T20:41:40.550 回答