MIPS寄存器有一个约定 - $ s寄存器将在子程序调用中保留,因此如果你的子程序修改它们,它应该将它们保存到堆栈中,而不保留$ t寄存器。
现在,系统调用是否可以修改$ t寄存器?在我有的模拟器中,它没有,但可能真正的机器有$ t寄存器改变吗?我问,因为我想知道 假设$ t寄存器在系统调用中保持不变是否安全。
答案 0 :(得分:2)
除非记录在案,依靠任何调用保留特定寄存器是不明智的。
如果系统调用的doco声明它只修改了某些寄存器,那就是与你的代码签订合同。如果它违反了合同,那就是一个错误(尽管你可能更容易修复自己的代码而不是等待开发人员)。如果它没有说明任何类型,不依赖它,约定或其他。
编写良好的调用将保留所有寄存器,这些寄存器并非专门用于返回信息。但是,如果您不确定,并且需要保留该寄存器,请在调用系统调用之前自行完成。
答案 1 :(得分:1)
现在,系统调用是否可以修改$ t寄存器?
是!
当然,您的操作系统的系统调用接口可能会保留所有这些寄存器。但是系统调用无法修改它们的技术原因并不存在。查看操作系统的文档。