Wstawki assemblerowe
Przerwania - int
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.Można traktować przerwania również jako
funkcje dostępne w systemie, a rodzaj wykonywanej funkcji zależy od numeru
przerwania i od wartości rejestru AX.
Procesor 80286 posiada 256 różnych przerwań. Dzielą się one na sprzętowe i
systemowe. Każde przerwanie posiada kod obsłógi (tak jak funkcja w C++), który
jest wykonywany po wywołaniu przerwania, a po jego zakończeniu procesor powraca
do miejsca gdzie zostało przerwanie wywołane i kontynuuje działanie programu.
Można tutaj zobaczyć dużą analogię do funkcji które twożymy w C++.
W tym momencie potrzebny ci będzie spis przerwań, bo nie jest możliwe
zapamiętanie wszystkich podprogramów. Można go ściągnąć w dziale download. Jest
on bardzo bogaty, ale niestety po angielsku.
Przed wywołaniem przerwania musimy zapisać do rejestru AX jaka procedura danego
przerwania nas interesuje. W assembleże raczej nie stosuje się liczb dziesiętnych,
i będę operował na liczbach szesnastkowych. Zawsze one mają po cyfrach literę h lub
H.
Zajmijmy się obsługą myszy w dosie. Wymagany w czystym dosie jest sterownik myszy
(np: mouse.com, gmouse.com) a w okienku windowsa wszystko będzie OK.
Odpowiedzialne za to jest przerwanie 33h. Na początek trzeba sprawdzić czy w
systemie mamy jakąś mysz . Odpowiedzialny jest za to podprogram 0000h.
Musimy więc przenieść tę wartość do rejestru AX i wywołać przerwanie. Potrzebne
nam też będą dwie zmienne do odczytania wyników.
unsigned int status,przyciski.
asm
{
MOV AX,0000h
INT 33h
MOV status,AX
MOV przyciski,BX
}
Teraz w zmiennych mamy informacje czy jest mysz w systemie i jakiego rodzaju.
Żeby pokazać kursor na ekranie (w trybie tekstowym) wystarczy wywołać przerwanie
z podprogramem 0001h. Po jednokrotnym wywołaniu cały czas będzie widoczny kursor,
i automatycznie będzie się przesuwał.
asm
{
MOV AX,0001h
INT 33h
}
Ukrywa kursor podfunkcja 0002h.Odczytać położenie myszy i stan przycisków można
z podprogramu 0003h. Po wywołanu przerwania w rejestrach BX, CX, DX, otrzymamy
odpowiednio stan przycisków, położenie po x i y. Polecam poexperymentować.
Przerwaniami jest również bardzo łatwo osiągnąć tryby graficzne, nawet te
wysokie np 1024x768 w 256 kolorach. Polecam prześledzić sobie opis przerwań.
Wyszukiwarka
Podobne podstrony:
Suche tynki INTint klcdk eW06 apr intDtsch Arztebl Int 107 0152IntFot wyk5 intintFot wyk4 intint2013 w05 1 INT uzu dla?515 13zNew Matrix Int tests keyfunction is inttech int 3 wyklad 5MNL David Bowie Obituary intWIlgotnoscBiomasy Introl biuletyn 1 08 int dobra praktykacalculator intwięcej podobnych podstron