assembly - MIPS 系统调用和 $t 寄存器

标签 assembly mips system-calls

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

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

最佳答案

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

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

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

关于assembly - MIPS 系统调用和 $t 寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1678615/

相关文章:

mips - 尝试在 mips 汇编程序中执行非指令?

c++ - 如何在MIPS汇编程序中使用库?

Linux 系统调用写入 : Does the kernel guarantee data write sequence?

c - EOF是否设置了errno?

linux - 为什么我们需要在poll中调用poll_wait?

assembly - 汇编 cmp 指令到底比较什么?

c++ - 将十六进制代码格式化为 asm 代码

c++ - 将 C++ 转换为 MIPS 程序集

Python - 对表中的信息进行编码

mips - 为什么 MIPS 中有(加载字节无符号)和(加载字节)指令,但只有(存储字节)?