[ Pobierz całość w formacie PDF ]
.Inicjalizacja systemu przerwań wykorzystywanego w trybie chronionym.3.Przygotowanie nowych masek dla obsługiwanych przerwań sprzętowych.4.Odczyt danych konfiguracji układu 8254 i zapamiętanie ich do odtworzenia.5.Przeprogramowanie układu 8254.6.Przeprogramowanie innych wykorzystywanych układów.Zapamiętanie danych potrzebnych do powrotu do systemu operacyjnego DOSDo powrotu do DOS potrzebne jest zapamiętanie stanu wszystkich zmienianych przez nas rejestrów, głównie rejestrów segmentowych (CS, DS, ES, SS).Uruchomienie trybu chronionegoUstawienie bitu PM w rejestrze CR0 procesora powoduje uruchomienie trybu chronionego.Po wykonaniu tej czynności należy wykonać rozkaz skoku (JMP, lub CALL), który wyczyści kolejkę rozkazów procesora.Inicjalizacja rejestrów segmentowychW związku z zmianą interpretacji zawartości rejestrów segmentowych, aby możliwe było wykonywanie się oprogramowania w trybie chronionym należy:1.Załadować rejestr LDTR wskazaniem na deskryptor tablicy LDT (jeżeli jest wykorzystywana).2.Załadować rejestr IDTR wskazaniem na tablicę IDT.3.Załadować rejestr TR selektorem wskazującym na inicjalizacyjny segment TSS (jeżeli uruchomienie docelowego kodu odbędzie się rozkazem przełączenia zadania).4.Zainicjalizować rejestry selektorów wartościami wskazującymi na deskryptory segmentów (w przypadku uruchamiania docelowego oprogramowania rozkazem skoku od zadania, operacje mogą być pomijane).Aktywacja przerwańDo wykonania są następujące operacje:1.Odblokowanie przerwań na kontrolerach 8259 (zgodnie z przygotowanymi wcześniej maskami).2.Odblokowanie przerwania NMI.3.Odblokowanie przerwań procesora (STI).Uruchomienie programu w trybie chronionymProces ten można wykonać na wiele sposobów zaczynając od skoku bezpośredniego do segmentu kodu oprogramownaia, przez przełączenie zadania, a skończywszy na uruchomieniu kodu po wykonaniu procedury obsługi przerwania np.timera.Ważne jest aby wybrana metoda pokrywała się z przygotowanymi w czasie inicjalizacji danymi.W związku z tym jężeli uruchomienie ma się odbyć przez przełączenie zadania to wcześniej rejestr TR musi zostać załadowany wskazaniem na segment TSS (inicjalizacyjny).Jeżeli uruchomienie ma się odbyć przez skok do segmentu kodu, to muszą zostać najpierw przygotowane wartości wszystkich rejestrów segmentów
[ Pobierz całość w formacie PDF ]