|
Asembler Obsługa przerwań | |
Tym sposobem dotarliśmy do zagadnienia, przy którym wstawki asemblerowe okazują się chyba najbardziej przydatne. Obsługa przerwań w Pascalu co prawda jest zaimplementowana, ale za pomocą asemblera robi się to znacznie łatwiej. A co to takiego właściwie, ktoś zapyta, to przerwanie? Hmmm.. Jest to chwilowe wstrzymanie aktualnie wykonywanego programu i przekazanie sterowania do BIOS'u, który podejmie dalsze działania. Mówiąc inaczej, gdy procesor otrzyma sygnał przerwania, wykonywana jest procedura, która to przerwanie obsługuje. Po zakończeniu tej procedury program, który został na chwilę wstrzymany, rusza dalej. Przerwania wywoływane są bardzo często. Każde naciśnięcie klawisza, ruch myszką itp. powoduje zainicjowanie tzw. przerwania sprzętowego. Poza sprzętowymi istnieją jeszcze tzw. przerwania programowe, które są wywoływane przez programy i za ich pomocą możemy wymusić wykonanie jakiejś operacji przez BIOS lub DOS. Jak się zapewne przekonasz przerwania pełnią bardzo wiele ciekawych funkcji, ale jako że jest ich 256 (00h-FFh) niemożliwością jest omówienie ich wszystkich. Zwłaszcza, że jedno przerwanie może pełnić kilka funkcji. Np. przerwanie DOS'u (o numerze 21h) może obsługiwać pliki, bufor klawiatury itp. Dlatego ważne jest aby przy wywoływaniu przerwania zaznaczyć o jaką funkcję nam chodzi. Zaraz do tego dojdziemy. Przerwania sprzętowe oznacza się symbolem IRQ, natomiast programowe INT. Przerwania mogą wymagać od nas podania pewnych parametrów w określonych rejestrach, jak również mogą zwracać jakieś wartości, również poprzez rejestry. Do ich wywoływania służy instrukcja int numer. Na początek rozważmy pewien bardzo prosty przykład. Przerwanie o numerze 5 drukuje bieżącą zawartość ekranu tekstowego na drukarce. Jako, że akurat to przerwanie nie wymaga od nas podania żadnych parametrów wystarczy, że po prostu je wywołamy: asm int 5h end;Jeśli masz drukarkę, powinieneś zauważyć efekt działania tego programu, jeśli tylko pracujesz w trybie tekstowym (DOS'ie). Przy wywoływaniu przerwań, które pełnią wiele funkcji koniecznie musimy określić w rejestrze AH numer funkcji, o którą nam chodzi. Oprócz tego, jeżeli ta funkcja tego wymaga, podajemy parametry, np: asm mov ah, 2h mov dl, 33 int 21h end;Powyższy przykładzik wywoła funkcję numer 2h przerwania DOS'owego numer 21h, która ma to do siebie, że wyświetla na ekranie w miejscu gdzie aktualnie jest kursor znak o kodzie ASCII podanym w rejestrze DL. A to oznacza, że po uruchomieniu tego programiku ujrzymy wykrzyknik! Ciasteczka: int.zip - bardzo dokładny opis chyba wszystkich przerwań - Ralph's Brown interrupt list. (dostępne tylko online) | |
|
| |
| Copyright © 2000-2001 Bartosz 'SILV' Jaworski All rights reserved | |
