代码之家  ›  专栏  ›  技术社区  ›  ninomi

在MIPS中使用不同的寄存器

  •  0
  • ninomi  · 技术社区  · 7 年前

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

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

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Peter Cordes    7 年前

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

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


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

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