【发布时间】:2016-09-12 02:31:37
【问题描述】:
我们很清楚中断分为三种类型:
- 内部中断
- 外部中断
- 软件中断
所以系统调用是一个软件中断。二进制形式的 MIPS SYSCALL 指令是 000000000000000000000000000001100
当 cpu 获取这条指令并执行它时会发生什么。在某些寄存器中这条指令之前传递的参数在这里无关紧要,关键问题是这条指令本身是做什么的,他的工作是什么,它在cpu内部是如何工作的。
只运行这条指令对机器的架构状态有什么影响?
这意味着受此系统调用(指令)影响的寄存器值,打开的标志,完成工作的步骤,如果它跳转到另一个内存位置(如中断向量表)它是如何找到那些内存位置的地址。
【问题讨论】:
-
我正要回答这个问题,但后来我意识到写它花了太长时间。因此,这里有两个关于在 Linux 中实现自己的系统调用的指南:tldp.org/HOWTO/Implement-Sys-Call-Linux-2.6-i386/x19.html、macboypro.wordpress.com/2009/05/15/…。基本思想是内核在内存中保留一个表,在编译时填充(并在运行时从磁盘复制)。中断 0x80 被视为 linux 系统调用。另一方面,Windows 主要通过 windows api 公开系统,并且系统调用要少得多。
-
MIPS 指令参考告诉你它做了什么?
-
我假设 MIPS 有一些中断处理程序表或其他东西,类似于其他架构(如 x86)所做的,并且 SYSCALL 触发其中一个处理程序。这都应该记录在 MIPS 架构手册中。您是否对手册以外的内容有具体问题,或者您只是希望有人为您查找并引用相关部分?这似乎不是一个很好的问题。如果您在解释手册内容时遇到困难,那可能是一个很好的问题。只需找到手册并在您的问题中包含指向它的链接即可。
标签: assembly mips cpu-architecture