3

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

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

4

2 回答 2

2

除非有记录,否则依赖任何保留特定寄存器的调用是不明智的。

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

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

于 2009-11-05T06:01:09.433 回答
1

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

是的!

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

于 2009-11-05T06:11:27.587 回答