如何使用临时寄存器 - 返回后值是否保留?

发布于 2024-12-08 07:32:52 字数 225 浏览 4 评论 0原文

我正在使用 MARS 模拟器在 MIPS 汇编中编写程序。我使用 jal 进行函数调用,然后在其末尾使用 jr $ra 返回到程序中的原始点。

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

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

I am writing a program in MIPS assembly using the MARS simulator. I'm using jal to make a function call, then using jr $ra at the end of that to return to the original point in the program.

What I'm confused about is that the $t registers that I've used in my function still have the values in them after returning to the main program.

Should I be zeroing these registers out before returning so that future functions using the temporary registers can start with a clean slate? Am I missing something here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

っ左 2024-12-15 07:32:52

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

是的,就像所有其他寄存器具有相同的值一样(不会因为您从函数返回而发生任何特殊情况)。

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

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

What I'm confused about is that the $t registers that I've used in my function still have the values in them after returning to the main program.

Yes, just like all the other registers have the same values (nothing special happens just because you return from your function).

Should I be zeroing these registers out before returning so that future functions using the temporary registers can start with a clean slate? Am I missing something here?

No need to zero them, they were there for you to use! You're free to do whatever you like with the temporary registers, just keep in mind that if you call another function (or your own!) that they'll do the same thing, so you can't depend on the values across function calls. Contrast this with the $s registers that you need to save and restore if you modify, but you can (usually) depend on other functions doing the same thing for you. This is part of the calling convention.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文