Sunteți pe pagina 1din 4

Laborator 10 PLA

ntreruperi
Clasificare
Noiunea de ntrerupere presupune (aa cum i arat i numele) ntreruperea programului n
curs de execuie i transferul controlului la o anumit rutin specific, numit rutin de
tratare, dictat de cauza care a generat ntreruperea. Mecanismul prin care se face acest
transfer este, n esen, de tip apel de procedur, ceea ce nseamn revenirea n programul
ntrerupt, dup terminarea rutinei de tratare.
ntreruperile se pot clasifica dup mai multe criterii, rezultnd tipurile ilustrate n figura
urmtoare:

Figura 1. Clasificarea ntreruperilor


Diferena ntre ntreruperile hardware i software este dat de entitatea care genereaz
ntreruperea. Dac este provocat de un dispozitiv hardware, atunci este o ntrerupere
hardware, iar dac este provocat de un program, este o ntrerupere software.
Astfel, ntreruperile software apar ca urmare a execuiei unor instruciuni, cum ar fi
INT, DIV, IDIV.
ntreruperile hardware sunt interceptate de rutine speciale care se execut n mod
continuu cu scopul de a le detecta i de a efectua aciunile corespunztoare. Ele sunt de 2
tipuri:
ntreruperile hardware externe sunt provocate de semnale electrice care se
aplic pe intrrile de ntreruperi INT i NMI ale procesorului.
ntreruperile hardware interne apar ca urmare a unor condiii speciale de
funcionare a procesorului (cum ar fi execuia pas cu pas a programelor,
mprirea la 0);

Tabela de ntreruperi
ntr-un sistem pot exista maxim 256 de ntreruperi (nivele) distincte. Fiecare din aceste nivele
poate avea asociat o procedur de tip far, numit rutin de tratare. Adresele acestor rutine
sunt trecute ntr-o aa numit tabel de ntreruperi, aflat la adresele fizice 00000 - 003FFH,
ocupnd deci 1024 de octei. Fiecare nivel ocup 4 octei, primii reprezentnd offset-ul, iar
urmtorii adresa de segment a procedurii (Figura 2).
La apariia unei ntreruperi, au loc urmtoarele aciuni:
se salveaz n stiv registrele FLAGS, CS i IP (n aceast ordine);
se terg bistabilii IF (Interrupt Flag) i TF (Trap Flag flag de urmarire pas cu pas);
se furnizeaz procesorului un ntreg pe 8 bii (deci n gama 0 - 255), numit i vector de
ntrerupere, care identific nivelul asociat ntreruperii;
se execut un salt indirect intersegment la adresa de nceput a rutinei de tratare, prin
intermediul tabelei de ntreruperi.

Figura 2 Tabela de ntreruperi


Se observ c, exceptnd salvarea flagurilor i tergerea bistabililor IF i TF, secvena de
tratare a unei ntreruperi se reduce la un apel indirect de procedur far, prin intermediul tabelei
de ntreruperi.
Nivelele predefinite de ntrerupere sunt:
0 - depire la mprire (cauze posibile; instruciunile DIV sau IDIV);
1 - execuie pas cu pas (cauz posibil: bistabilul TF = 1);
2 - ntrerupere extern nedezactivabil (cauz posibil: semnal electric pe linia de
ntrerupere nedezactivabil NMI);
3 - execuie pana la o anumita linie (cauz posibil: instruciunea INT 3);
4 - depire (cauz posibil: instruciunea INTO).

Se mai pot cita ntreruperile hardware de la ceasul de timp real (nivelul 8) i de la tastatur
(nivelul 9).
ntreruperile software n gama 20H - 2FH sunt folosite de sistemul de operare DOS, iar cele n
gama 10H - 1AH de ctre subsistemul de intrri - ieiri BIOS.
O prezentare mai detaliat gsii la adresa:
http://www.bioscentral.com/misc/interrupts.htm
n Tech Help se gsete modul de utilizare:
Tech Topics -> ROM-BIOS Functions -> Interrupts and ROM-BIOS Services

ntreruperi software
Sunt rezultatul execuiei instruciunilor INT dintr-un program n curs de execuie. Acestea pot
fi vzute ca nite evenimente lansate de programator, care opresc imediat execuia
programului i se apeleaz rutina de tratare a ntreruperii. Aceste rutine sunt, de obicei,
incluse n sistemul de operare i vor determina realizarea aciunii corespunztoare. (de
exemplu afiarea unui ir pe ecran, sau execuia unui fiier). Un exemplu este INT 21h care
este o ntrerupere a serviciului DOS. Cnd rutina este apelat, aceasta va citi valoarea stocat
n ah, i va lansa rutina corespunzatoare.
n exemplul urmtor este invocat ntreruperea 21h.
:
mov
ax, 4c00h
int
21h
:
Aceste 2 linii cer sistemului de operare s ncheie execuia programului.
Numrul ntreruperii nu este suficient. ntreruperile se comport diferit n funcie de ce numr
de serviciu este apelat (de exemplu la ntreruperile 10h i 21h). n acest caz, numrul
serviciului este plasat n ah i este egal cu 4ch. (Observaie: AX=4c00h nseamn AH=4ch i
AL=00h).
Aplicaii:
1. Blocarea programului pn cnd este apsat un buton al mouse-ului (aplic1.asm).
.model small
.code
start:
mov AX,5
int 33h
cmp AX,1b
jl start

;5 in AX spune intreruperii 33
;sa preia informatiile despre butoanele mouse-ului
;apel intrerupere
;in ax este preluata starea butonului de mouse
;daca nu este nici un buton apasat se intoarce la
;eticheta start

;AX va fi 0 cat timp nu se apasa nici un buton


mov ah,004Ch
int 21h
end

;terminare program

2. Afisarea unui mesaj la o anumit poziie pe ecran (aplic2)


.model small
.data
mesaj db "BUTTON","$"
.code
start:
mov ax, dgroup
mov ds, ax
mov ah,02h
mov dh,0Bh
mov dl,22h

;serviciul pentru setarea pozitiei cursorului


;linia
;coloana

int 10h
; afisare mesaj
mov ah,09h
mov dx,offset mesaj
int 21h
mov ah, 4ch
int 21h
end

3. Realizai o aplicaie care s blocheze execuia programului pn la apsarea unui


buton de mouse n zona mesajului BUTTON.
4. Realizai o aplicaie care s afieze mesajul Ai reuit numai dac a fost apsat un
buton al mouse-ului pe zona ocupat de mesajul BUTTON din programul aplic2.asm
5. Realizai un meniu cu opiunile:
Afisare mesaj
Info
Iesire
care s execute aciunile corespunztoare la apsarea unui buton de mouse pe zona
corespunztoare opiunii.