laborator10
DESCRIPTION
lab 10TRANSCRIPT
Laborator 10 PLA
Laborator 10 PLAntreruperiClasificare
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 ntreruperilorDiferena 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 ntreruperintr-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 ntreruperiSe 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 ;5 in AX spune intreruperii 33 ;sa preia informatiile despre butoanele mouse-uluiint 33h ;apel intreruperecmp AX,1b ;in ax este preluata starea butonului de mousejl start ;daca nu este nici un buton apasat se intoarce la
;eticheta start;AX va fi 0 cat timp nu se apasa nici un butonmov ah,004Ch ;terminare program
int 21h
end2. 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 ;serviciul pentru setarea pozitiei cursorului
mov dh,0Bh ;linia
mov dl,22h ;coloana
int 10h
; afisare mesaj
mov ah,09h
mov dx,offset mesaj
int 21h
mov ah, 4ch
int 21h
end3. 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.