Assembler - Przerwania procesora
Przerwanie (ang. interrupt) - jest sygnałem dla procesora mówiącym mu, że ma czasowo przerwać aktualnie wykonywany proces i zająć się czymś innym. Bez przerwań procesor musiałby stale kontrolować wszystkie urządzenia zewnętrzne typu klawiatura, podczas gdy z przerwaniami procesor może wykonywać jakiś program i nadal ma możliwość reagować na wydarzenie zewnętrzne (np. naciśnięcie klawisza) od razu po jego wystąpieniu.
Procesor ma też instrukcję, która umożliwia wyłączenie przerwań - jeśli aktualnie wykonywany proces nie może być zakłócany. Istnieją jednak pewne specyficzne sytuacje, podczas których konieczna jest reakcja procesora - np. awaria sprzętu, pamięci czy odcięcie dopływu prądu - nie ważne jak istotny jest wykonywany aktualnie proces.
Do poinformowania procesora o tych ekstremalnych wypadkach służą tzw. non maskable interrupts (NMI - przerwania niemaskowalne).
Procesor posiada 256 różnych przerwań - można je podzielić na dwie grupy:
- Hardware interrupts - przerwania sprzętowe - omówione powyżej przerwania wywoływane przez inne części sprzętu jak np. klawiatura, zegar etc.
- Software interrupts - przerwania programowe - przerwania, które są wywoływane przez program - np. przerwanie 21h - przerwanie dos'a - zajmiemy się tym później. Również w przypadku przerwań programowych, po napotkaniu odwołania do przerwania (instrukcja INT) - procesor przerywa wykonywanie aktualnego programu i "przeskakuje" do procedury wywołanego przerwania.
No właśnie: Każde z przerwań - bez względu na to, czy jest to przerwanie programowe czy sprzętowe - posiada procedurę obsługi - procedurę, która jest wykonywana w momencie wystąpienia danego przerwania - w przypadku przerwania klawiatury będzie to odczytanie znaku i jego zapis do bufora klawiatury.
Procedury obsługi danego przerwania można oczywiście zmienić tak, żeby procesor po wystąpieniu przerwania wykonywał zamiast standardowej obsługi - np. część naszego programu. Na tym właśnie polega pisanie programów rezydentnych tzw. tsr'ów.
Po wykonaniu procedury obsługi danego przerwania procesor powraca do programu, który wykonywał przed wystąpieniem sygnału przerwania i wykonuje ten program.
Ważniejsze przerwania to:
1. Sprzętowe:
08H - zegar - przerwanie wykonywane 18.2 razy na sekundę;
09H - klawiatura - przerwanie wykonywane, gdy został naciśnięty lub puszczony jakikolwiek klawisz.
70H - RTC - zegar czasu rzeczywistego.
(Są to oczywiście tylko te przerwania, które nas - początkujących assemblerowców - będą interesować jako te, które się przydają:)).
2. Przerwania programowe:
05H - bios - print screen - przerwanie uaktywniane, gdy naciśnięty zostaje klawisz
10H - bios obsługa karty graficznej
16H - bios - obsługa klawiatury
20H - dos - zakończenie programu
21H - dos - główne przerwanie funkcji/procedur