每当我将参数 ($a0
或$a1
) 传递给我到达 using 的部分 (标签)jal
时,是否使用临时寄存器 (如$t0
) 而不是保存的寄存器 ( $s0
) 来保存或操作该部分中的参数是否重要?在该部分运行时使用一组而不是另一组有任何风险吗?
问问题
1216 次
2 回答
2
如果“段”是指函数调用,则应遵循此处描述的 MIPS 调用约定。函数可以更改 $t0,...,$t9 的值,而无需在返回之前恢复它们。调用函数的代码必须假定函数返回时 $t0,...,$t9 值已更改。
于 2014-02-03T19:31:13.357 回答
1
如果您正在从支持调用约定的某个地方(调用您的 asm 代码的 C 程序)实现函数调用。不,只要假定这些内部被调用者在该上下文之外不可见,您就不必使所有自己的内部调用都符合要求。这意味着您不能从 C 中调用它们,例如,因为您选择不符合该编译器和目标的 C 调用约定。只要您将从外部调用的入口点符合标准,那么您就可以做任何您想做的事情。
优点和缺点是不符合可以提高性能,但符合使注册管理和维护更容易。
于 2014-02-03T20:42:32.360 回答