每当我将参数($a0
或$a1
)传递给我使用jal
的部分(标签)时,如果我使用临时寄存器(例如$t0
)是否重要)而不是保存寄存器,如($s0
)来保存或操纵该部分中的参数?
当该部分正在运行时,是否有使用一套而不是另一套的风险?
答案 0 :(得分:2)
如果“segment”表示函数调用,则应遵循here所述的MIPS调用约定。函数可以更改$ t0,...,$ t9的值,而无需在返回之前恢复它们。调用函数的代码必须假定函数返回时$ t0,...,$ t9值已更改。
答案 1 :(得分:1)
如果您正在从支持调用约定的某个地方(一个调用您的asm代码的C程序)实现函数调用。不,你不必让所有你自己的内部调用符合,只要假定那些内部被调用者在该上下文之外不可见。这意味着你无法从C调用它们,例如因为你选择不遵守该编译器和目标的C调用约定。只要您从外部呼叫的入口点,从外部符合标准,那么您就可以随心所欲。
优点和缺点是不符合要求可以提高性能,但符合性使寄存器管理和维护更容易。