Documente Academic
Documente Profesional
Documente Cultură
ÎNTRERUPERE = o acţiune a microprocesorului prin care acesta anunţă apariţia unui eveniment
ÎNTRERUPERE = un semnal electric transmis sistemului de calcul (SC) prin care acesta este
anunţat de apariţia unui eveniment particular.
2. lansarea în execuţie a unei rutine specializate, numită Rutină de Tratare a Întreruperii (RTI) sau
Handler de întrerupere, care deserveşte întreruperea;
a). externe (apăsarea unor combinaţii de taste, iniţierea sau terminarea unor operaţii de I/O);
b). interne (împărţirea la 0, tentativa de adresare a unei zone de memorie inexistente, tentativa de
execuţie a unei instrucţiuni având un cod inexistent, depăşirea capacităţii de reprezentare a unui
rezultat).
OBS: De obicei, după tratarea unei întreruperi externe programul se reia, după o întrerupere internă nu!
La apariţia unei întreruperi, SC trebuie, în ordine:
1) să determine tipul evenimentului care a generat întreruperea (intern, extern);
2) să afle care este cauza întreruperii;
3) să determine adresa RTI (rutinei de tratare a întreruperii);
Vectorizarea întreruperilor
• asocierea fiecărei întreruperi cu o locaţie de memorie dublucuvânt cu adresă fixă, unde se va memora
adresa far a RTI corespunzătoare întreruperii.
• acest tablou cu adrese se iniţializează în momentul încărcării sistemului de operare.
• in timpul funcţionării sistemului, este posibila modificarea unora dintre adrese (vezi Redirectarea
Intreruperilor)
CLASIFICAREA ÎNTRERUPERILOR
b). excepţii
cauze de tip intern » generate în mod automat
Ex.: împărţirea prin 0, încercarea de execuţie a unui cod de instrucţiune inexistent,
accesarea unei zone de memorie interzise (memory protection fault).
acele întreruperi ce pot fi iniţiate numai de către programator prin INT sunt întreruperi soft.
Întreruperi hardware
INT 8 este întreruperea hard de ceas (the system timer). Este recunoscută prin IRQ 0. Se
produce de 18.2 ori/secundă. Nu se deturnează de obicei, dacă e cazul se deturnează cea soft
(1Ch).
INT 70h - The Real-Time Clock Interrupt (IRQ 8). Această întrerupere este activată de CMOS de
1024 ori/secundă în vederea asigurării bunei funcţionări a ceasului real al sistemului.
INT 75h - întreruperea de unitate în virgulă flotantă (FPU Interrupt - IRQ 13) este o întrerupere
generată de coprocesorul matematic la orice situaţie de excepţie de tip virgulă flotantă (floating-
point exception).
Excepţii
i). depăşirea rezultatului (câtului) la împărţire atunci când utilizăm DIV sau IDIV;
mov ax,600
mov bh,2
(i) div bh ; se efectuează ax/bh, cu câtul în AL şi restul în AH
INT 1 (Single Step). Această întrerupere este iniţiată de procesor după fiecare instrucţiune
maşină, dacă flagul TF = 1.
INT 3 (Breakpoint interrupt). Această întrerupere este folosită de către depanatoare pentru
stabilirea de puncte de întrerupere a execuţiei (breakpoints) în cursul depanării programelor.
INT 4 (Overflow). Această întrerupere se emite când are loc o depăşire în cadrul unor operaţii
aritmetice. Mai precis, se emite când se execută instrucţiunea INTO (interrupt on overflow) şi OF
= 1. Dacă OF = 0, INTO se traduce în NOP (no operation).
INTO ↔ if (OF=1) PUSHF
TF:=0
IF:=0
CALL FAR 0000:0010h
O întrerupere software este invocată numai de către programator prin apelul instrucţiunii INT (cu
excepţia întreruperilor 05h, 19h, 1Bh).
întreruperi DOS (rutinele de tratare a acestor întreruperi sunt încărcate în memorie la pornire
din fişierele BDOS)
Întreruperi software
Principalele întreruperi BIOS sunt:
05h Se emite la apăsarea tastei PrintScreen; Instrucţiunea BOUND (ce verifică dacă valoarea unui index de
tablou se află între limitele specificate) apelează şi ea această întrerupere dacă condiţiile verificate nu sunt
îndeplinite.
10h Servicii de lucru cu ecranul, în mod text şi în mod grafic.
11h Returnează lista echipamentelor BIOS instalate în sistem
12h Returnează dimensiunea memoriei RAM
13h Pune la dispoziţie servicii de lucru cu harddisk-ul şi cu discheta
14h Permite accesul la porturile seriale
15h Pune la dispoziţie funcţii de acces la memoria extinsă, de citire a dispozitivelor de tip joystick ş.a.m.d.
16h Această întrerupere oferă servicii de manipulare a tastaturii
17h Această întrerupere oferă servicii de manipulare a imprimantei
18h Activează interpretorul ROM BASIC
19h Oferă servicii de încărcare a sistemului de operare
1Ah Servicii legate de ceasul sistem
1Bh Această întrerupere este apelată la apăsarea combinaţiei de taste <CTRL/BREAK>. Ca efect al RTI
corespunzătoare, în bufferul tastaturii se va pune CTRL-C ca următorul caracter. La citirea acestuia se va
invoca întreruperea 23h, care termină execuţia programului curent şi redă controlul sistemului de operare.
1Ch Această întrerupere este apelată de 18.2 ori / secundă de RTI 8. Rutina de tratare a acestei întreruperi
nu face nici o acţiune, lăsând posibilitatea utilizatorului de a scrie propria rutină de tratare. Aceasta este o
întrerupere utilizator.
Întreruperi software
Principalele întreruperi DOS sunt:
Principala întrerupere DOS este 21h. Ea înmagazinează practic întreaga componentă BDOS a sistemului de
operare DOS. Secţiunea următoare va fi destinată exclusiv acestei întreruperi.
20h Acesta este unul dintre apelurile care pot terminarea execuţia unui program
25h Permite citirea fizică de pe disc de la o anumită locaţie de memorie, începând cu un anumit sector, într-o
anumită locaţie de memorie.
26h Permite scrierea fizică pe disc dintr-o anumită locaţie de memorie, începând cu un anumit sector.
27h Termină execuţia programului curent lăsând rezidentă în memorie o parte sau întreg programul, astfel
încât această zonă de memorie să nu fie suprascrisă de un alt program.
28h Întrerupere DOS nedocumentată pentru partajarea timpului
2Eh (nedocumentată). Execută o comandă DOS ca şi când ar fi dată de la prompter.
2Fh Funcţiile acestei întreruperi se ocupă cu: multiplexarea resurselor sistemului, gestiunea memoriei
extinse (XMS) dacă aceasta există, controlul programelor TSR ş.a.m.d.
67h Această întrerupere grupează toate serviciile necesare gestiunii memoriei expandate dacă SC este
dotat cu o astfel de componentă hard.
33h Această întrerupere grupează toate funcţiile necesare lucrului cu mouse-ul.
Funcţiile DOS ale întreruperii 21h execută unele sarcini pe care le execută şi alte întreruperi.
(ex: funcţia 4ch a întreruperii 21h - terminarea unui program, este realizată şi de către întreruperea
20h)
O serie de numere de întreruperi sunt în prezent neocupate. Ele pot fi ocupate de către
utilizatori prin handlere proprii
INSTRUCŢIUNI SPECIFICE LUCRULUI CU
ÎNTRERUPERI
Instrucţiunea INT
INT n
provoacă activarea handlerului corespunzător întreruperii cu numărul n.
De multe ori, în aplicaţii este utilă simularea acestei instrucţiuni sau a unei părţi din ea. Iată o
secvenţă care realizează simularea ei.
AdRTI dd ... ;Presupunem că conţine adresa FAR a handlerului
--------
pushf ;Depune flagurile în stivă
push cs ;Segmentul adresei de revenire
lea ax,REV
push ax ;Offsetul adresei de revenire
xor ax,ax
push ax ;Se anulează toate flagurile pentru a anula şi TF şi IF
popf
jmp AdRTI ;Salt indirect la handler
REV: - - - - - - - -
INSTRUCŢIUNI SPECIFICE LUCRULUI CU
ÎNTRERUPERI
Instrucţiunea INTO
• dacă OF = 1, atunci este echivalentă cu INT 4 (se apelează handlerul întreruperii de depăşire
aritmetică);
• dacă OF = 0, atunci este echivalentă cu NOP (instrucţiunea inefectivă, nu a apărut depăşire).
De aceea, orice instrucţiune care ar putea provoca depăşire este indicat a se programa astfel:
add ax,b
into ;dacă se bănuieşte că operanzii adunării
;precedente ar putea conduce la depăşire.
- acţionează asupra flagului de întreruperi IF şi prin acesta indică procesorului cum să se comporte
la apariţia unei întreruperi.
Instrucţiunea CLI (Clear Interrupt) interzice procesorului să recunoască apariţia vreunei întreruperi.
Apare de obicei la începutul unui handler pentru a interzice perturbarea activităţii acestuia.
Instrucţiunea STI (Set Interrupt) permite procesorului să recunoască apariţia unei întreruperi. Are
rolul de a anula efectul instrucţiunii CLI.
De multe ori, în aplicaţii este utilă simularea acestei instrucţiuni sau a unei părţi din ea. Iată o
secvenţă care realizează simularea ei.
5) Se aloca, daca este posibil, memorie in plus fata de valorile din antet (pt heap)
6) Se initializeaza registrii astfel:
CS := CS relativ (valoarea din antetul EXE) + StartSeg
IP := IP iniţial (valoarea din antetul EXE)
SS := SS relativ (valoarea din antetul EXE) + StartSeg
SP := SP iniţial (valoarea din antetul EXE)
ES := DS := adresa de început a PSP
Structura unui COM
Fisierul COM contine imaginea binara a continutului ce va fi incarcat in memorie
dupa PSP
Nu are antet pe disc
Structura in memorie a unui program COM este:
Reguli pt scrierea unui program COM
Programul sa contina un singur segment (cod + date + stiva); deci directiva
assume trebuie sa aiba forma: assume DS:<nume>, CS:<nume>
Imediat dupa declaratia de segment trebuie sa apara o directiva
org 100h
pt. a indica faptul ca datele si instructiunile incep la adresa 100h; dupa org trebuie
sa apara numele etichetei de inceput a programului (cea care apare in declaratia
END de sfarsit)
Datele pot fi plasate oriunde intre instructiuni, dar programatorul trebuie sa izoleze
portiunile de date de cele de instructiuni cu ajutorul unor instructiuni de salt
corespunzatoare
Registrii de segment sunt initializati automat; programatorul nu trebuie sa-I
initializeze
Programul nu trebuie sa aiba elemente relocabile (operanzi nume de segmente)
Compilarea : TASM C
Link-editare: TLINK C/T
Transformare EXE in COM cu comanda EXE2BIN
Depanarea programelor EXE si COM