【问题标题】:Using different registers in MIPS在 MIPS 中使用不同的寄存器
【发布时间】:2018-01-29 20:01:43
【问题描述】:

我一直在交替使用一些寄存器(尤其是对于 $t0 和 $s0),这似乎没有什么大问题,可能是因为我目前正在处理一些非常简单的程序。

在 MIPS 中使用不同的寄存器有什么规则吗?

我们什么时候应该使用 $t0-$t9 或 $s0-$s7 或 $a0-$a3 或 $v0-$v1 ?

【问题讨论】:

标签: assembly mips cpu-registers


【解决方案1】:

MIPS 被有意设计成没有寄存器是“特殊的”。只要您同意您的代码必须与之交互的任何其他软件功能(调用约定/ABI),您就可以做任何最有效的事情。

并且有许多种选择同样有效,因为通用寄存器是真正通用的;堆栈指针只是一个软件约定;没有隐式使用它的 push 指令。临时使用$t0 代替$t3 并没有更快或更好或其他任何方式。


这条规则至少有一个例外:jal 将返回地址隐式写入$31(链接寄存器)。 (http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html)。使用 5 位对目标寄存器进行编码会使这 5 位远离直接分支目标。

当然,平台的调用约定是围绕指令集中的任何隐式寄存器使用而设计的,因此被调用的函数当然期望它们的返回地址为$31,按照约定称为$ra(返回地址) MIPS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2011-10-17
    相关资源
    最近更新 更多