Assembly 在MIPS汇编中,为什么要使用syscall?为什么';程序是否按照自动给出的指令运行?

Assembly 在MIPS汇编中,为什么要使用syscall?为什么';程序是否按照自动给出的指令运行?,assembly,mips,cpu-architecture,Assembly,Mips,Cpu Architecture,既然像'li$v0,4'这样的函数已经告诉程序打印字符串,为什么需要syscall syscall允许您访问系统库。您指出的指令,li$v0,4仅用于请求syscall执行相关操作 这是一种非常常见的编程模式。内核不允许直接访问物理设备,而是以最高权限级别运行,代理通过syscall、int 0x80、sysenter或您正在使用的体系结构和操作系统使用的任何机制访问设备。这有助于系统整体更加稳定 虽然您没有说明实际的平台/操作系统是什么,但可以使用一组标准的MIPS系统调用示例。如果您查看它,

既然像'li$v0,4'这样的函数已经告诉程序打印字符串,为什么需要syscall

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

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

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

  • 打印整数
  • 打印浮动
  • 双面打印
  • 打印字符串
  • 读整型
  • 读浮点数
  • 读两遍
  • 读取字符串
  • sbrk(内存分配)
  • 出口
  • 打印字符
  • 读字符
  • 打开文件、设备等
  • 从文件描述符读取(以前使用open打开)
  • 写入文件描述符(以前使用open打开)
  • 关闭文件、设备等

  • 一个平台可以具有设计者认为必要的尽可能多或尽可能少的系统库功能。您会发现Windows、Linux、BSD、Solaris等都是如此。

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

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

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

  • 打印整数
  • 打印浮动
  • 双面打印
  • 打印字符串
  • 读整型
  • 读浮点数
  • 读两遍
  • 读取字符串
  • sbrk(内存分配)
  • 出口
  • 打印字符
  • 读字符
  • 打开文件、设备等
  • 从文件描述符读取(以前使用open打开)
  • 写入文件描述符(以前使用open打开)
  • 关闭文件、设备等

  • 一个平台可以具有设计者认为必要的尽可能多或尽可能少的系统库功能。您会发现Windows、Linux、BSD、Solaris等都是如此。

    只将
    $v0
    设置为
    4
    。只有syscall调用的操作系统才会看到这一点,并为给定的函数执行任何必要的操作。很多时候,
    $v0
    恰好是
    4
    ,并且您没有试图打印字符串。@Jester好的,那么syscall基本上就是“打印到屏幕”?
    syscall
    调用操作系统。然后,操作系统查看
    $v0
    中的值,并找出您希望它执行的操作。MIPS或其他人可能定义了一些系统调用,但这是任意的,您可以实现它们来执行任何您想要的操作。它只是提供了一种将控制权传递给系统并让系统为您做些事情的方法。裸机不需要它们,你可以调用函数来做同样的事情。这只是将
    $v0
    设置为
    4
    。只有syscall调用的操作系统才会看到这一点,并为给定的函数执行任何必要的操作。很多时候,
    $v0
    恰好是
    4
    ,并且您没有试图打印字符串。@Jester好的,那么syscall基本上就是“打印到屏幕”?
    syscall
    调用操作系统。然后,操作系统查看
    $v0
    中的值,并找出您希望它执行的操作。MIPS或其他人可能定义了一些系统调用,但这是任意的,您可以实现它们来执行任何您想要的操作。它只是提供了一种将控制权传递给系统并让系统为您做些事情的方法。裸机不需要它们,您只需调用函数即可完成相同的任务。