192
7. Wybrane techniki programowania
to wydzielony fragment pamięci operacyjnej (rys. 7.6) od adresu 00000H do maksimum 003FFH (1 KB). Ponieważ pełny adres logiczny (offset i segment) zajmuje 4 bajty, jest możliwych 256 różnych typów przerwań, którym są przypisane różne procedury obsługi. Odszukanie właściwego adresu procedury obsługi sprowadza się do pomnożenia przez 4 liczby określającej typ przerwania. Przerwanie NMI jest przypisane do typu 2. Wektor przerwań musi być zainicjowany, tzn. programowo załadowany odpowiednimi adresami. W mikrokomputerach klasy IBM PC/XT z mikroprocesorem 8086 przyjęto następujące standardowe przyporządkowanie przerwań zewnętrznych NMI - błąd parzystości pamięci operacyjnej,
INTR- przerwanie ze sterownika 8259A, w którym standardowo wejście przerywające 0 jest przyłączone do zegara, wejście 1 natomiast do klawiatury. Pozostałe sześć wejść umożliwia rozbudowę systemu przerwań.
Warunki generowania wewnętrznych przerwań procesora
Rozkaz INT n -przy czym n oznacza typ przerwania - powoduje wykonanie skoku do odpowiedniego podprogramu obsługi przerwania zgodnie z wektorem przerwań. Przy pracy pod kontrolą systemu operacyjnego MS-DOS rozkaz ten jest wykorzystywany do wywoływania podprogramów systemowych (zob. rozdz. 9).
Rozkaz INTO wytwarza typ 4 przerwania po wystąpieniu przepełnienia (zob. p. 5.2.6). *
Jeżeli przy realizacji rozkazu DFV lub IDIV wystąpił błąd, to procesor generuje przerwanie (typ 0).
Jeżeli znacznik TF = 1, to procesor po wykonaniu każdego rozkazu generuje przerwanie (typ 1), co pozwala na krokową pracę procesora wykorzystywaną głównie przy’ testowaniu programów.
Priorytety poszczególnych źródeł przerwań przedstawiono w tabl. 7.1. Skok do podprogramu obsługi przerwania powoduje automatyczne załadowanie na stos: rejestru znaczników, rejestrów CS i IP oraz wyzerowanie znaczników TF i IF.
Tablica 7.1. Priorytety głównych źródeł przerwań
p Źródło przerwania |
Priorytet |
DIV. IDIV, INT n. INTO |
Najwyższy |
NMI | |
INTR | |
Praca krokowa |
Najniższy |
Podprogram obsługi przerwania nie może być przerwany przez inne masko-walne przerwanie. Jeżeli jest to dopuszczalne lub wymagane, to znacznik 1F musi być ponownie ustawiony rozkazem STI. Przerwanie niemaskowalne NMI oraz przerwania wewnętrzne nie są blokowane i mogą przerwać dowolny podprogram. Podprogramy obsługi przerwań muszą być zakończone rozkazem IRET umożliwiającym powrót do przerwanego podprogramu oraz odtworzenie rejestrów CS, IP i znaczników. Przykładowa struktura programu z uwzględnieniem obsługi przerwań
WEKTOR PRZERWAŃ SEGMENT AT 0
; inicjacja adresu podprogramu obsługi dla NMI (typ 2)
7.2. Przerwania sprzętowe i programowe
powered by
Mi si9o 1
ORG 2*4 DD PODPRNMI
; inicjacja adresu podprogramu obsługi dla przerwania INTR typ 4
ORG 4*4
DD PODPR PRZEP
; inicjacja adresu podprogramu obsługi dla przerwania INTR typ 32 ; (pierwsze przerwanie użytkownika)
ORG 32*4 DD PODPR P 32
WEKTORPRZERWAN ENDS
STOS SEGMENT STACK
• • •
STOS ENDS
DANE SEGMENT
DANE
PROGRAMGLOWNY
PROGRAMGLOWNY PODPR PRZERWAŃ PODPR NMI
ENDS
SEGMENT
; główny program, w ogólnym ... ; przypadku realizowany w pętli
ENDS SEGMENT PROC FAR
PODPR NMI ENDP PODPR PRZEP
• ••
HLT
PROC FAR
; bez powrotu do programu ; przerwanego
IRET
PODPR PRZEP ENDP
PODPR P 32 PROC FAR
IRET
PODPR p 32 ENDP
PODPR PRZERWAŃ ENDS
W przedstawionym przykładzie założono, że wszystkie segmenty będą tłuma-£ż°ne przez asembler równocześnie, ponadto wektor przerwań został zdefiniowany ja-0 odrębny segment ładowany bezpośrednio do właściwego obszaru pamięci operacyjni rozpoczynający się od adresu 00000H.
Jeżeli podprogramy obsługi przerwań mają funkcjonować pod kontrolą syste-[n operacyjnego MS-DOS, to przedstawiona metoda inicjacji wektora przerwań nie Jesl możliwa. Adresy podprogramów obsługi przerwań muszą być załadowane Programowo do obszaru wektora przerwań. Przykładowa struktura programu WEKTOR NMI EOU WORD PTR ES:2*4 WEKTOR P 4 EOU WORD PTR ES:4*4