Tak, można utworzyć własną procedurę obsługi interrput i wywoływać ją w dowolnym momencie. Będziesz musiał ustawić wektor przerwań (który rozpoczyna się pod adresem 0000: 0000), aby wskazać własną procedurę obsługi przerwań.
Wskaźnik dla każdej obsługi zajmuje 4 bajty (przesunięcie i segment), więc jeśli na przykład chcesz ustawić obsługę przerwania dla INT 22h, zaktualizujesz wektor interrput w lokalizacji 0000: 0088h, aby wskazać program obsługi.
Aby sprawdzić nieużywany numer przerwania (co najmniej jeden, który nie jest używany przez interrput sprzętowy), należy sprawdzić wartość Ralph Brown's interrupt list.
Tu idzie przykład jak skonfigurować do obsługi przerwania 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
pokrewne: http://stackoverflow.com/questions/3392831/what-happens-in-an-interrupt-service -routine –