gpt4 book ai didi

assembly - MIPS 汇编语言 - 临时寄存器与保存的寄存器

转载 作者:行者123 更新时间:2023-12-02 18:38:12 25 4
gpt4 key购买 nike

到目前为止,我一直在使用寄存器 $s0-$s9 以及与寄存器 $t0-$t9 相同的方式。我被告知并阅读了无数的论坛帖子和段落,在这里和谷歌上解释了差异,但没有编码示例。有人告诉我应该看到它与使用过程有关的差异,但我创建了无数涉及过程的场景,试图找出保存的寄存器与临时寄存器之间的差异,但我失败了。

我想看一个相对简单的示例,其中 $t0-9 寄存器的行为与 $s0-9 寄存器不同,因此会产生不同的值?

最佳答案

临时变量和保存变量的工作方式没有区别。区别在于它们的使用方式,或者更确切地说,它们应该如何使用。

MIPS 调用约定指定如何使用各种寄存器 - $v寄存器用于函数返回,$a寄存器用于函数参数,$t变量是临时调用者保存的寄存器,而 $s寄存器被调用者保存

被调用者和保存的调用者之间的区别如下:调用函数时,约定保证 $s返回后寄存器是相同的,而约定不保证 $t 的这一点寄存器。当然这意味着如果您想使用$s在例程中,您必须保存和恢复它们的值。例如,如果函数 A 使用寄存器 $t0$s0然后调用函数B,它必须保存寄存器$t0如果它想在函数 B 返回后使用它。功能B必须保存$s0在它可以开始使用它之前。

一个例子:

main:

li $s0 7
li $t0 7

jal myFunction

#$s0 guaranteed to equal 7
#$t0 value not guaranteed

This link看起来像是一些更深入的信息。

当然,所有这一切只是一个约定,因此只有当您和其他程序通过保存和恢复 $s 尊重约定时它才有效。寄存器,以便它们不会被函数调用覆盖。

关于assembly - MIPS 汇编语言 - 临时寄存器与保存的寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com