是否可以在装配中进行自定义中断?

时间:2012-09-17 17:29:53

标签: assembly x86 interrupt

在汇编语言中,我们有DOS中断INT 21h,这不是硬件中断。

我想知道是否可以编写自己的中断并调用它。

如果可能,请建议链接或方法。

1 个答案:

答案 0 :(得分:16)

是的,您可以创建自己的interrput处理程序并随时调用它。 您需要设置中断向量(从地址0000:0000开始)指向您自己的中断处理程序。

指向每个处理程序的指针消耗4个字节(偏移量和段),因此,例如,如果要为INT 22h设置中断处理程序,则应更新位于0000:0088h的插入向量以指向处理程序。

检查Ralph Brown's interrupt list以检查未使用的中断号码(至少一个未被硬件中间使用的中断号码)。

下面举例说明如何为中断22h设置处理程序:

INITIALIZE: 
      XOR AX,AX
      MOV ES,AX
      CLI ; Disable interrupts, might not be needed if seting up a software-only interrupt
      MOV WORD PTR ES:[136], OFFSET INT22  ; setups offset of handler 22h
      MOV WORD PTR ES:[138], CS            ; Here I'm assuming segment of handler is current CS
      STI ; Reenable interrupts
      ; End of setup


INT22  PROC FAR
       ; Here goes the body of your handler
       IRET
INT22  ENDP