Intrerupere = parasirea secventei naturale de instructiuni si predarea controlulului
unei rutine de tratare a intreruperii. Pot fi:
I. Intreruperi hard - permit tratarea evenimentelor generate deperifericele
unui sistem de calcul (tastatura, mouse, ceas de timp real, disc,etc). - intreruperi
mascabile - sunt accesate functie de starea bitului IF dinregistrul de stare
(flaguri) care poate fi setat/resetat cu instructiunispeciale (STI/CLI) si vin
pe linia INTR a procesorului. - intrerupere nemascabila (la pinul NMI) - care
nu depinde de bitul IFsi se utilizeaza la tratarea unor evenimente critice (de
ex. cadere tensiunealimentare) (la 8086 - INT 2 trateaza intreruperea nemascabila)
II. Intreruperi interne A. - sunt generate de procesor in cazul unor situatii
deosebite si avemmai multe nivele de intrerupere rezervate:
INT 00H - depasire la impartire (impartire la 0 - divide overflow) ; INT 01H
- rulare pas cu pas (single step), lansata dupa fiecareinstructiune cind T=1
; INT 02H - tip asociat intreruperii hard nemascabile ; INT 03H - breackpoint
; INT 04H - depasire superioara sau inferioara (overflow), lansata deinstructiunea
INTO daca OF=1 ;
B. intreruperi soft - generate de utilizator (IF=1 ca si la I) Astfel avem instructiunea
INT n - care genereaza o intrerupere imediatdupa executia sa. Tipul intreruperii
este codificat in codul instructiunii siinformeaza procesorul ce rutina sa execute
(vezi definitia). Astfel, asociereaintre tipul intreruperii si rutina aferenta
se face prin tabela vectorilor deintrerupere (de aceea intreruperile interne
la 8086 se mai numesc siintreruperi vectorizate). Aceasta tabela este initializata
la incarcarea SOde catre BIOS in memorie incepind cu adresa 0:0, ocupa 1 Ko
avƒnd 256 intrari(n din instructiune ocupa 1 octet) fiecare fiind un pointer
pe dublucuvintsi continind adresa rutinei de tratare a intreruperii de tipul
respectiv(tipul 0 .... tipul 255), la adresa mai mare se afla adresa de baza
asegmentului, iar la adresa mai mica offset-ul). Deci pentru gasirea locatieice
contine adresa rutinei, tipul furnizat in instructiune se inmulteste cu 4.
Ce se intimpla la sosirea unei intreruperi (fie hard, fie soft) ?
1) - procesorul salveaza in stiva, flag-le si adresa instructiunii urmatoare(segm+offset
in aceasta ordine), iar indicatorii IF si TF sunt resetati(pentru a nu fi acceptate
alte intreruperi).Structura stiva: _______|Flags | PUSHF|_______||Reg.sg |
CS|_______||Offset | IP|_______|___________ SP
2) se identifica adresa rutinei de tratare functie de tipul intreruperii,astfel:
- intreruperi hard- adresa este furniz.chiar de priferic- intreruperi "exceptionale"
- adresa generata de procesor- intreruperi vectorizate - adresa este data chiar
in codulinstructiunii si reprezinta un index de cautare in tabela vectorilor
deintrerupere (adresa=tip*4)
3) adresa astfel obtinuta se incarca in registrii CS si IP si printr-un CALLFAR
(intersegment) se da controlul rutinei
4) iesirea din rutina se realizeaza prin refacerea starii (ne referim la alteregistre
salvate pe stiva, eventual, in rutina utilizator) cu instructiuni detip POP,
si apoi IRET (care reincarca vechile valori IP si CS, si flag-le)care ma aduce
in program dupa "locul" in care a aparut intreruperea.
Nota: in cadrul rutinei utilizator de tratare a intreruperii pot activaintreruperile
cu STI, in caz contrar pot pierde cererile de intreruperimascabile venite pe
linia INTR.
Concluzii la intreruperi vectorizate (INT n)
INT n IRET SP<-SP-2 IP <- SP (SP)<- FLAGS SP <- SP+2 IF<-0 CS
<- SP TF<-0 SP <- SP+2 SP<-SP-2 FLAGS <- SP (SP)<-CS SP <-
SP+2 SP<-SP-2(SP)<-IP IP<-a4*N,4*N+1i CS<-a4*N+2,4*N+3i
A. Modalitati de incarcare a adresei rutinei de tratare in tabela vectorilor
de intrerupere
1. Functia DOS 25H
INPUT: AL=NUMAR INTRERUPERE UTILIZATOR AH=25H DS=ADRESA SEGMENT RUTINA TRATARE
DX=OFFSET RUTINA TRATARE 2. Instructiuni de lucru cu memoria (adresare absoluta)
; N=nr.intrerupere utilizator; XOR AX,AX MOV ES,AX ;TABELA ESTE LA 0:0 MOV ES:aN*4+2i,SEG
RUTI ;RUTI=nume rutina MOV ES:aN*4i,OFFSET RUTI..RUTI PROC FAR. IRET;RUTI ENDP
B. Redirectarea unei intreruperi BIOS
In unele aplicatii apare necesar ca o anumita intreruperi BIOS sa otratez cu
propria-mi rutina, caz in care se parcurg urmatorii pasi:
I. Salvarea adresei vechii rutine (2 moduri)
1. Functia DOS 35HINPUT: AL=NUMAR RUTINA AH=35H (cod functie)OUTPUT: ES=ADRESA
SEGMENT RUTINA VECHE BX=OFFSET RUTINA VECHE
2. Instructiuni cu memoria (adresare absoluta) - salvez intr-o variabila tipdublu
cuvint (DD) .DATAOLD_INT DD ?; .CODE XOR AX,AX MOV ES,AX MOV AX,ES:aN*4+2i MOV
WORD PTR aOLD_INT+2i,AX MOV AX,ES:aN*4i MOV WORD PTR aOLD_INTi,AX
II. Legarea noii intreruperi - analog cu A.
Intreruperi DOS
Sistemul de operare MS-DOS pune la dispozitia programatorului o seriede functii
de baza pentru:
- efectuarea operatiilor de intrare/iesire ;- lucrul cu fisiere ;- gestiunea
memoriei ;- controlul executiei programelor, etc.
Aceste functii pot fi accesate prin intermediul intreruperii cu tipul21H (numita
si intrerupere sistem). Functia solicitata si parametrii asociatiacesteia sunt
transmisi prin intermediul registrilor, rezultatul (daca exista)efectuarii functiei
fiind returnat in acelasi mod. O descriere detaliata atuturor functiilor existente
este oferita de utilitarul HELP.
Exemple: MOV ax,4c00h ; functia de revenire in sistem INT 21h ; apel functie
sistem
MOVAH,1 ;fct.citire caracter INT21H ;apel fct.sistem ;AL=cod ASCII caracter
citit
MOV ah,02h; functie afisare caracter MOV dl,'a' ; caracterul de afisat INT 21h
; apel functie sistem
Intreruperi BIOS
BIOS-ul (Basic Input Output System) este o componenta a sistemului deoperare
MS-DOS, rezidenta in PROM, ce contine urmatoarele elemente:
- programe de test pentru toate resursele din configuratia standard asistemului
; - un program incarcator a sistemului de operare de pe disc ; - proceduri pentru
tratarea cererilor de intrerupere externe provenitede la: - ceasul de timp real
(tip 8) ; - tastatura (tip 9) ; - disc flexibil (tip 14). - procedurile pentru
comanda si controlul executiei operatiilor deintrare/iesire (I/O) la nivel fizic
pentru toate echipamentele periferice dinconfiguratia standard. Executia programelor
de test se face la pornirea sistemului si implica:
- testarea microprocesorului ; - testarea si programarea unor circuite de I/O
( DMA (Direct MemoryAcces, timer) ; - determinarea configuratiei sistemului
; - testarea memoriei RAM ; - testarea sistemului de interuperi si initializarea
tabelei vectorilorde intrerupere ; - identificarea si realizarea legaturilor
cu PROM-urile externe placiide baza, incluse in interfetele pentru diferite
echipamente periferice. Daca executia programelor de test se incheie fara erori,
atunci se vaexecuta programul incarcator pentru sistemul de operare rezident
pe disc, dupacare se va da controlul acestuia. Accesul din programe utilizator
la procedurile continute in BIOS se faceprin intreruperi software. BIOS-ul reprezinta
de fapt o interfata intresistemul de operare (sau programul utilizator) si hardware-ul
calculatorului. BIOS-ul se afla pe un nivel mai "scazut" (low level)
decit nucleul DOS (adicamai apropiat de hardware) si de aceea rutinele DOS se
folosesc de functiileBIOS pentru a-si face "job-ul". Ca si functiile
DOS, inainte de apel, functiile BIOS cer incarcarearegistrilor generali cu parametri
aferenti functiei.
Principalele puncte de intrare puse la dispozitie de BIOS sunt:- nivele de intrerupere
rezervate (intreruperile 0,1,2,3,4 - vezi maisus !!) - nivele asociate intreruperilor
hard:
INT 08H - timer, intreruperea de timp real, lansata la fiecare 55ms,actualizeaza
ora si data ; INT 09H - intreruperea de tastatura ; INT 0AH - rezervata ; INT
0BH - intrerupere de retea ; INT 0CH - interfata seriala ; INT 0DH - rezervata
; INT 0EH - disk ; INT 0FH - rezervata ;
- servicii BIOS:
INT 10H - servicii video (pentru utilizarea terminalului grafic) ; INT 11H -
determinarea configuratiei sistemului ; INT 12H - determinarea capacitatii memoriei
RAM ; INT 13H - disc ; INT 14H - interfata seriala ; INT 15H - functii specifice
AT ; INT 16H - tastatura ; INT 17H - imprimanta ; INT 19H - intrare pentru apelul
incarcatorului sistemului de operarerezident pe disc (BOOTSTRAP) ; INT 1AH -
ceasul de timp real ;
Intreruperile BIOS utilizeaza informatii din zona de date BIOS, aflatain zona
0000:0400 - 0000:500 (echivalent, ca adresa fizica, cu 0040:0000 -0050:0000).
Exemplu:
Adresa Nr. oct. Continut
0:0400 2 Adresa de baza pentru interfata seriala COM1 ;0:0408 2 Adresa de baza
pentru interfata paralela LPT1 ;0:0410 2 Lista echipamentelor hardware instalate
(active), poate fi obtinuta si prin INT 11H ; 0:0413 2 memoria existenta in
K-octeti, similar cu INT 12H ;0:0449 1 modul video activ ;
Nota: Utilitarul HELP ofera informatii suplimentare despre BIOS(intreruperi,
zona de date BIOS).
Aplicatii:
1. Sa se realizeze o noua instructiune - prin intermediul uneiintreruperi utilizator
(de exemplu INT 60H) - care sa-mi permita comparareaa 2 variabile tip DD. Sa
se corupa si intreruperea 1 (pas cu pas) si sa seafiseze un mesaj care sa arate
trecerea prin rutina de tratare aferenta
Indicatii:
- se definesc cele 2 variabile in segmentul de date, ca si mesajeleaferente
dealtfel- se va lega noua intrerupere in tabela - se va utiliza instructiunea
de comparare pe siruri de caractere- se va afisa in PROGRAMUL PRINCIPAL un mesaj
privind rezultatulcompararii (mai mic, egal, mai mare) in functie de bitii CF
si ZF din reg.destare, folosind funtia DOS, 9- pentru generare INT 1 se va seta
bitul TF din registrul de flag-uri,(bitul 8), iar in rutina de tratare se va
pune din nou pe 0 !!
2. Sa se scrie un program care la apasarea tastei corespunzatoareinitialei unei
note va determina generarea notei respective (se va folosiprogramul SOUND.ASM).
3. Sa se scrie un program care sa afiseze data si ora curenta, folosindfunctiile
DOS 2Ah si 2Ch. Programul ramƒne in asteptarea unei taste. Programulva
citi pozitia cursorului inainte de afisarea orei curente astfel incƒtapasarea
unei taste diferite de ('Q','q') va determina afisarea noii ore inaceeasi pozitie.
Indicatii: - pentru afisarea in zecimal a octetilor cititi cu functiile 2AH
si 2CHse va apela rutina HEXZEC.ASM din fisierul HZEC.ASM. Punctul de intrare
inrutina se va declara cu directiva EXTRN, astfel: EXTRN HEXZEC:NEAR. Rutinaconverteste
cuvintul din AX si-l afiseaza la ecran.- pentru citirea tastei se va folosi
INT 16h, serviciul 0- pentru salvarea, respectiv setarea pozitiei cursorului
se va folosiINT 10H, serviciile 3, respectiv 2- se vor afisa mesajele aferente
cu functia DOS, 9- se vor prevedea separatori la afisarea datei si orei curente
cufunctia DOS, 2 4. Sa se realizeze un program care citeste configuratia sistemului,direct
sub TD si sa se interpreteze rezultatul
Indicatii:
- se va lansa HELP-ul rezident (HE1)- selectati ROM-BIOS functions si apoi INT
11H (gasiti locatia dememorie analoaga din zona de date BIOS) 5. Sa se realizeze
un program care sa afiseze un sir de caractere peecran la o anumita pozitie
a cursorului, pe care o veti specifica interactiv.
Indicatii:
- pentru stabilire atribut - "Screen Attributes" - ROM-BIOS functions
; INT 10H ; VIDEO SERVICE DETAILS ; - serviciul 0 pentru stergere ecran si stabilire
mod lucru (text) - serviciul 13h -pentru afisare sir la pozitia cursorului
6. Sa se scrie un program care sa citeasca de la tastatura un sir ASCII,sa faca
apoi conversia literelor mici la majuscule afisind in final rezultatulacestei
conversii ; se va folosi INT 16H pentru citirea sirului.