在 MIPS 汇编中我们为什么要使用系统调用?为什么程序不按照自动给出的指令运行?

In MIPS Assembly why do we use syscall? Why doesn't the program operate on the instructions given automatically?

既然像'li $v0,4'这样的函数已经告诉程序打印一个字符串,为什么还需要系统调用?

syscall 允许您访问系统库。你指出的指令,li $v0,4只是用来请求syscall执行相关操作。

这是一种非常常见的编程模式。内核以最高特权级别运行,而不是允许直接访问物理设备,代理通过 syscallint 0x80sysenter 或用于您正在使用的体系结构和操作系统。这有助于系统整体更加稳定。

虽然您没有说明您的实际 platform/OS 是什么,但 MIPS 的一组标准系统调用示例可以是 found here。如果您查看它,您会发现它允许对您无法访问的设备进行许多操作:

  1. 打印整数
  2. 打印浮点数
  3. 打印双
  4. 打印字符串
  5. 读取整数
  6. 读取浮动
  7. 读双
  8. 读取字符串
  9. sbrk(内存分配)
  10. 退出
  11. 打印字符
  12. 读取字符
  13. 打开 - 文件、设备等
  14. 从文件描述符读取(之前用open打开)
  15. 写入文件描述符(之前用open打开)
  16. 关闭 - 文件、设备等

一个平台的系统库函数的数量可以根据设计者的需要而定。你会发现Windows、Linux、BSD、Solaris等都是如此