O întrerupere este un semnal
transmis sitemului de calcul care anunţă apariţia unui eveniment
“neobişnuit”.
Pot exista maxim 256 de întreruperi.
Fiecare întrerupere are asociată o rutină de cod numită
Rutină de Tratare a Întreruperii (RTI), care se execută la
apariţia întreruperii respective. Nu sunt definte toate cele 256 de
întreruperi (nu există rutine asociate cu toate cele 256 de întreruperi).
La apariţia unei întreruperi
au loc următoarele acţiunii:
Regulă: tratarea
apariţiei unei întreruperi (executarea rutinei asociate) se face doar
între două instrucţiuni maşină consecutive.
În funcţie de cauzele care
generează apariţia unui semnal de întrerupere, acestea se pot
clasifica în:
a) Întruperi
externe microprocesorului:
Ex: - apăsarea unei taste
- terminarea unei operaţii de
intrare/ieşire
b) Întreruperi
interne microprocesorului:
Ex: - împărţirea la zero
- tentativa de adresare a unei zone
de memorie care nu există
- tentativa de executarea a unei
instrucţiuni care are cod inexistent
În general (acest lucru se poate
evita) la apariţia unei întreruperi interne programul curent în curs de
execuţie se termină şi controlul este transmis sistemului de
operare.
În funcţie de nivelul la care
sunt definite întreruperile în cadrul sistemul de calcul acestea se pot
clasifica astfel:
a) Întreruperi hard. Rutinele
acestor întreruperi sunt scrise de proiectanţii de calculatoare şi se
află memorate în cipurile fizice ale calculatorului.
Ex:
-
întreruperea 00h – se generează ca urmare a unei
tentative de împărţire la 0
-
întreruperea 01h – se apelează după fiecare
instrucţiune maşină dacă este setat TF (TrapFlag = 1). Este
folosită de depanatoare gen Turbo Debuger.
-
întrerupera 02h – eroare de paritate la accesul memoriei
RAM. Spre exemplu, o rutină a acestei întreruperi se poate folosi ca
soluţie de ultim moment la caderi de tensiune, pentru salvarea întregii
memorii pe disc şi salvarea de datelor.
-
întreruperea 08h – întrerupere de “ceas”. Se generează
odată la 55 milisecunde. Este folosită pentru a programa anumite
acţiuni care trebuie să se desfăşoare periodic.
b) Întreruperi BIOS. Rutinele
acestor întreruperi sunt scrise de proiectanţii BIOS-ului calculatorului.
Ex:
-
întreruperea 10h – permite lucrul cu ecranul în mod grafic
(şi bineînţeles şi în mod text
-
întreruperea 11h – oferă informaţii despre
echipamentele instalate în sistem
-
întreruperea 12h – informaţii despre dimensiunea
memoriei RAM
-
întreruperea 13h – lucrul cu hardiscul şi cu unitatea
de discketă
c) Întreruperi DOS. Rutinele
acestor întreruperi sunt scrie de proiectanţii sistemului de operare (DOS
în cazul de faţă).
Ex:
-
întreruperea 20h – terminarea unui program.
-
întreruperea 21h – oferă toate funcţiile sistem
oferite de sistemul de operare DOS
-
întreruperea 33h – lucrul cu mouseul
d) Întreruperi definite de
programatori.
Rutinele unor întreruperi soft
(BIOS şi DOS) pot trata în mod diferenţiat întreruperea generată
în funcţie de o anumită valoare specificată în registrul ah.
Spunem că întreruperea respectivă oferă mai multe “servicii” sau
“funcţii”.
Exemplul 1:
Functia 02h a întreruperii 21h
permite afişarea unui caracter pe ecran. Întreruperea aşteaptă
în registrul ah codul funcţiei (02h) iar în registrul dl, codul ASCII al caracterului
pe care dorim să îl tipărim la iesirea standard. Modul de apel este:
mov ah, 02h
mov dl, ‘A’
int 21h
Efectul acestui grup de
instrucţiuni este afişarea carecterului ‘A’ la ieşirea standard.
Exemplul 2:
Funcţia 00h a întreruperii
10h permite schimbarea modului de lucru din mod text în mod graphic precum
şi a rezoluţiei ecranului. Întreruperea aşteaptă în
registrul ah codul funcţiei (00h), iar în registrul al noul mod de lucru
cu ecranul.
mov ah, 00h
mov al, 12h
int 10h
Efectul acestui grup de
instrucţiuni este schimbarea modului de lucru în mod grafic, la o
rezoluţie de 640x480 de pixeli şi mod de lucru cu 16 culori.
Observaţii:
Alt exemplu (afisari in baza 10)