何时使用临时寄存器与保存的寄存器?

时间:2014-02-03 15:17:08

标签: assembly mips mars-simulator

每当我将参数($a0$a1)传递给我使用jal的部分(标签)时,如果我使用临时寄存器(例如$t0)是否重要)而不是保存寄存器,如($s0)来保存或操纵该部分中的参数? 当该部分正在运行时,是否有使用一套而不是另一套的风险?

2 个答案:

答案 0 :(得分:2)

如果“segment”表示函数调用,则应遵循here所述的MIPS调用约定。函数可以更改$ t0,...,$ t9的值,而无需在返回之前恢复它们。调用函数的代码必须假定函数返回时$ t0,...,$ t9值已更改。

答案 1 :(得分:1)

如果您正在从支持调用约定的某个地方(一个调用您的asm代码的C程序)实现函数调用。不,你不必让所有你自己的内部调用符合,只要假定那些内部被调用者在该上下文之外不可见。这意味着你无法从C调用它们,例如因为你选择不遵守该编译器和目标的C调用约定。只要您从外部呼叫的入口点,从外部符合标准,那么您就可以随心所欲。

优点和缺点是不符合要求可以提高性能,但符合性使寄存器管理和维护更容易。