x86 汇编/X86 中断
外观
< X86 汇编
中断是在每个系统上定义的特殊例程。这意味着一个系统上的中断可能与另一个系统上的中断不同。因此,在编写需要可移植的代码时,过分依赖中断通常不是一个好主意。
在现代操作系统中,程序员通常不需要使用中断。例如,在 Windows 中,程序员通过 Win32 API 进行操作。但是,这些 API 调用与内核交互,内核通常会触发中断来执行不同的任务。在旧的操作系统(特别是 DOS)中,程序员没有 API 可用,因此他们必须通过中断完成所有工作。
int arg
此指令发出指定的中断。例如
int 0x0A
调用中断 10 (0x0A (十六进制) = 10 (十进制))。
有 3 种类型的中断:硬件中断、软件中断和异常。
硬件中断是由硬件设备触发的。例如,当您在键盘上输入时,键盘会触发硬件中断。处理器会停止当前操作,并执行处理键盘输入的代码(通常将您按下的键读入内存中的缓冲区)。硬件中断通常是异步的 - 它们的发生与当时正在执行的指令无关。
还有一些软件中断,通常用于将控制权转移到操作系统内核中的函数。软件中断由指令 int 触发。例如,指令 "int 14h" 触发中断 0x14。然后,处理器停止当前程序,并跳转到处理中断 14 的代码。中断处理完成后,处理器将流程返回到原始程序。
异常是由正在执行的代码中的异常情况引起的,例如尝试除以零或访问受保护的内存区域。处理器会检测到此问题,并将控制权转移到处理程序以处理异常。此处理程序可能会在更改某些值后重新执行有问题的代码(例如,零被除数),或者如果无法执行此操作,则可能会终止导致异常的程序。
我们在本书的后面章节中讨论了高级细节,高级中断。
适用于 DOS 和相关系统 的中断列表:Ralf Brown 的中断列表。