Asembler x86/Przerwania

Z Wikibooks, biblioteki wolnych podręczników.

Zapewne wiesz już, że procesor wykonuje kolejne instrukcje z pamięci. Tu mogło by się nasunąć pytanie: w takim razie jak komputer reaguje na naciskanie klawiszy na klawiaturze, jeśli w kodzie mojego programu nie ma odpowiedzialnych za to instrukcji? Dobre pytanie. Procesor jest urządzeniem, które nadzoruje także inne urządzenia, wchodzące w skład komputera, takie jak np. dysk twardy.

Czym są przerwania ?[edytuj]

Twórcy architektury x86 przewidzieli konieczność niezależnego wykonywania pewnych zadań, których żąda sprzęt komputerowy. Aby umożliwić "przezroczystą" obsługę tych zadań, wymyślono system przerwań. Przerwanie zwykle wywołuje któryś z elementów komputera (np. klawiatura). W momencie, gdy procesor odbierze sygnał przerwania, automatycznie przestaje wykonywać kod programu i wchodzi w tzw. funkcję obsługi przerwania, która zawarta jest w systemie operacyjnym. Owa funkcja ma za zadanie zaspokoić żądania sprzętu, takie jak np. opróżnienie (w przypadku klawiatury) lub wypełnienie (w przypadku np. dysku) bufora danych tychże urządzeń, oraz inne reakcje, które przewidział producent sprzętu.

Rodzaje przerwań[edytuj]

Okazuje się jednak, że nie tylko urządzenia peryferyjne (z punktu widzenia procesora) mogą generować przerwania. Do generacji przerwań jest także sam procesor! Dzieje się to w dwóch wypadkach:

  1. w przypadku wystąpienia odpowiedniej instrukcji - wtedy mamy do czynienia z przerwaniem programowym
  2. w przypadku wystąpienia błędnej instrukcji, lub innego niewłaściwego zachowania się programu - wtedy mamy do czynienia z wyjątkiem procesora, czyli przerwaniem sygnalizującym nieprawidłowe działanie programu

Podsumowując, mamy trzy rodzaje przerwań:

  • sprzętowe (generowane przez kontroler przerwań 8259A)
  • programowe (generowane na skutek żądania programu). Wyróżniamy dwa rodzaje przerwań programowych: przerwania, których kod dostarczany jest przez system operacyjny (np. przerwanie 21h systemu DOS/Windows lub przerwanie 80h systemu Linux) oraz przerwania, których kod obecny jest na kości BIOSu (np. 13h, odpowiadające za niskopoziomowe funkcje dostępu do dysku)
  • wyjątki (generowane na skutek niewłaściwego działania programu lub przy wystąpieniu sytuacji, na którą system musi zareagować, np. konieczność wczytania strony pamięci z dysku)

Spis przerwań[edytuj]