在汇编语言中,我们有 DOS 中断 INT 21h,它不是硬件中断。
我想知道是否可以编写自己的中断并调用它。
如果可能,请建议链接或方法。
是的,您可以创建自己的中断处理程序并随时调用它。您需要设置中断向量(从地址 0000:0000 开始)以指向您自己的中断处理程序。
指向每个处理程序的指针占用 4 个字节(偏移量和段),因此,例如,如果您想为 INT 22h 设置中断处理程序,您将更新位置 0000:0088h 处的中断向量以指向您的处理程序。
检查Ralph Brown 的中断列表以检查未使用的中断号(至少一个未被硬件中断使用的中断号)。
下面是一个如何为中断 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