Sunteți pe pagina 1din 28

Curs 5

Moduri de adresare
Implementarea conceptului de subrutina
Unitatatea centrala de procesare
Moduri de adresare
 Moduri de adresare folosite in lucrul cu stiva:
 Adresarea indirecta prin registru cu
postincrementare
 Adresarea indirecta prin registru cu
predecrementare
 Registrul folosit implicit este registrul SP
(Stack Pointer)
Moduri de adresare
 Stiva=
O zona de memorie organizata pe principiul LIFO (Last Input First Output)
 Principiul LIFO=

ultimul intrat in stiva va fi primul element extras


 Mecanismul de lucru cu stiva:

 Adaugarea unui nou element in stiva se face prin plasarea acestuia


in varful stivei
 Extragerea unui element din stiva se face tot din varful stivei
 Gestiunea stivei conform principiului LIFO se face cu ajutorul unui
indicator(pointer) al varfului stivei
 Acest pointer este reprezentat de continutul registrului SP
Moduri de adresare folosite pentru
adresarea stivei
 Gestiunea stivei se face folosind cele doua
moduri de adresare
 Adresarea indirecta prin registru cu
postincrementare
 Adresare indirecta prin registru cu
predecrementare
 Continutul registrului SP indica in permanenta
varful stivei, adica contine adresa ultimului
element introdus in stiva
Moduri de adresare folosite pentru
adresarea stivei
 Valoarea initiala a lui SP=
Adresa de baza a stivei
 De obicei stiva creste spre adrese mai mici

 Astfel, la introducerea unui nou element in stiva:


 continutul registrului SP este decrementat cu 2
 Dupa aceasta, in spatiul astfel creat, se memoreaza elementul respectiv
 La scoaterea unui element din stiva:
 dupa extragerea acestuia din stiva
 Se incrementeaza continutul lui SP
 Obs. Cele doua moduri de adresare sunt utilizate implicit la adresarea
operanzilor din stiva
 La unele procesoare aceste moduri de adresare sunt utilizate in mod explicit
Moduri de adresare folosite pentru
adresarea stivei
 Adresarea indirecta prin registru cu postincrementare:
 Adresa efectiva a operandului este data de continutul
registrului folosit in adresarea indirecta prin registru
 Dupa extragerea operandului, continutul registrului
folosit in adresare se incrementeaza cu 2
 Obs. In cazul lucrului cu stiva:
 registrul de adresare folosit in adresare este registrul SP
 Acest registru este folosit in mod implicit
Moduri de adresare folosite pentru
adresarea stivei
 Exemplu:
 POP CX; 1. (CX)<-mem(SP)
2. SP<-SP+2
Se extrage din varful stivei un cuvant, de la adresa
data de continutul registrului SP, ce se incarca in
registrul CX;
Dupa aceasta, se incrementeaz continutul registrului
SP cu 2 pentru a indica noul varf al stivei
Moduri de adresare folosite pentru
adresarea stivei
Memoria

Elementul din
(SP) varful stivei
(SP)’
Noul varf al
stivei
Baza stivei

 Fig.1. Evolutia stivei la extragerea unui element din stiva


(executia instructiunii POP)
Moduri de adresare folosite pentru
adresarea stivei
 Adresarea indirecta prin registru cu predecrementare:
 continutul registrului folosit in adresare se decrementeaza
cu 2
 Adresa efectiva a operandului ce este astfel acesat este data
de continutul registrului folosit in adresarea indirecta prin
registru
 Obs. In cazul lucrului cu stiva:
 registrul de adresare folosit in adresare este registrul SP
 Acest registru este folosit in mod implicit
Moduri de adresare folosite pentru
adresarea stivei
 Exemplu:
 PUSH AX; 1. SP<-SP-2
2. mem(SP)<-(AX)
1.Se decrementeaz continutul registrului SP cu 2 pentru a
face loc in varful stivei pentru un nou element
SP indica noul varf al stivei
2. Se memoreaza in varful stivei un cuvant, la adresa data
de noul continut al registrului SP
La adresa astfel obtinuta se incarca continutul registrului
AX;
Aceste lucruri pot fi ilustrate ca in Fig.2.
Moduri de adresare folosite pentru
adresarea stivei
Memoria
0

Aici se depune
(SP)’ (AX)_L continutul lui AX
(AX)
(SP)
Ultimul
element
introdus in
Baza stivei stiva (inainte
de PUSH)

 Fig.2. Evolutia stivei la introducerea unui nou element in stiva


(executia instructiunii PUSH)
Moduri de adresare a porturilor
 In cazul in care porturile sunt vazute in spatiul
de adresare al memoriei (tehnica de lucru cu
porturile “memory-map I/O”):
 Se folosesc in adresarea porturilor toate modurile
de adresare folosite in lucrul cu memoria

 Obs. Porturile sunt vazute ca locatii de


memorie
Moduri de adresare a porturilor
 In cazul in care spatiul de adresare al porturilor
este separat de cel al memoriei:
 Se foloseste un subset al modurilor de adresare
folosite in adresarea memoriei
 De exemplu:
 La procesoarele x86 se folosesc:
 Adresarea directa: IN AL,adr_port; OUT adr_port,AL
 Adresarea indirecta prin registru:
 MOV dx, adr_port

 OUT dx,AL; IN AL,dx


Moduri de adresare folosite in
adresarea instructiunilor
 Aceste moduri de adresare sunt folosite pentru precizarea
adresei de salt in cazul instructiunilor de salt
 Instructiunile de salt sunt folosite in cazul in care trebuie
parasit modul secvential de executie al programului
 Folosind instructiunile de salt se pot executa salturi in program
 Instructiunile de salt constituie un mecanism prin care se alege
urmatoarea instructiune din zona de cod ca fiind diferita de cea
urmatoare
 In cazul executiei unei instructiuni de salt, se continua executia
programului cu o alta instructiune decat cea urmatoare.
 Adresa acestei instructiuni se specifica folosind mecanismul de
adresare al instructiunilor
Moduri de adresare folosite in
adresarea instructiunilor
 Mecanismul de adresare al instructiunilor este similar cu cel folosit pentru
adresarea datelor
 Adresa efectiva AE se calculeaza folosind un anumit mod de adresare
 Aceasta adresa se incarca in contorul de program (registrul PC sau IP la x86)

 Registrul contor de program contine in permanenta adresa urmatoarei


instructiuni ce urmeaza a fi executata
 In cazul executiei secventiale a programului, continutul acestui registru
este automat incrementat pentru a contine adresa urmatoarei instructiuni
din zona de cod
 Exceptia apare in cazul executiei instructiunilor de salt cand se incarca in
registrul contor de program adresa instructiunii unde se face saltul
 Aceasta adresa este calculata folosind modul de adresare specificat in
instructiune
Moduri de adresare folosite in
adresarea instructiunilor
 Pentru adresarea instructiunilor se utilizeaza
de regula un subset al modurilor de adresare
utilizate in adresarea datelor
 Avem urmatoarele moduri de adresare in
adresarea instructiunilor:
 1. adresarea secventiala: (PC)<-(PC)+n
 Unde n reprezinta numarul de octeti ai instructiunii
curente
 Acest mod de adresare este utilizat in mod implicit in
executia instructiunilor, exceptand instructiunile de salt
Moduri de adresare folosite in
adresarea instructiunilor
 2. Adresarea directa: (PC)<-AE;
 In acest caz in registrul PC se incarca adresa efectiva AE a
instructiunii la care se face saltul, adresa specificata in
instructiunea de salt
 Uneori, pentru marirea eficientei, se utilizeaza adresari
directe “scurte” in interiorul aceleasi pagini
 In cazul adresarii directe scurte se modifica doar partea cea
mai putin semnificativa a adresei efective
 In acest fel:
 se pot economisi octeti in reprezentarea codurilor instructiunilor
 Se pot executa mai rapid
Moduri de adresare folosite in
adresarea instructiunilor
 3. Adresarea relativa: (PC)<-(PC)+depl
 Depl- reprezinta un deplasament si reprezinta un operand al
instructiunii
 Deplasamentul este un numar cu semn, permitand deplasari
inainte si inapoi fata de instructiunea curenta (valoarea
curenta a registrului contor de program)
 Utilizarea adresarii relative permite crearea de coduri
relocabile de program
 Codul acestor programe poate fi amplasat oriunde in
memorie si executat de acolo fara modificari
 Acest lucru se explica prin faptul ca adresa de salt se
exprima prin valoarea ei relativa si nu depinde de adresa
absoluta unde va fi amplasata instructiunea
Moduri de adresare folosite in
adresarea instructiunilor
 4. Adresarea indirecta:
 (PC)<-(Reg)
 (PC)<-mem(AE)

 In registrul contor de program PC se incarca adresa


efectiva ce se afla:
 In registrul de adresare indirecta specificat
 In locatia de memorie a carei adresa efectiva se
specifica in instructiune
Moduri de adresare folosite in
adresarea instructiunilor
 5. Adresarea relativa cu index si deplasare:
 (PC)<-(PC)+(IX)+depl
 Unde:
 Depl - reprezinta un deplasament specificat in instructiune
 (IX) – reprezinta continutul unui registru index

 In registrul contor de program PC se incarca adresa


efectiva a instructiunii de salt ce se calculeazaastfel:
 Se adauga la continutul curent al registrului PC continutul
registrului index IX si deplasamentul specificat in
instructiune
IMplementarea conceptului de
subrutina
 Subrutina=
o secventa de program ce poate fi apelata dintr-
un alt punt al programului
Dupa terminarea executiei subrutinei se revine
in programul apelant la instructiunea imediat
urmatoare aceleia in care s-a facut apelarea
subrutinei
 Acest lucru poate fi reprezentat schematic astfel:
Implementarea conceptului de
subrutina
Program apelant

Subrutina

CALL k
k+1
RET

 Fig.2. Reprezentarea fluxului de control implicat in


mecanismul de lucru cu subrutina
Implementarea conceptului de
subrutina
 Pentru a implementa acest mecanism de
modificare a fluxului de control este necesar sa
se realizeze comutarea contextului de lucru
 Contextul de lucru este dat de valorile
variabilelor la un moment dat
 Exemplu de context de lucru:
 Continutul registrelor procesorului
 Valoarea indicatorilor de conditie (flag-urile)
Implementarea conceptului de
subrutina
 In momentul apelarii subrutinei:
 are loc salvarea contextului de lucru
 In momentul in care se revine in programul apelant:
 Se reface contextul de lucru
 Exemplu de context de lucru minimal:
 Continutul registrului contor de program PC
 In momentul apelarii subrutinei se realizeaza cel
putin urmatoarele actiuni:
 Se salveaza adresa de revenire (valoarea curenta a
registrului PC)
 Se incarca in registrul PC adresa efectiva a primei
instructiuni ce urmeaza a fiexecutata din subrutina
Implementarea conceptului de
subrutina
 Mecanismul folosit pentru salvarea registrului PC este
stiva.
 O instructiune se termina cu o instructiune de tip
RETURN (RET) prin care se revine in programul
apelant
 Revenirea in programul apelant se face la
instructiunea imediat urmatoare instructiunii de apel a
subrutinei (CALL)
 Acest lucru se face prin incarcarea in registrul PC a
adresei de revenire in programul apelat salvata in stiva
Implementarea conceptului de
subrutina
 In subrutina se pot face si salvari de date
 De exemplu, se salveaza continutul registrelor generale
de lucru ale procesorului ce sunt afectate in subrutina
 Aceste salvari de exemplu S1 si S2 trebuiesc urmate de
refacerea corecta a continutului acestor registre in
ordine inversa
 Aceste salvari a datelor se fac in stiva
 Pentru salvarea si refacerea corecta a datelor salvate in
stiva trebuie sa se respecte principiul LIFO de lucru cu
stiva
Implementarea conceptului de
subrutina
 Exemplu:
 Din programul principal se apeleaza subrutina SUB1
avand adresa de inceput b iar in interiorul acesteia se
apeleaza subrutina SUB2 avand adresa de inceput c.
 In subrutina SUB1 se fac salvarile S1 iar la sfarsitul
acesteia refacerile R1
 In subrutina SUB2 au loc salvarile S2 si refacerile R2

 Fluxul de control implicat de executia acestor subrutine


este ilustrat in Fig.3
Implementarea conceptului de
subrutina

b:
t1 S1
c:

t0 S2
d:
a:
t4 R2
t3 R1 Subrutina
SUB2
Subrutina
SUB1

Programul
principal
 Fig.3. Reprezentarea fluxului de control

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