MIPS Syscalls和$ t寄存器

时间:2009-11-05 05:56:54

标签: assembly mips system-calls

MIPS寄存器有一个约定 - $ s寄存器将在子程序调用中保留,因此如果你的子程序修改它们,它应该将它们保存到堆栈中,而不保留$ t寄存器。

现在,系统调用是否可以修改$ t寄存器?在我有的模拟器中,它没有,但可能真正的机器有$ t寄存器改变吗?我问,因为我想知道 假设$ t寄存器在系统调用中保持不变是否安全。

2 个答案:

答案 0 :(得分:2)

除非记录在案,依靠任何调用保留特定寄存器是不明智的。

如果系统调用的doco声明它只修改了某些寄存器,那就是与你的代码签订合同。如果它违反了合同,那就是一个错误(尽管你可能更容易修复自己的代码而不是等待开发人员)。如果它没有说明任何类型,依赖它,约定或其他。

编写良好的调用将保留所有寄存器,这些寄存器并非专门用于返回信息。但是,如果您不确定,并且需要保留该寄存器,请在调用系统调用之前自行完成。

答案 1 :(得分:1)

  

现在,系统调用是否可以修改$ t寄存器?

是!

当然,您的操作系统的系统调用接口可能会保留所有这些寄存器。但是系统调用无法修改它们的技术原因并不存在。查看操作系统的文档。