2012-09-17 11 views

Odpowiedz

16

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 
+0

Rozumiem, ale coś w rodzaju funkcji zapisu pliku w INT 21H, programowanie jest możliwe. Poza tym możesz podać przykład ustawienia Przerwania. Byłoby bardzo pomocne Sir. –

+0

@ TotalNameImmersion: Tak, możesz zrobić cokolwiek chcesz w obsłudze przerwań. Dodano przykład konfiguracji handler'a. – gusbro

+0

Wielkie dzięki, Sir. Naprawdę pomógł. –

Powiązane problemy