[英]Using different registers in MIPS
我一直在交替使用某些寄存器(尤其是对于$ t0和$ s0),这似乎没什么大问题,可能是因为我目前正在处理一些非常简单的程序。
在MIPS中是否有使用不同寄存器的规则?
什么时候使用$ t0- $ t9或$ s0- $ s7或$ a0- $ a3或$ v0- $ v1?
MIPS是有意设计的,因此没有“特殊”寄存器。 只要您同意代码必须与之交互的任何其他软件功能(调用约定/ ABI),您就可以执行最有效的操作。
而且,有许多选择同样有效,因为通用寄存器是真正的通用寄存器。 堆栈指针只是一种软件约定。 没有push
指令隐式使用它。 使用$t0
代替$t3
临时不是更快或更佳。
该规则至少有一个例外: jal
将返回地址隐式写入$31
(链接寄存器)。 ( http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html )。 使用5位编码目标寄存器将使这5位脱离直接分支目标。
当然,平台的调用约定是围绕指令集中的任何隐式寄存器用法设计的,因此,当然,被调用的函数期望它们的返回地址为$31
,按照惯例,在MIPS上,其返回地址为$ra
(返回地址)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.