在Linux中什么是“ int 80h”?

问题描述

我想了解为什么我们使用int 80h以及在汇编代码调用它后会发生什么。就像这里:

int 80h
mov eax,1
int 80h

它怎么知道我想调用系统出口,而不仅仅是在eax中保存小数?

解决方法

INT是“中断”的程序集助记符。后面的代码指定了中断代码。 (Unix系统调用中断是80h / 0x80或十进制的128)在实模式(32位芯片上为16位)上运行时,中断由BIOS处理。在操作系统之上运行时,操作系统将通过在启动时加载的中断描述符表(IDT)处理中断。

如果CPU遇到一条INT指令,它将在BIOS的IVT或OS的IDT中查找中断,并为该特定中断代码找到附加的处理程序。然后它将跳转到IDT / IVT指定的那段代码,开始执行,并在到达处理程序中的特殊指令INT时跳回到调用IRET的代码,表示系统执行完中断。

某些中断处理程序使用寄存器来了解更多信息,就像将参数传递给高级语言一样。因此,当您将1写入EAX时,接收到中断的处理程序将看到EAX设置为1并了解所需的内容,例如您要使用的系统资源。