跳转到内容

x86 汇编/X86 中断

来自维基教科书,开放的书籍,开放的世界

中断是在每个系统上定义的特殊例程。这意味着一个系统上的中断可能与另一个系统上的中断不同。因此,在编写需要可移植的代码时,过分依赖中断通常不是一个好主意。

什么是中断?

[编辑 | 编辑源代码]

在现代操作系统中,程序员通常不需要使用中断。例如,在 Windows 中,程序员通过 Win32 API 进行操作。但是,这些 API 调用与内核交互,内核通常会触发中断来执行不同的任务。在旧的操作系统(特别是 DOS)中,程序员没有 API 可用,因此他们必须通过中断完成所有工作。

中断指令

[编辑 | 编辑源代码]

int arg

此指令发出指定的中断。例如

int 0x0A

调用中断 10 (0x0A (十六进制) = 10 (十进制))。

中断类型

[编辑 | 编辑源代码]

有 3 种类型的中断:硬件中断、软件中断和异常。

硬件中断

[编辑 | 编辑源代码]

硬件中断是由硬件设备触发的。例如,当您在键盘上输入时,键盘会触发硬件中断。处理器会停止当前操作,并执行处理键盘输入的代码(通常将您按下的键读入内存中的缓冲区)。硬件中断通常是异步的 - 它们的发生与当时正在执行的指令无关。

软件中断

[编辑 | 编辑源代码]

还有一些软件中断,通常用于将控制权转移到操作系统内核中的函数。软件中断由指令 int 触发。例如,指令 "int 14h" 触发中断 0x14。然后,处理器停止当前程序,并跳转到处理中断 14 的代码。中断处理完成后,处理器将流程返回到原始程序。

异常是由正在执行的代码中的异常情况引起的,例如尝试除以零或访问受保护的内存区域。处理器会检测到此问题,并将控制权转移到处理程序以处理异常。此处理程序可能会在更改某些值后重新执行有问题的代码(例如,零被除数),或者如果无法执行此操作,则可能会终止导致异常的程序。

进一步阅读

[编辑 | 编辑源代码]

我们在本书的后面章节中讨论了高级细节,高级中断

适用于 DOS 和相关系统 的中断列表:Ralf Brown 的中断列表

华夏公益教科书