Sunteți pe pagina 1din 8

DR. ING. FIZ.

IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

16. Stiva hardware, subrutine şi întreruperi

Definiţie: – Stiva este o structură de date care ocupă mai multe locaţii de memorie
aflate la adrese consecutive şi care este întotdeauna accesată printr-un singur capăt, denumit
VÂRFUL STIVEI .
– Registrul special indicator de stivă SP = Stack Pointer conţine întotdeauna adresa
ultimei locaţii ocupate, care constituie vârful stivei:

16.1. Păstrarea temporară a datelor

16.1.1. Introducerea datelor în stivă:

– Se face în perechi de câte 2 octeţi care sunt încărcaţi la adresele imediat inferioare
vârfului stivei, prin decrementarea registrului SP.
– Se poate introduce în stivă conţinutul registrelor pereche ale microprocesorului,
folosind instrucţiuni: PUSH <reg. pereche> ;

133
DR. ING. FIZ. IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

PUSH PSW (AF) perechea acumulator + ”flag”-uri;


PUSH B(C)
PUSH D(E) registrul mai puţin semnificativ
PUSH H(L) din pereche nu se mai specifică.

Exemplu: BC = ABCDH ; PUSH B (faza de execuţie a instrucţiuni)

= 1= ;
= ⇒ locația se încarcă cu valoarea ;
= 1= ;
= ⇒ locația se încarcă cu valoarea ;

Observaţii:
– Introducerea registrelor pereche în stivă are loc în 2 paşi consecutivi:
1. Se decrementează SP şi se încarcă M (SP) cu registrul mai semnificativ HIGH;
2. Se mai decrementează SP încă o dată şi se încarcă registrul LOW la M (SP).
– Decrementarea şi înscrierea la adresa SP sunt operaţii hardware executate automat
(fără intervenţia programului) |⇒ stivă hardware !
– Locaţiile inferioare vârfului stivei sunt suprascrise cu valorile nou introduse pe stivă.

134
DR. ING. FIZ. IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

16.1.2. Extragerea datelor din stivă:

– Se face în perechi de câte 2 octeţi care sunt preluaţi de la adresele din vârful stivei,
prin incrementarea consecutivă a registrului SP.
– Se poate extrage din stivă conţinutul registrelor pereche ale microprocesorului,
folosind instrucţiuni: POP <reg. pereche>;

POP H(L)
POP D(E) registrul mai puţin semnificativ
POP B(C) din pereche nu se mai specifică;
POP PSW (AF) perechea acumulator + ”flag”-uri.

– Întotdeauna prima valoare extrasă din stivă va fi ultima valoare introdusă anterior,
organizare de tip:
datorită accesului printr-un singur capăt: .
= LAST-IN, FIRST-OUT

Exemplu: POP B ; BC = ABCDH (faza de execuţie a instrucţiunii)

135
DR. ING. FIZ. IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

= ⇒ registrul C se încarcă cu valoarea ;


= 1= ;
= ⇒ registrul B se încarcă cu valoarea de la ;
= 1= ;

Observaţii:
– Valorile locaţiilor citite de pe stivă rămân nemodificate, dar nu mai sunt accesibile
datorită mutării indicatorului; ele vor fi suprascrise la următoarea introducere pe stivă.
– Datorită accesului de tip LIFO, registrele introduse în stivă se vor extrage
obligatoriu în ordine inversă .
– Folosind stiva se poate interschimba conţinutul a două registre pereche dacă sunt
extrase în ordinea introducerii lor: PUSH B
PUSH D
POP B |⇒ BC = vechiul DE
POP D |⇒ DE = vechiul BC
– Stiva ocupă locaţii cu adrese în ordine descrescătoare iar programul ocupă locaţii cu
adrese crescătoare pentru a lăsa între aceste 2 zone o singură parte de memorie neutilizată,
ori ca stivă ;
care să se poată folosi
ori ca program ∶

136
DR. ING. FIZ. IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

– Registrul PC = 0000H după RESET, dar registrul SP trebuie iniţializat prin


program pentru plasarea stivei la capătul memoriei: LXI SP,0FFFFH .
– Stiva se utilizează pentru salvarea comodă a valorii unor registre, fără a fi nevoie să
se reţină o adresă fixă de memorie pentru salvarea şi refacerea lor.

16.2. Stiva şi subrutinele

Definiţie: – Se numeşte SUBRUTINĂ (funcţie sau procedură în limbajele de


nivel înalt) o secvenţă de instrucţiuni ce constituie un subprogram scris o singură dată şi
executat de cel puţin două ori.

– Intrarea în sub-program (apelul subrutinei) se face cu instrucţiunea:


CALL <etichetă adresă> , iar ieşirea din sub-program (revenirea în programul
principal) cu instrucţiunea RET = RETURN ; pentru ca fluxul de execuţie al programului
principal să continue de fiecare dată cu instrucţiunea care urmează apelului CALL, adresa de
revenire se salvează automat în stivă.

Observaţii: – La execuţia instrucţiunii RET valoarea pe 2 octeţi aflată în vârful


stivei este interpretată implicit ca fiind adresă de revenire ; dacă valoarea a fost alterată,
întoarcerea nu se mai face corect:

– Dacă subrutina / funcţia / procedura este apelată o singură dată, este preferabilă
scrierea ei între instrucţiunile programului principal, pentru că apelul şi revenirea consumă
timp şi spaţiu de memorie !

137
DR. ING. FIZ. IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

– Necesitatea stivei la apelul de subrutine rezidă în faptul că trebuie salvate valori


diferite ale registrului PC, pentru ca programul să se întoarcă în puncte distincte şi nu mereu
în acelaşi loc:

138
DR. ING. FIZ. IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

16.3. Stiva şi întreruperile

Definiţie: – Se numeşte întrerupere un eveniment extern care la apariţia sa solicită


atenţia microprocesorului prin activarea unui semnal hardware ce produce un apel implicit de
subrutină pentru tratare.

– Întreruperea poate apărea între oricare 2 instrucţiuni ale unui program, când este
generată o instrucţiune de apel de subrutină prin hardware, fără a fi prezentă în program !

Observaţie:

– Nu există aşa-zise “întreruperi soft” ; acestea sunt doar simple apeluri de subrutine
scrise în program.

MASCABILE , când CPU poate să le dezactiveze global şi individual;


– Întreruperile
pot fi:
NEMASCABILE, când CPU nu poate să le refuze sau să le dezactiveze.

139
DR. ING. FIZ. IOAN ALEODOR-DANIEL – BAZELE FUNCȚIONĂRII ȘI PROGRAMĂRII CALCULATOARELOR

140

S-ar putea să vă placă și