2011-10-06 131 views
1

我正在使用MARS模拟器在MIPS组件中编写程序。我使用jal进行函数调用,然后在末尾使用jr $ra返回程序中的原始点。如何使用临时寄存器 - 返回后保存值?

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

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

回答

3

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

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

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

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

+1

“我应该在返回之前将这些寄存器清零,以便使用临时寄存器的未来函数可以从干净的平台开始?”不需要。你也应该注意到,当你的函数被调用时,临时寄存器的状态是未知的,它们通常不会包含零。 – markgz