Întreruperi 8086

 

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:

  1. suspendarea programului în curs de execuţie
  2. lansarea în execuţie a rutinei de tratare a întreruperi respective
  3. reluarea execuţiei programului suspendat

 

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:

 

  1. Lista completă a tuturor întreruperilor şi a funcţiilor oferite de acestea se găseşte în Norton Guide. Este recomandată o parcurgere prealabilă (lecturare şi nu memorare) a tuturor întreruperilor şi funcţiilor. Nu se cerere memorarea tuturor întreruperilor şi a funcţiilor, dar studentul trebuie să ştie să caute în documentaţia electronică suportul pentru a rezolva un anumit tip de problemă.
  2. Unele întreruperi figurează în documentaţii ca “rezervate” sau “nedocumentate”. Este vorba de întreruperi pentru care proiectanţii lor (autorii rutinelor de tratare) nu au făcut publice specificaţii, fie că utilizarea lor poate duce la acţiuni neprevăzute, fie că acţiunea întreruperii respective se poate schimba de la o versiune la alta a sistemului de operare sau BIOS-ului calculatorului. Se va evita folosirea acestor întreruperi.
  3. Unele întreruperi s-ar putea să nu funcţioneze conform aşteptărilor în mediile Windows. Se va consulta bibliografie suplimentară în aceste cazuri (http://www.google.com).

 

Exemplu

Alt exemplu (afisari in baza 10)

Probleme