int (3)
















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 INT
int klcdk e
W06 apr int
Dtsch Arztebl Int 107 0152
Int
Fot wyk5 int
int
Fot wyk4 int
int
2013 w05 1 INT uzu dla?515 13z
New Matrix Int tests key
function is int
tech int 3 wyklad 5
MNL David Bowie Obituary int
WIlgotnoscBiomasy Introl biuletyn 1 08 int dobra praktyka
calculator int

więcej podobnych podstron