MIPS 寄存器有一个约定 - $s 寄存器将在子程序调用中保留,因此如果您的子程序修改了它们,它应该将它们保存到堆栈中,而 $t 寄存器则不保留。
现在,系统调用是否可以潜在地修改 $t 寄存器?在我的模拟器中,它没有,但真机是否可以更改 $t 寄存器?我问是因为我想知道 假设 $t 寄存器在整个系统调用中保持不变是否安全。
最佳答案
除非有记录,否则依赖任何保留特定寄存器的调用是不明智的。
如果系统调用的 doco 声明它只修改某些寄存器,那是与您的代码的契约(Contract)。如果它违反了该契约(Contract),那就是一个错误(尽管您在自己的代码中修复可能比等待开发人员更容易)。如果它没有说明任何此类内容,不要依赖它,无论是约定俗成还是以其他方式。
编写良好的调用将保留所有 不是专门用于返回信息的寄存器。但是,如果您不确定,并且需要保留该寄存器,请在调用系统调用之前自行完成。
关于assembly - MIPS 系统调用和 $t 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678615/