Sunteți pe pagina 1din 313

U

s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
CUPRINS
CUPRINS................................................................................................................. 1
1. INTRODUCERE N SISTEMELE DE PROCESARE A INFORMAIEI .. 4
1.1. CALCULATORUL DISPOZITIV UNIVERSAL DE CALCUL _____________ 8
1.2. STRUCTURA UNUI SISTEM DE CALCUL. PRINCIPII DE BAZ_________ 15
1.3. EXERCIII I PROBLEME _________________________________________ 23
2. REPREZENTAREA INFORMAIILOR. CONVERSII DE VALORI
NTRE SISTEME DE NUMERAIE. ARITMETIC BINAR. OPERAII
LOGICE ................................................................................................................ 25
2.1. REPREZENTAREA INFORMAIILOR N SISTEMELE DE CALCUL ______ 25
2.1.1. REPREZENTAREA INFORMAIILOR NUMERICE FR SEMN. SISTEME DE
NUMERAIE _____________________________________________________________ 29
2.1.2. REPREZENTAREA NUMERELOR CU SEMN _____________________________ 33
2.1.3. REPREZENTAREA NUMERELOR N VIRGUL FLOTANT. FORMATUL IEEE
754 ______________________________________________________________________ 36
2.1.4. REPREZENTAREA INFORMAIILOR ALFANUMERICE STANDARDUL ASCII
_________________________________________________________________________ 40
2.1.5. REPREZENTAREA INFORMAIILOR MULTIMEDIA______________________ 41
2.2. CODIFICAREA INFORMAIEI _____________________________________ 43
2.2.1. CODURI ZECIMALE__________________________________________________ 43
2.2.2. CODURI PENTRU DETECTAREA I CORECTAREA ERORILOR____________ 44
2.3. OPERAII LOGICE PE BII. FUNCII LOGICE. _______________________ 45
2.3.1. FUNCIA I LOGIC (AND)_____________________________________________ 45
2.3.2. FUNCIA SAU LOGIC (OR)____________________________________________ 46
2.3.3. FUNCIA NOT LOGIC ________________________________________________ 46
2.3.4. FUNCIA SAU EXCLUSIV (XOR)_______________________________________ 46
2.4. EXERCIII I PROBLEME _________________________________________ 47
3. STRUCTURI LOGICE DIGITALE. TRANZISTORI. PORI LOGICE.
STRUCTURI LOGICE COMBINAIONALE. UNITATEA ARITMETICO-
LOGIC................................................................................................................ 50
3.1. TRANZISTORUL _________________________________________________ 50
3.2. PORI LOGICE___________________________________________________ 53
3.2.1. INVERSORUL CMOS _________________________________________________ 53
3.2.2. POARTA NOR (NOT OR) ______________________________________________ 53
3.2.3. POARTA NAND (NOT AND) ___________________________________________ 54
3.3. STRUCTURI LOGICE DIGITALE____________________________________ 56
3.3.1. STRUCTURI LOGICE (CIRCUITE) COMBINAIONALE ___________________ 56
3.3.2. PROIECTAREA UNEI UNITI DE CALCUL ARITMETICO-LOGIC _________ 65
3.4. EXERCIII I PROBLEME _________________________________________ 70
4. ELEMENTE PRIMARE DE MEMORARE. REGITRII. MEMORII.
AUTOMATE CU NUMR FINIT DE STRI .................................................. 78
4.1. STRUCTURI LOGICE SECVENIALE _______________________________ 78
4.1.1. BISTABILUL R-S_____________________________________________________ 79
4.1.2. BISTABILUL DE TIP D (DELAY)._______________________________________ 81
4.1.3. REGITRII. __________________________________________________________ 82
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
2 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
4.1.4. MEMORIA __________________________________________________________ 85
4.2. AUTOMATE SECVENIALE I PROGRAMABILE_____________________ 92
4.3. EXERCIII I PROBLEME ________________________________________ 100
5. MODELUL ARHITECTURAL VON NEUMANN. COMPONENTE DE
BAZ. PRINCIPIILE PROCESRII INSTRUCIUNILOR....................... 104
5.1. COMPONENTELE DE BAZ ALE MODELULUI ARHITECTURAL VON
NEUMANN ________________________________________________________ 104
5.2. PRINCIPIILE PROCESRII INSTRUCIUNILOR _____________________ 108
5.2.1. CICLUL INSTRUCIUNII_____________________________________________ 109
5.2.2. TIPURI DE INSTRUCIUNI ___________________________________________ 112
5.2.3. CEASUL PROCESORULUI____________________________________________ 114
5.3. EXERCIII I PROBLEME ________________________________________ 115
6. LC-3 ARHITECTURA SETULUI DE INSTRUCIUNI. CALEA
FLUXULUI DE DATE. ORGANIZAREA MEMORIEI LA LC-3 [Patt03]. 119
6.1. LC-3 ARHITECTURA SETULUI DE INSTRUCIUNI_________________ 119
6.1.1. LC-3 ISA: ORGANIZAREA MEMORIEI I SETUL DE REGITII GENERALI _ 120
6.1.2. LC-3 ISA: FORMATUL INSTRUCIUNII I SETUL DE INSTRUCIUNI _____ 121
6.1.3. LC-3 ISA: APLICAII REZOLVATE ____________________________________ 141
6.2. FLUXUL DE DATE LA LC-3 ISA___________________________________ 145
6.3. EXERCIII I PROBLEME ________________________________________ 148
7. LIMBAJUL DE ASAMBLARE AFERENT ARHITECTURII LC-3.
ASAMBLORUL. ETAPELE GENERRII CODULUI MAIN. TABELA
DE SIMBOLURI................................................................................................. 156
7.1. MOTIVE PENTRU A PROGRAMA N LIMBAJ DE ASAMBLARE _______ 156
7.2. SINTAXA ASAMBLOR LC-3 [Patt03] _______________________________ 158
7.2.1. CORESPONDENA LIMBAJ DE ASAMBLARE LC-3 LIMBAJ MAIN
SPECIFIC LC-3 ISA _______________________________________________________ 162
7.2.2. APELURI SISTEM___________________________________________________ 163
7.3. PROCESUL DE ASAMBLARE ETAPELE GENERRII CODULUI MAIN
___________________________________________________________________ 164
7.3.1. GENERAREA TABELEI DE SIMBOLURI (TS) ___________________________ 165
7.3.2. OBINEREA CODULUI N LIMBAJUL MAIN_________________________ 166
7.3.3. CREAREA LEGTURILOR NTRE MODULE, NCRCAREA I LANSAREA N
EXECUIE ______________________________________________________________ 169
7.4. EXERCIII I PROBLEME ________________________________________ 170
8. NTRERUPERI SOFTWARE LA NIVEL LOW. APELURI DE
SUBRUTINE DIRECTE I INDIRECTE. REVENIRI. SALVAREA I
RESTAURAREA REGITRIILOR. STRATEGIILE CALLER-SAVE
RESPECTIV CALLEE SAVE........................................................................ 177
8.1. NTRERUPERI. DEFINIIE. CLASIFICARE __________________________ 177
8.2. NTRERUPERI SOFTWARE LA NIVEL LOW INSTRUCIUNILE TRAP _ 178
8.2.1. RUTINELE DE TRATARE AFERENTE APELURILOR SISTEM LA LC-3 ISA _ 179
8.2.2. SALVAREA I RESTAUREA REGITRILOR N CAZUL RUTINELOR DE
SERVICIU_______________________________________________________________ 190
8.3. SUBRUTINE ____________________________________________________ 192
8.3.1. MECANISMUL DE APEL SUBRUTINE I REVENIRE ____________________ 193
8.3.2. TRANSFERUL PARAMETRILOR CTRE I DE LA SUBRUTINE___________ 198
8.3.3. SALVAREA I RESTAUREA REGITRILOR N CAZUL SUBRUTINELOR.
RUTINE (FUNCII) DE BIBLIOTEC _______________________________________ 199
8.4. EXERCIII I PROBLEME ________________________________________ 200

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 3
9. STIVA STRUCTUR. PRINCIPIU DE FUNCIONARE. OPERAII
AFERENTE (PUSH & POP).............................................................................. 208
9.1. STRUCTURA DE DATE DE TIP STIV _____________________________ 208
9.1.1. PRINCIPIU DE FUNCIONARE _______________________________________ 208
9.1.2. IMPLEMENTARE HARDWARE I SOFTWARE. _________________________ 208
9.1.3. OPERAII AFERENTE (PUSH & POP) __________________________________ 211
9.1.4. MODUL DE LUCRU PRIN NTRERUPERI HARDWARE. __________________ 214
9.2. OPERAII ARITMETICE FOLOSIND STIVA _________________________ 222
9.3. CONVERSIA INFORMAIEI DIN FORMAT ASCII N ZECIMAL ________ 225
9.3.1. CONVERSIA DIN ASCII N BINAR ____________________________________ 226
9.3.2. CONVERSIA DIN ZECIMAL N ASCII __________________________________ 230
9.4. EXERCIII I PROBLEME ________________________________________ 233
10. FACILITI ALE MAINII PENTRU IMPLEMENTAREA N
HARDWARE A FUNCIILOR DIN PROGRAMELE DE NIVEL NALT.
STIVA DE DATE AFERENT FUNCIILOR.............................................. 237
10.1. OBINEREA CODULUI OBIECT PENTRU O ARHITECTUR DAT ___ 237
10.1.1. DESCRIEREA COMPONENTELOR UNUI COMPILATOR ________________ 238
10.1.2. ETAPELE PARCURSE PENTRU RECOMPILAREA INSTRUMENTELOR
SIMPLESCALAR 3.0 [Flo05] ________________________________________________ 246
10.2. IMPLEMENTAREA GESTIUNII STIVELOR DE DATE ASOCIATE
FUNCIILOR C _____________________________________________________ 249
10.2.1. SUBPROGRAME. GENERALITI. FUNCII C_________________________ 249
10.2.2. STIVA DE DATE AFERENT FUNCIILOR [Patt03, Vin03] _______________ 256
10.3. EXERCIII I PROBLEME _______________________________________ 260
11. INTRODUCERE N RECURSIVITATE. COMPARAIA DINTRE
RECURSIV I ITERATIV N ALEGEREA ALGORITMULUI DE
REZOLVARE A PROBLEMELOR. AVANTAJE / DEZAVANTAJE........ 265
11.1. SCOP I COMPETENE NECESARE_______________________________ 265
11.2. RECURSIVITATEA _____________________________________________ 265
11.2.1. STIVA DE DATE ASOCIAT UNEI FUNCII [Patt03] ____________________ 266
11.3. IMPLEMENTAREA RECURSIVITII LA NIVELUL STIVEI DE DATE _ 274
11.4. TIPURI DE FUNCII RECURSIVE. ELIMINAREA RECURSIVITII ___ 277
11.5. EXERCIII I PROBLEME _______________________________________ 278
12. POINTERI I TABLOURI. TRANSFERUL PARAMETRILOR PRIN
REFERIN. POINTERI SPRE FUNCII .................................................... 282
12.1. INTRODUCERE ________________________________________________ 282
12.2. SEMNIFICAIE I DECLARARE__________________________________ 284
12.3. ALOCAREA I ACCESAREA DE VARIABILE. LEGTURA DINTRE
NIVELUL HIGH I LOW VZUT PRIN INTERMEDIUL MODURILOR DE
ADRESARE ________________________________________________________ 287
12.4. TRANSFERUL PARAMETRILOR PRIN REFERIN LA APELUL
FUNCIILOR_______________________________________________________ 290
12.5. POINTERI SPRE FUNCII________________________________________ 295
12.6. TABLOURI. RELAIA DINTRE POINTERI I TABLOURI_____________ 302
12.6.1. FUNCII CU PARAMETRI DE TIP TABLOU (VECTOR)__________________ 305
12.7. EXERCIII I PROBLEME _______________________________________ 307
BIBLIOGRAFIE................................................................................ 311


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
1. INTRODUCERE N SISTEMELE DE
PROCESARE A INFORMAIEI
tiina Calculatoarelor constituie unul din cele mai dinamice
domenii ale tiinelor inginereti. Dezvoltarea fr precedent a domeniului
Calculatoare i tehnologia informaiei ca o component fundamental a
societii actuale (societate informaional), aflat ntr-o continu schimbare
i progres, este evident i face parte integrant din realitatea pe care o
trim. Evoluia exploziv a tehnologiilor de nalt performan, coroborat
cu acumulri teoretice i experimentale, au fcut posibil ptrunderea n cele
mai diverse domenii ale vieii sociale, economice, industriale, culturale, a
ceea ce poart n mod generic numele de sistem de calcul / calculator,
tehnic / echipament de calcul. Importana informaiei i a sistemelor de
comunicaii cu infrastructura aferent pentru societate i economie se
accentueaz odat cu valoarea i cantitatea informaiei transmis i stocat
pe aceste sisteme. n acest context apare n mod stringent necesitatea
mbuntirii performanelor sistemelor de calcul actuale att din punct de
vedere cantitativ ct mai ales din punct de vedere calitativ. De asemenea,
prezentul tehnologiei informaiei, ca s nu mai spunem de viitor, centrat pe
Internet i tehnologia World Wide Web, impun ca alturi de performana n
sine, fiabilitatea, disponibilitatea i scalabilitatea s devin criterii eseniale,
ceea ce implic iari necesitatea unei noi viziuni pentru proiectantul de
sisteme de calcul. Criticalitatea n societatea informaional, unde informaia
circul prin cyberspaiu
1
fr constrngeri de distan sau vitez, se
datoreaz n egal msur dependenei sporite de informaie, sistemelor care
o furnizeaz dar i vulnerabilitii crescnde pe fondul unui spectru larg de
ameninri de genul rzboiului i polurii informaionale (rzboi cibernetic,
etc.).
ntr-adevr, calculatoarele au fcut progrese importante iar
microprocesoarele sunt principalele rspunztoare pentru aceast cretere
deosebit a performanei. Performana microprocesoarelor a evoluat n

1
Conform enciclopediei Wikipedia [Wik], termenul de cyberspaiu (Cyberspace)
reprezint o metafor atribuit reelelor de sisteme electronice de calcul care permit
stocarea de date i comunicarea online. Dei n anumite lucrri, cyberspaiul este folosit
cu sensul de Internet, termenul trebuie neles ca i un spaiu care cuprinde, identitile i
obiectele care exist n reelele de calculatoare i sunt folosite de indivizii umani n diverse
scopuri [Chi04].
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 5
ultimii 10 ani ntr-un ritm exponenial, cu o rat aproximativ de 60% pe an.
Cercettorii susin c progresele arhitecturale au o pondere mai mare dect
cele tehnologice. Tendinele tehnologice se refer la creterea gradului de
integrare al tranzistorilor pe cip, creterea frecvenei ceasului procesorului,
diminuarea timpul de acces la memorie, reducerea costurilor de
implementare hardware la aceeai putere de calcul ori capacitate de
memorare etc. Tendinele arhitecturale urmresc exploatarea i creterea
paralelismului la nivelul instruciunilor att prin tehnici statice ct i
dinamice sau hibride (cazul arhitecturii IA-64, procesorul Intel Itanium), o
ierarhizare a sistemului de memorie prin utilizarea unor arhitecturi evoluate
de memorii tip cache, reducerea latentei cii critice de program, etc.
n cadrul unor prestigioase conferine tiinifice internaionale dedicate
microarhitecturilor avansate de procesare a informaiei (1999-2007) se
agreeaz tot mai mult ideea potrivit creia pentru a continua i n viitor
creterea exponenial a performanei microprocesoarelor, sunt necesare
concepte noi, revoluionare chiar, pentru depirea limitrilor paradigmei
actuale din punct de vedere conceptual. Exist nc o puternic tendin de
specializare ngust care face adesea ca abordarea domeniului s fie una
nchis n tipare preconcepute. Abordri recente, arat ns c sinergia unor
instrumente aparent disjuncte ale tiinei calculatoarelor converge spre
realizri novatoare ale acestui domeniu de cercetare (arhitectura
calculatoarelor i inteligena artificial). Alte posibile soluii constau n
abordri integratoare de gen hardware-software, tehnologie-arhitectur,
algoritmi, concepte, metode.
Cercetrile n domeniul tiinei Calculatoarelor trebuie s aib un
caracter fundamental, i se recomand a se efectua n universiti
ntruct implic investigarea unor aspecte noi, neimplementate n
actualele microprocesoare. Comunitatea academic i industrial
internaional investete bugete importante n cercetarea arhitecturilor
noi de calcul. Astfel de exemplu, programe de cercetare europene de tip
FP6 (HiPEAC - High-Performance Embedded Architecture and
Compilation) sunt finanate de ctre Uniunea Europeana cu fonduri de
milioane de euro. Abordarea cantitativ i calitativ a acestui domeniu
de studiu i cercetare n Romnia reprezint o necesitate formativ dar
i o necesitate legat de meninerea cercetrii tiinifice romneti n
cadrul tendinelor i standardelor actuale de calitate din Europa de
Vest, Japonia i SUA. Consider c mediul universitar este ideal pentru
dezvoltarea unor asemenea cercetri fundamentale cu privire la
tehnologia informaiei, inclusiv prin diseminarea rezultatelor ctre
studenii anilor terminali i celor masteranzi.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
6 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Aceast lucrare reprezint o introducere axat pe nelegerea
principiilor fundamentale ale tiinei i ingineriei calculatoarelor i este
destinat n primul studenilor din anul I ai studiilor de licen, dar i celor
care doresc s ptrund n tainele calculatoarelor i care vd n acestea nu
doar simple instrumente de lucru. Cartea de fa, bogat n aplicaii practice,
se bazeaz n parte pe structura lucrrilor Introduction to Computing
Systems: from bits & gates to C & beyond [Patt03] i Computer Organisation
and Design: The Hardware/Software Interface [Pat05], cri folosite ca
referin la cursul de Introducting to Computing Systems introdus pentru
prima dat n universitile americane n toamna anului 1995 de ctre
Profesorul Kevin Compton de la Universitatea Michigan. n acest moment
este predat n mai bine de 75 de universiti americane i la cursuri nrudite
de gen: Introduction to Computing for Biomedical Engineers, Computer
Systems and Programming in C, abordarea optim fiind de 2 semestre. De
asemenea, mai sunt folosite drept referine o suit de peste 30 de lucrri
cri i articole tiinifice att din domeniul software (centrate pe limbaje
i tehnici de programare, compilatoare, structuri de date) ct i hardware
(focalizate pe circuite digitale, automate secveniale, microarhitecturi de
procesare) cu scopul de a exemplifica mai bine necesitatea abordrii
integratoare hardware-software a domeniului tiinei i ingineriei
calculatoarelor. Accentul n lucrarea de fa nu este pus pe memorarea
detaliilor tehnice ci pe interfaa dintre ceea ce software-ul necesit i
respectiv ceea ce hardware-ul poate executa. Sunt prezentate noiuni
introductive dar cu caracter fundamental aferente mai multor discipline din
domeniul tiinei calculatoarelor: limbaje de programare, algoritmi i
structuri de date, compilatoare, sisteme de operare, respectiv arhitectura
calculatoarelor, sisteme cu microprocesoare.
U Abordarea bottom-up a crii este axat pe dou componente:
Structura de baz a calculatoarelor folosind simulatorul LC-3
(Little Computer
www.ece.utexas.edu/~ambler/ee306/Software&Doc/LC3WinGuide.pdf)
dezvoltat la Catedra de Calculatoare i Inginerie Electric,
Universitatea din Austin, Texas. Se pornete de la tranzistoare MOS,
pori logice, bistabili, structuri logice (Multiplexoare, Decodificatoare,
Sumatoare, memorii). Se continu cu modelul de execuie von
Neumann, cu arhitectura unui calculator (procesor) simplu LC-3, cu
limbajul de asamblare aferent acestui procesor. Sunt studiate de
asemenea: interfaa cu tastatura i monitorul, apelurile sistem
(ntreruperi software reprezentnd servicii ale sistemului de operare
prin instruciuni dedicate), modurile de adresare pentru instruciunile

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 7
cu referire la memorie (load / store), mecanismul de apel i revenire
din subrutin.
Exemplificarea la nivelul limbajului C i legtura sau implicaiile
n hardware a structurilor de control, a diverselor tehnici de
alocare a memoriei, lucrul cu stiva, apel de funcii i revenire,
stivele de date aferente funciilor, transmiterea parametrilor n
cazul apelului, recursivitate (care pare magic, dincolo de
nelegere), tablouri i chiar structuri elementare de date. Se va insista,
de asemenea, pe lucrul cu pointeri; pe modul n care C-ul (limbajul,
compilatorul) aloc i acceseaz variabile. Se va exemplifica
artndu-se diferena dintre adresa unei locaii de memorie (p din
declaraia int *p;) i coninutul acesteia (*p din aceeai declaraie).
Se va demonstra ineficiena la nivelul arhitecturii a modului de
adresare indirect memorie (la o adres n memorie se afl adresa
operandului care va fi folosit **cap, n cazul transmiterii de
parametrii unei funcii prin referin).

Aspectul novator al abordrii va consta n prezentarea interfeei
arhitectur (ISA, limbaj de asamblare specific) aplicaie de nivel nalt
(incluznd compilatorul ca i generator de cod pentru respectiva
arhitectur).
U Ce este LC-3 ?
Simulator care descrie funcionarea unei arhitecturi pe 16 bii;
Arhitectura nglobeaz cele mai importante caracteristici ale
procesoarelor Intel 8088 folosit n primul sistem IBM PC n 1981,
Motorola 68000 folosit la Macintosh 1984, sau Intel Pentium III
integrat n sistemele anilor 2000. Simulatorul permite execuia
programelor scrise n limbaj de asamblare LC-3, depanare interactiv
stabilire de puncte de ntrerupere, execuie pas cu pas, vizualizare
coninut regitrii. n urma etapei de asamblare codul surs asamblare
este translatat n limbaj main. De asemenea, poate fi vizualizat i
fiierul care conine tabela de simboluri.
Include porturi de I/O, interfaare cu tastatura i monitorul, apeluri
sistem (ntreruperi software reprezentnd servicii ale sistemului de
operare prin instruciuni), salturi condiionate pe coduri de condiie
=0, 0, set minimal de instruciuni, moduri de adresare pentru
instruciunile cu referire la memorie (load / store) indirect registru,
indexat, mecanism de apel i revenire din subrutin (recursivitatea
determin necesitarea salvrii adresei de revenire n programul apelant
n momentul apelului).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
8 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Simulatorul arhitecturii LC-3 permite testare / depanare a programelor
scrise n limbaj de asamblare, stabilire de puncte de ntrerupere. De la
adresa http://users.ece.utexas.edu/~ambler/ee306/software&doc.htm
pot fi descrcate n mod gratuit pentru utilizare n scop didactic att
simulatorul LC-3 (LC301.exe), un simulator realizat n Macromedia
Flash Player versiunea 6, care descrie operaiile de citire scriere
dintr-o memorie cu 4 locaii avnd 3 bii fiecare (memory.exe),
precum i ghidul de utilizare al simulatorului LC-3.
1.1. CALCULATORUL DISPOZITIV UNIVERSAL DE
CALCUL
Universalitatea
Un sistem de calcul
2
(calculatorul) trebuie s ofere urmtoarele
funcionaliti:
cum s adune / scad dou numere
cum s nmuleasc / mpart dou numere
cum s ordoneze alfabetic
nu trebuie proiectat sau cumprat un calculator nou pentru fiecare
nou operaie care trebuie rezolvat.
dac este definit un alt set de instruciuni acelai calculator trebuie
s opereze cu ele.

Istoric
Exceptnd abacul (strmoul socotitoarei folosit pentru prima dat,
cu peste 2000 de ani n urm n China), se poate spune c mainile de calcul
au aprut cu mult (300 de ani) naintea calculatoarelor de azi. Acestea pot
fi clasificate n:
Dispozitive analogice (msurarea unor cantiti fizice cum ar fi
tensiune, curent). Maini de adunat, nmulit folosind diverse rigle

2
Conform enciclopediei Wikipedia [Wik], termenul de sistem de calcul reprezint o
combinaie de componente hardware i software. Un sistem de calcul tipic conine o
memorie i un set de stri care definesc legtura dintre intrrile i ieirile sistemului. Pe
parcursul acestei lucrri s-a folosit pentru simplitate n loc de sistem de calcul noiunea de
calculator. Pe lng calculator ns, sisteme de calcul mai pot fi: sisteme dedicate din
aparatele electrocasnice, din automobile, dispozitive PDA (Personal digital assistants), etc.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 9
gradate logaritmice. Sunt caracterizate de acuratee sczut (Ex:
ceasul).
Dispozitive digitale (calculeaz manipulnd un set finit de digii
sau caractere).
U Prima main de calcul funcional a fost construit de ctre Blaise
Pascal n anul 1642. Reprezenta o socotitoare mecanic, construit din
roi dinate i o manivel, cu care se puteau efectua adunri i scderi.
U n anul 1674, Gottfried von Leibniz a construit o main de calcul care
pe lng adunri i scderi efectua i nmuliri i mpriri. Cutnd s
simplifice mecanismele de efectuare a calculelor a considerat cel mai
potrivit sistemul binar de numeraie.
U Charles Babbage a proiectat n 1840 prima main analitic de uz
general, care (dac ar fi fost posibil construirea ei) ar fi fost
programabil, avnd patru componente principale: magazia (memoria),
moara (unitatea de calcul), seciunea de intrare (cititorul de cartele) i
seciunea de ieire (perforatorul sau imprimanta).
U n 1854 matematicianul englez George Boole a inventat calculul logic
care folosete numai dou valori (adevrat i fals) cu care se pot efectua
operaii de tip And, Or, Not. Aceste funcii (operatori), numite ulterior
algebr boolean, pot fi uor simulate cu ajutorul unei reele de
comutatoare.
U Konrad Zuse (student german) a creat la sfritul anilor 1930 o serie de
maini de calcul folosind relee electromagnetice.
U Calculatoarele electronice au fost iniial propuse sub forma unui aparat
abstract (descriere matematic) care poate realiza sau simula orice tip
de main mecanic. Forma teoretic a fost introdus de Alan Turing n
1936 la Universitatea Cambridge sub denumirea de maina Turing
universal.

Primele calculatoare construite erau foarte diferite de cele de astzi.
Nu doar ca dimensiuni i capacitate (care depind doar de tehnologie), ci
referitor la structura lor fundamental. Acele calculatoare erau construite
pentru a rezolva o singur problem; nu erau universale. Ele constau dintr-o
colecie de uniti funcionale, care puteau face calcule simple.
Programatorii aveau sarcina de a conecta unitile funcionale ntre ele cu
fire (srme), pe care le inserau manual n tot felul de mufe. De exemplu,
dac vroiau s calculeze (a+b)
2
, programatorii luau o unitate care fcea
adunri i una care fcea nmuliri i le cuplau ca n figura 1.1.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
10 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 1.1. Implementarea n hardware a expresiei (a+b)
2
. Variabilele devin srme,
iar operaiile sunt executate de uniti funcionale
Ideea de a descrie un program folosind un limbaj (i nu prin conexiuni
ntre uniti funcionale) este mai veche; n 1936 Alan Turing folosise
noiunea de main Turing universal (U) pentru a descrie un calculator
universal, care poate executa orice program. Programele erau stocate n
memoria calculatorului, reprezentate ca iruri de numere. Maina Turing (T)
este un calculator abstractizat
(figurahttp://www.cs.cmu.edu/~mihaib/articles/complex/complex-html.html
- turing 1.2) compus din urmtoarele piese [Bud99]:


Figura 1.2. Maina Turing

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 11
1.
n caracter din alfabetul nostru; banda este iniial plin
cu spaii, mai puin partea de la nceput, unde este scris irul cu
le de intrare memorie cu acces linear;
2. e poate mica deasupra benzii, la
n
itate de control, care conine un numr finit de reguli. Unitatea
c are moment dat ntr-o stare; strile posibile
t n numr finit. Fiecare regul are forma
scriu pe band litera Y;
m itire/scriere n direcia D.
n pofid aina Turing poate calcula orice poate fi
calculat cu cele mai performante supercomputere. Un algoritm de calcul este
descris de o astfel de main, prin toate strile posibile, i toate aceste reguli,
numi
e c
ma
ime orice algoritm, s ofere ceva care s fie construibil, i s
poat
Din cauza asta logi
Turing este modelul cel m de calcul care poate fi propus; acest
enun
Church. Ace
nainte de a putea analiza orice alt lucru privitor la teoria complexitii.
O band infinit de hrtie cu ptrele; n fiecare ptrel se poate
scrie exact u
date
Un cap de citire-scriere, care s
st ga sau la dreapta;
3. O un
de ontrol este la fiec
sun fixate dinainte, i sunt
urmtoare:
Dac
sunt n starea Q1;
sub capul de citire este litera X;
atunci:
trec n starea Q2;

ut capul de c
a simplitii ei, m
te reguli de tranziie, care indic cum se trece de la o stare la alta.
De exemplu:
if ((stare_veche==Qi)&&(intrare==Ti))
{
ieire=Oj;
stare_nou=Qj;
}

Orice alte modele de calcul care au fost propuse de-a lungul timpului,
au fost dovedite a fi mai puin expresive, sau tot att de expresive ct maina
Turing. Nimeni nu a fost n stare, pn n prezent, s demonstrez
ina Turing are limitri: adic, dispunnd de operaii elementare
capabile s expr
face lucruri pe care maina Turing nu le poate face.
cianul Alonzo Church a emis ipoteza c maina
ai general
, care nu este demonstrabil n sens matematic, se numete Teza lui
sta este un postulat asupra cruia trebuie czut de acord

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
12 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Complexitatea unui model de calcul prin prisma modelului Turing, se
definete prin:
Timpul de calcul pentru un ir dat la intrare, este numrul de mutri
fcut de maina Turing nainte de a intra n starea
terminat;
Spaiul consumat pentru un ir de intrare, este numrul de csue de
t de timpul de
execu
Cnd se spune c maina Turing este la fel de puternic ca orice alt
la fel de repede ca orice alt
mode
mai asemntor cu o memorie RAM obinuit.

i; maina Turing universal [Bud99]
este ech
De fapt i o main
Turin
calculato
sunt pro
Pe
lucruri:
Descrierea oricrei maini Turing (T) este finit, i poate fi fcut
cu alfabetul nostru. Dac am o main Turing, pot enumera strile
ei i regulile de tranziie sub forma unui ir de caractere;
Maina universal (U) primete dou intrri pe band: una este
descrierea mainii de simulat (ce trebuie s calculeze), iar a doua
este intrarea pentru care trebuie s simuleze m ina. Maina
universal apoi urm le m inii simulate,
folosind pro
pe band pe care algoritmul le folosete n timpul execuiei
sale.
Anticipnd puin complexitatea unui algoritm este da
ie al acestuia n situaia cea mai defavorabil. Timpul de execuie al
unui algoritm pentru un anumit set de date de intrare este determinat de
numrul de operaii primitive sau "pai" executai i se calculeaz ca suma
tuturor timpilor de execuie corespunztori (pas = linia i din pseudocod
executat ntr-o durat (presupus) constant de timp ci).
model de calcul, nu nseamn c poate calcula
l de calcul, ci c poate calcula aceleai lucruri.
Se pot imagina tot felul de modificri minore ale mainii Turing, care
o vor face s poat rezolva anumite probleme mai repede. De exemplu,
putem s ne imaginm c maina are dreptul s mute capul la orice csu
dintr-o singur micare, fr s aib nevoie s mearg pas-cu-pas; atunci
banda s-ar comporta
Simulr
Demonstraia faptului c maina Turing este att de puternic nct
ivalent cu orice alt model propus de calcul s-a fcut prin simulare.
maina Turing este att de puternic nct se poate constru
g care s simuleze orice alt maina Turing posibil. Att
arele ct i maina universal Turing pot calcula orice ntruct ele
gramabile.
ntru a nelege cum este posibil aa ceva, trebuie realizate dou
a
a rete regulile de tranziie a
pria ei band n acest scop.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 13

Figura 1.3. Maina Turing universal
(model abstract de calcul al unui produs dintre un termen i o sum)
Dezvoltarea dispozitivelor de calcul a fost influenat de cel de-al doilea
rzboi mondial prin ncercrile de calcul a traiectoriilor rachetelor
Collosus i Eniac i respectiv de decodare a codului Enigma folosit de
Germania pentru protecia mesaje
U
lor. Primul calculator digital de
U
e sunt cuplate unitile funcionale, ci este
stocat n memorie, fiind descris folosind un limbaj numit cod-main. n
cod-main, operaiile de executat sunt codificate sub forma unor
numer printr-un
ir de ile

succes, ENIAC (Electronic Numeric Integrator and Computer)
nlocuiete releele electromagnetice cu tuburile electronice. A fost
construit n 1946 de John Mauchly i Presper Eckert de la
Universitatea Pensylvania i coninea 18000 de tuburi electronice i
1500 de relee. Cntrea 20 de tone, avea 20 de regitri, care reinea
fiecare cte un numr zecimal de 10 cifre, era programat prin
intermediul a 6000 de comutatoare i era posibil efectuarea a pn la
500 de adunri sau scderi i 300 de nmuliri pe secund. A fost folosit
de armata american pn n 1952.
n anii '40, matematicianul John von Neumann analizeaz starea de
fapt a calculatoarelor i scrie n 1945 un raport intitulat First Draft of a
Report on the EDVAC (Prima ciorn a unui raport despre EDVAC
Electronic Discrete Variable Automatic Computer), n care sugereaz
o arhitectura revoluionar. n aceast arhitectur, programul nu mai este
reprezentat de felul n car
e numite instruciuni. Programul de executat este descris
instruciuni, care se execut consecutiv. Pe lng unit
funcionale care fac operaii aritmetice, calculatorul mai are o unitate de
control, care citete secvenial instruciunile programului i care trimite
semnale ntre unitile funcionale pentru a executa aceste instruciuni.
Rezultatele intermediare sunt stocate n memorie. Aceast arhitectur se
numete von Neumann.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
14 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 1.4. Schema simplificat a arhitecturii von Neumann
Marea majoritate a calculatoarelor din ziua de azi sunt bazate pe aceast
arhitectur; noiunea de limbaj-main, i cea nrudit, de limbaj de
programare, folosite pentru descrierea programelor, sunt c

oncepte foarte


ai rapide i
mai ieftine dect cele precedente. A aprut noiunea de familie de
calculatoare: maini care au acelai limbaj de asamblare dar au puteri
(performane) i capaciti diferite. S-a introdus noiunea de
multitasking; aceasta implic existena n memorie a mai multor
programe n acelai timp: cnd unul dintre ele ateapt terminarea unei
operaii de intrare / ieire, un altul poate efectua calcule.
A patra generaie de calculatoare (ncepnd cu 1980) poart
amprenta circuitelor integrate pe scar larg VLSI. Aceast
tehnologie a permis a permis plasarea pe un singur cip a sute de
naturale pentru toi cei care manipuleaz calculatoarele. Von Neumann
propune calculatorul s fie vzut ca sistem de procesare a informaiei
(bazat pe procesor CPU), adic un mecanism care direcioneaz dar
i realizeaz procesarea informaiei.
Apariia tranzistorului, nlocuitorul tuburilor electronice a generat
nceputul celei de-a doua generaii de calculatoare electronice, a
minicalculatoarelor (1955-1965). PDP-1, realizat de firma Digital
Equipment Corporation este un reprezentant al acestor calculatoare. Fa
de cel mai rapid calculator din lume la acea dat, IBM 7090, un
calculator cu tranzistori, PDP-1 era de 2 ori mai rapid si de 9 ori mai
ieftin.
A treia generaie (1965-1980) a debutat prin inventarea de ctre
Robert Noyce a circuitului integrat de siliciu care permitea montarea
pe o singur pastil de siliciu numit cip, de civa centimetri ptrai, a
zeci, apoi mii de tranzistoare. Descoperirea cipului a permis
constructorilor de calculatoare s creeze maini mai mici, m

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 15
milioane de componente electronice elementare. Datorit preului sczut
al calculatoarelor s-a crea
persoan; a nceput perioada calcu
t posibilitatea achiziionrii acestora de fiecare
latoarelor personale (PC).
Procesoarele anilor 80 erau construite din 10 sau mai multe plci
nt capabile s fac
uman investit n respectivul program aflat n execuie.
Marvin Minski, afirma despre programele de Inteligen
Principiu e problemele ce se doresc a fi rezolvate,
sistem etc., sunt scrise ntr-un limbaj (i ntr-o
limb i
carac ractic, de la problema de
rezolv
loc o e
parcu


electronice, fiecare de dimensiuni 18 (inch) i coninnd 50 sau mai
multe componente electronice integrate. La nivelul anilor 2000
procesoarele sunt integrate pe o singur pastil de siliciu de dimensiune
sub 1 (inch). n cazul microprocesoarelor, gradul de integrare al
tranzistorilor pe cip crete cu cca. 55% pe an. Tehnologia de integrare a
microprocesoarelor a evoluat de la 10 microni (1971) la 0.18 microni
(2001), la 0.13 microni (2003) versiunea Northwood a procesorului
Intel Pentium 4 i 0.09 microni (2004) versiunea Prescott a aceluiai
procesor. Frecvena ceasului crete i ea cu cca. 50% pe an.
1.2. STRUCTURA UNUI SISTEM DE CALCUL.
PRINCIPII DE BAZ
Principiul nti P1: Toate calculatoarele (att cel mai mare resurse
foarte mari, ct i cel mai mic, att cel mai rapid frecven ridicat, ct i
cel mai lent, att cel mai scump ct i cel mai ieftin) su
exact aceleai lucruri dac au suficient timp i suficient memorie.
Inteligena aparent a unui sistem de calcul provine din cantitatea
de inteligen
Artificial din anii
80 c: aceste programe care par inteligente iau decizii la fel de proaste
ca i omul numai c mult mai repede [Min82].

l al doilea P2: Toat
ele de operare, compilatoarele,
uzual engleza). Dar toate sunt rezolvate prin electroni
teristici ale acestora (deplasare, vitez, etc). P
at la tensiunea care antreneaz (direcioneaz) fluxul de electroni au
serie de transformri sistematice (dezvoltate i mbuntite p
rsul a mai bine de 50 de ani).
Viitorul va aduce probabil calculatoare cuantice, bazate pe procesoare
moleculare organice, conform calculabilitii ADN, etc.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
16 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Nivele de transformare: de la Problem de nivel nalt la Circuit
tronic

Etapele succesive prin care se ajunge de la problema de rezolvat
scris ntr-un mod abstract) pn la tensiunea care antreneaz fluxul de
troni sunt urmtoarele:
1. Problem (High level)
2. Algoritm
elec
(de
elec
4.
5.
7.
1. Pro
2. Alg t de operaii
une
pro ice procedur de calcul
bi
:
U Claritatea operaiile algoritmului i succesiunea executrii lor
trebuie s fie descrise clar, precis, fr ambiguiti, astfel nct s
nilor algoritmului
U
goritm.
U i
e
L
algoritmilor care v
reducer a
calcul de ti i al sistemelor dedicate.


3. Limbaj de programare
Arhitectura Setului de Instruciuni (ISA)
Determinarea optim a microarhitecturii
6. Proiectarea la nivel de circuit logic (combinaional / secvenial)
Implementarea circuitelor folosind tehnologia CMOS

blemele sunt definite n limbaj natural. Dezavantaj ambiguitatea.
oritmul reprezint o succesiune finit i ordona
univoc determinate, efectuate mecanic, care aplicate datelor iniiale ale
i probleme dintr-o clas dat, asigur obinerea soluiei acelei
bleme. Cu alte cuvinte un algoritm este or
ne definit care primete o anumit valoare sau o mulime de valori ca
date de intrare i produce o anumit valoare sau mulime de valori ca
date de ieire. Comportarea unui algoritm poate fi diferit n funcie de
datele de intrare. Proprietile algoritmilor sunt

permit o executare mecanic, automat a aciu
U Generalitatea un algoritm permite, nu rezolvarea unei singure
probleme particulare, ci a unei ntregi clase de probleme.
Finitudinea executarea algoritmului trebuie s cuprind un numr
finit de operaii, chiar dac numrul lor este foarte mare. Aceast
proprietate difereniaz metoda de calcul de al
Ef dintre algoritmii care rezolv ciena o anumit problem,
prezint interes numai algoritmii performani pentru care numrul
raiilor care se execut este cel m op ai mic.
a momentul actual sunt realizate cercetri serioase asupra
izeaz nu numai o mbuntire a performanei ci i o
e puterii consumate, vital mai ales la nivelul dispozitivelor de
p handheld

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 17
3.
a)
m

artificial.
Pascal dezvoltat pentru nvarea studenilor s programeze
(foarte apropiat de pseudocod).
b) de nivel sczut (low dependente de maina pe care se proceseaz).
Exist cte un astfel de limbaj specific fiecrei familii de procesoare.
Limbajul de asamblare.
4. Dup cum se poate observa i din figura urmtoare (fig. 1.5),
Arhitectura Setului de Instruciuni (ISA) reprezint interfaa dintre
software (programele de aplicaie / sistem de operare) i hardware-ul
care l execut. ISA specific modul de organizare a memoriei (zon de
date statice i dinamice, de cod, de stiv, zon rezervat nucleului
sistemului de operare), setul de regitri, setul de instruciuni, formatul
instruciunii, tipurile de date utilizate i modurile de adresare
(mecanismul prin care calculatorul / procesorul localizeaz operanzii).

Limbajele de programare sunt de dou tipuri:
de nivel nalt (independente de maina pe care se proceseaz
icroarhitectura hardware)
C destinat manipulrii structurilor hardware ale calculatoarelor
(regitrii, memorie, porturi)
Fortran rezolvarea calculelor tiinifice
Cobol rezolvarea problemelor de procesare a datelor specifice
afacerilor (aplicaii economice)
Prolog folosit n aplicaii care necesit proiectarea unui sistem
expert.
LISP utilizat n rezolvarea problemelor de inteligen

Figura 1.5: Interfaa hardware / software

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
18 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Cele mai cunoscute ISA la nivelul anului 2001 sunt:
IA-32 ISA (introdus de Intel Corporation n 1979 i utilizat n
prezent i de AMD)
PowerPC (folosite de IBM i Motorola)



Tr
ISA-ul
(uzua compilatorului. Este
denumit
program
aparin
transformare
ieire). Se disting dou
zis:

ana
prog
e:

. Translatarea

Alpha (introdus de Compaq Computer Corporation)


PA-RISC (utilizat de Hewlett-Packard)
SPARC (utilizat de SUN Microsystems)
anslatarea unui program de nivel nalt (fie acesta C, Fortran) n
aferent calculatorului care va executa respectivul program
IA-32) se realizeaz prin intermediul l
faz a unui compilator o succesiune de operaiuni prin care un
de la intrare sufer anumite modificri. Prin trecere [Gol97]
nd unui compilator se nelege o citire a programului dintr-un fiier,
a lui conform unor faze i scrierea rezultatului n alt fiier (de
faze majore ale procesului de compilare propriu-
liza - n care se identific prile constituente fundamentale ale
ramului i se construiete o reprezentare intern a programului
inal, numit co orig d intermediar (analiza lexical produce un
ir de atomi lexicali -> analiza sintactic genereaz -> arborele
sintactic analiz semantic construiete o reprezentare a
programului surs n cod intermediar).

sinteza - genereaz cod main eventual optimizat. Se disting dou
etap
optimizare cod intermediar (scheduling) pentru o anumit
main;
generare de cod main (generare cod ntr-o gam variat de
formate: limbaj main absolut, limbaj main relocabil sau
limbaj de asamblare urmat de alocare de resurse)
din limbaj de asamblare n cod main se realizeaz cu ajutorul
unui asamblor.
Pentru fiecare limbaj de programare i pentru fiecare arhitectur target
trebuie s existe un compilator corespondent. Ex: gcc n sistemul de operare
Linux poate transforma un cod surs C n cod obiect fie pentru procesor
Intel, fie MIPS, fie pentru arhitectura virtual SimpleScalar, n funcie de
bibliotecile i instrumentele software folosite asamblor, link-editor,
interpretor.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 19
5. Microarhitectura organizarea detaliat a unei implementri de ISA.
IA-32 a fost implementat de-a lungul anilor de cteva
microprocesoare diferite, fiecare avnd o microarhitectur unic:
de la Intel 8086 n 1979 pn la Pentium III n 1999.
Alpha ISA este implementat n 4 microprocesoare diferite fiecare
cu microarhitectura proprie 21064, 21164, 21264 i 21364.
Fiecare implementare reprezint o oportunitate pentru proiectanii de
calculatoare de a face diferite compromisuri ntre costul microprocesoarelor
i performana acestora. Optimul se obine pe baz de simulare pe
benchmark-uri standardizate. ISA descrie funcionalitatea de baz iar
unit
setu
mic
Pen
de reaz asupra datelor flotante
pip
imp
aferent ISA impune ce tipuri de uniti funcionale de execuie / staii
de re specifice s fie implementate la nivel microarhitectural.
(regi
uri),
logic
perfo
care
7. Im l
im le
(tranz
stratu

Co
calcul ap

microarhitectura care o implementeaz reprezint modelul particular obinut
n funcie de compromisul cost/performan (numr staii de rezervare i
i funcionale de execuie per fiecare tip de instruciune, numr de
ri de regitri generali, valoarea factorului superscalar al
roarhitecturii, numrul de faze pipeline de procesare Pentium III 14,
tium IV 20, etc).
De exemplu, tipul de date float va afecta numrul de faze pipeline
procesare a unitilor de execuie care ope
(de regul n faze, cu n>1), tipului de date int corespunzndu-i o faz
eline. De asemenea, setul de regitrii logici generali sunt
lementai fizic la nivelul microarhitecturii. Setul de instruciuni
zervare
6. Proiectarea la nivel de circuit logic implementarea n limbaje de
de ri sc ere hardware a fiecrui element component al microarhitecturii
tri, sumatoare, decodificatoare, multiplexoare, predictoare, cache-
urmat de modelare comportamental i simulare la nivel de poart
pentru a face n final un compromis ntre cost / complexitate i
rman. Rezultatul acestei etape l reprezint layout-ul procesorului
va fi implementat hardware n etapa 7.
p ementarea tehnologic la nivel de circuit layout-ul obinut se
p menteaz la nivel de tranzistor prin jonciuni p-n respectiv n-p
istoare CMOS), polarizate n pastila de siliciu pe mai multe
ri.
nform celei mai generale clasificri, componentele unui sistem de
arin uneia dintre urmtoarele categorii:
hardware-ul, care reprezint componenta fizic a unui sistem de
calcul, n care circuitele electronice asigur prelucrarea automat a

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
20 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
informaiei precum i din echipamentele care realizeaz
comunicarea ntre om i calculator. Trebuie s asigure cele 4 funcii

conform teoriei lui von Neumann (de memorare/ de comand i
control / de prelucrare / de intrare-ieire).
software-ul, care reprezint ansamblul de programe care fac
posibil realizarea funciei sistemului de calcul de prelucrare a
protecie etc. Iniial se
afl pe hard-disk iar la pornirea calculatorului se ncarc n
memoria principal. Exemple: DOS, Windows, Linux.
b) progr de programare,
compilatoar atori la
datelor i care constituie suportul logic de funcionare al sistemului
de calcul. Se disting dou mari componente:
a) software de baz (sistemul de operare) care asigur legtura
ntre componentele fizice i logice ale calculatorului, avnd funcii
de gestionare a memoriei, a fiierelor, de
amele de aplicaie (limbaje i medii
e, utilitare) sunt scrise de ctre program
cererea utilizatorilor i codific ntr-un limbaj de programare
algoritmul de rezolvare al problemei respective.
firmware-ul, care este componenta de programe ncrcate n
l

metoda microprogramrii.

memoria fix ROM (Read Only Memory) de ctre productoru
sistemului de calcul; aceast component se afl la limita dintre
hardware i software, reprezentnd partea de software integrat n
hardware, prin

Figura 1.5. Structura unui sistem de calcul
dispozitive periferice a cror rat de transfer (octei /secund) este att de
nct, din motive de timing, face imposibil modul de lucru prin
*) DMA
ridicat ntreruperi. Ele
ceseaz direct memoria fr intervenia procesorului. Exemple de dispozitive DMA sunt ac
discurile magnetice i interfeele video.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 21
Un t it)
cuia

C, SP, RA)
ni


cesorului circuit electronic ce conine un cristal de
cuar. Acesta genereaz impulsuri la intervale regulate stabilindu-se
unui element cu dou stri s ia una
dintre ele. O succesiunea de bii din memoria intern poate
corespunde unei in u unei date reprezentnd valori numerice,
m

us ecteaz CPU cu memoria i dispozitivele
at dintr-o mulime de fire paralele prin care sunt
te, semnale de comand i control (Read / Write,
ita ea central de calcul / procesare (CPU - central processing un
Realizeaz aducerea din memorie, decodificarea i exe
instruciunilor.
Dispune de o memorie proprie, foarte mic i foarte rapid (Regitri
32, 64 de uz general, P
Execut:
o Operaii aritmetice (add/sub/mul/div)
o Operaii logice (and/or/xor/not)
o Teste de comparaie / salturi condiionate
o Repetat anumite secvene de instruciu
Comand citirea / scrierea din / n memorie, porturi I/O
Comand trecerea n stare nedeterminat (tristate) a busului de date
ntre procesor i memorie n cazul DMA.
Este caracterizat de vitez mare de procesare
Ceasul pro
astfel tactul de lucru al procesorului. f=100 MHz ntr-o secund
(1s) sunt generate 100 de milioane de impulsuri de tact.

Memoria intern realizeaz stocarea programelor i datelor necesare
acestora.
RAM (memorie cu acces aleator) - are caracter dinamic volatil
ROM (memorie cu caracter permanent folosit doar n citire)
Poate fi static sau dinamic caz n care un condensator va
reprezenta celula iniial de memorare, necesitnd rencrcarea sa
periodic (regenerare).
Unitatea de msur elementar a memoriei este bitul (Binary Digit).
Definiia bitului: probabilitatea
str ciuni,
text, diverse coduri (imagini, sunet, text).
Este organizat n diviziuni (locaii sau cuvinte) de o mrime egal
cu cea a numrului de bii ce poate fi procesat simultan de procesor.
O locaie de memorie este caracterizat de adres i de coninut.
Un cuvnt de adres pe m bii poate indexa un spaiu de 2 locaii de
memorie.
(magistral) intercon B
periferice. Este form
transmise adrese, da

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
22 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
INTe
(al
co
una d

nteracioneaz "accidental" cu
domeniul software este complet greit, ntre hardware i software
existnd n realitate o simbioz i o interdependen puternic, nc
neexplorate corespunztor. Procesoarele se proiecteaz odat cu
intre ele este foarte strns:
t standardizate) sunt compilate
pentru arhitectura respectiv iar,
U
tra ac din utilizator un simplu robot ci i
plica
d
pro
resu
rupt Acknowledge), stri ale memoriei sau ale perifericelor (Cereri de
ntrerupere semnalul INT, cereri de transfer DMA, Ready dac este activ
semnific faptul c Memoria / Dispozitivele de Intrare-iEeire sunt pregtite
pentru transferul de date cu CPU). Magistrala reprezint practic un set de
reguli i mijloace de a realiza transferul ntr-un sistem de calcul. Constituie
o cale de a transporta informaii ntre dou dispozitive / echipamente numite
surs i destinaie. Din punct de vedere al dialogului pe magistral
ordonrii transferului de informaii) modulele implicate se pot afla ntr-
in urmtoarele stri:
Master
Slave
Dispozitivele periferice intermediaz comunicaia calculatorului cu
mediul nconjurtor. Se disting dou clase:
a) Dispozitive de Intrare / Ieire tastatur, mouse, scanner, microfon
(intrare) i monitor, imprimant, plotter, difuzor (ieire).
b) Memorii externe cu caracter nevolatil: hard-disk, floppy disk, CD-
ROM, CD-RW. Sunt mai lente dect memoria intern ns sunt mai
ieftine per bit memorat.

n loc de concluzie:
Cele dou "emisfere", hardware i software, n care i desfoar
activitatea cercettorii din tiina calculatoarelor sunt doar aparent
disjuncte. Ideea c arhitectura procesoarelor i
compilatoarele care le folosesc iar relaia d
U benchmark-urile (programe de tes
compilatorul trebuie s genereze cod care s exploateze
caracteristicile arhitecturale, altfel codul generat va fi ineficient.
Preocuprile programatorilor nu trebuie s vizeze doar interfaa care
ge sau diversele artificii care f a
im iile pe care aplicaia creat o are asupra microarhitecturii. Scopul
aplicaiei trebuie s fie utilizarea cu justee att a resurselor software avute
ispoziie ct i a algoritmilor / conceptelor de programare cunoscute la
(motenire, polimorfism, apeluri de funcii prin pointer chiar i acolo unde
nu este cazul). n caz contrar, "rul" (a se citi n primul dificultatea
cesrii rapide datorit ramificaiilor de program, cod obiect masiv,
rse hardware suplimentare) se rsfrnge asupra performanelor

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n sistemele de procesare a informaiei 23
arh
de fi mai eficiente dac nu ar analiza numai codul obiect al
enchmark-urilor avute la dispoziie dezbrcat de orice semantic ci ar privi
.3 E
1.

2.
procesor (asamblare).

3. de
st pe scurt diferena dintre ISA i microarhitectur.
te ISA sunt implementate n mod normal de o singur
microarhitectur. Invers, cte microarhitecturi pot exista pentru o
singur ISA ?

4. Enumerai nivelele de transformare i dai cte un exemplu la fiecare
nivel.

5. Care sunt principalele provocri (tendine) n proiectarea sistemelor de
calcul i ce compromisuri se fac ?

6. S considerm urmtoarea cutie neagr - black box care preia dou
numere i realizeaz suma lor (vezi figura (a)). Considerm o alt aset
capabil s nmuleasc dou numere (vezi figura (b)). Cele dou asete
astfel de casete
artai cum vor fi interconectate pentru a calcula urmtoarele expresii:
olosind doar o singur caset de adunare i
dou de nmulire)

itecturii. n ce-i privete pe proiectanii de arhitecturi, schemele propuse
acetia ar putea
b
"mai sus" spre sursa de nivel nalt a acestora.
1 . EXERCIII I PROBLEM
Numii i explicai noiunea de algoritm i trei caracteristici ale acestuia.
Pentru fiecare din caracteristici dai un exemplu de procedur care nu o
ndeplinete (3 contraexemple).
vantajele i dezavantajele programrii ntr-un limbaj de Specificai a
nivel nalt fa de programarea la nivel apropiat de
Numii cel puin trei noiuni specificate de ISA (arhitectura setului
ruciuni). Descriei in
C
c
c
pot fi interconectate pentru a calcula p x (m + n) (vezi figura (c)).
Presupunnd c dispunem de un numr nelimitat de
a) a x + b
b) Media aritmetic a patru numere w, x, y, i z.
c) a
3
+ 3a
2
b + 3ab
2
+b
3
(f

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
24 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software


7. i a pus bazele miniaturizrii, deschiznd
Log06]

8. ine sunt constructorii i
execute ? Ce performane
i volum avea ? [Log06]

9. Prin ce se caracterizeaz arhitectura revoluionar propus de John von
Neumann ?

10. Selectai rspunsul corect pentru urmtorul enun: Ce este memoria
RAM din punct de vedere al programatorului ? [Zah04]
a) un dispozitiv de stocare n mas
b) o zon de pstrare pentru manipularea / prelucrarea informaiilor
curente.
c) o parte mecanic

11. Selectai continuarea corect pentru urmtorul enun: Un algoritm
[Zah04]
a) este o niruire de comenzi
b) este un lan de instruciuni
c) este o descriere sintetic a unei probleme
d) rezolv problema ntr-un numr finit de pai
e) toate variantele de mai sus sunt corecte.

Ce a revoluionat tehnologia
calea spre apariia calculatoarelor moderne ? [
Care a fost primul calculator digital de succ
unde a fost el utilizat ? Ce operaii putea el s
es, c

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
2. REPREZENTAREA INFORMAIILOR.
CONVERSII DE VALORI NTRE SISTEME DE
NUMERAIE. ARITMETIC BINAR. OPERAII
LOGICE
2.1. REPREZENTAREA INFORMAIILOR N
SISTEMELE DE CALCUL
n acest capitol se urmrete identificarea tipurilor de informaii
reprezentate ntr-un calculator i definirea modurilor de codificare a acestora
n vederea memorrii, prelucrrii i transmiterii. Se vor efectua conversii de
date ntre sistemele de numeraie binar, zecimal i hexazecimal. Se vor
reprezenta numere pozitive i negative n semn i mrime, complement fa
de 1 i complement fa de 2; se vor comenta avantajele i dezavantajele
celor 3 variante de reprezentare. Se vor efectua operaii aritmetico-logice cu
valori numerice reprezentate n cod complementar. Se vor reprezenta
numere n virgul flotant; se vor analiza limitrile acestei forme de
reprezentare i se va face o comparaie cu reprezentarea n virgul fix.

Informaia Definiie. Cuantificare. Convenii de memorare n
calculator. Clasificare.
Definirea informaiei
noiune primar - greu de definit, reprezint un atribut al materiei
mesaj obiectiv care aduce o clarificare privind starea unui
proces care are mai multe stri i elimin nedeterminarea n
legtur cu realizarea unui eveniment.
Cantitatea de informaie - entropia informaional (E)
Claude E. Shannon [Sha48] a introdus noiunea de bit (binary digit)
ca fiind unitatea de msur a informaiei. Shannon afirm c
exist o corelaie ntre informaia produs prin apariia unui
eveniment n cadrul unui experiment i logaritmul inversului
probabilitii de apariie a acestui eveniment. Plecnd de la
aceast definiie, Shannon a introdus conceptual de entropie
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
26 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
informaional (E), element de maxim importan n teoria
informaiei i a tiinei comunicaiilor.
E reprezint o msur a gradului de incertitudine (nedeterminare)
dintr-un sistem. Este dependent de numrul maxim de stri posibile
al respectivului sistem. Gradul de organizare a sistemului este direct
proporional cu cantitatea de informaie nmagazinat i invers
proporional cu entropia informaional a sistemului.
Exemple: aruncarea unei monede, aruncarea unui zar

x
1
x
2
x
n

p
1
p
2
p
n

E = p
i
log
2
p
i

Observaie: Entropia devine maxim (dezordine maxim) pentru o
distribuie echiprobabil. Astfel dac n n
n
p
i 2
log max E , , 1 i ,
1
= = = =
valoare ce reprezint numrul minim de bii necesar codificrii entropiei.
Analog, entropia devine minim (ordine maxim) cnd
. 0 0 log ca conventie prin d consideran 0, min E , , 1 , 0 si 1
2
= = = = = = n i k i p p
i k

1 byte) lii octeilor sunt
kilo/m
1Po (peta octet) = 2
50
(1099511627776)o 10
15
o
Co
De exemplu, pentru 2 stri echiprobabile entropia este:
E = - 2*0.5*log
2
0.5 = 1 unitatea de informaie (1 bit). O niruire de 8
bii formeaz un octet ( . Multip
ega/giga/tera/peta octeii:
1ko (kilo octet) = 2
10
(1.024)o 10
3
o
1Mo (mega octet) = 2
20
(1.048.576)o 10
6
o
1Go (giga octet) = 2
30
(1.073.741.824)o 10
9
o
1To (tera octet) = 2
40
(1099511627776)o 10
12
o

nvenii de memorare a informaiei n calculator
Memoria intern a unui calculator este alctuit dintr-o succesiune de
locaii; fiecare locaie are un numr fix de bii, numr stabilit de ctre
proiectantul de arhitectur n momentul n care se decide modul de
organizare a memoriei. Astfel, n mod uzual numrul de bii ai unei locaii
este un multiplu de 8. Locaia este unitatea elementar de adresare a unei
memorii; la majoritatea procesoarelor (cu excepia microcontrolerelor)
informaia din memorie nu se poate adresa la nivel de bit. Indexarea
locaiilor de memorie se face, pe baz de adres. La procesoarele Intel,
MIPS unitatea minim de adresare (locaia de memorie) are 8 bii. n acelai

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 27
timp
ai
semnificativ n poziia stng. Importana acestei convenii se remarc n
cazul operaiilor logice de deplasare i rotire spre dreapta sau spre stnga.

ns memoria se poate adresa la nivel de semi-cuvnt (halfword 16
bii), cuvnt (word 32 bii) sau dublu-cuvnt (double 64 bii).
Ca n cazul oricrui sistem de numeraie poziional (8,10,16) i n
cazul sistemului binar bitul cel mai puin semnificativ al unui octet (bitul
D
0
) se afl n poziia cea mai din dreapta a datei, iar bitul cel m

c o dat este reprezentat pe un nu Da mr mai mare de octei atunci se
pune problema modului de amplasare a octeilor la adrese consecutive de
memorie (aa ordine a octeilor). Procesoarele pot numerota octeii
din interiorul unui cuvnt de 32 de bii astfel nct octetul cu numrul cel
ai mic este fie cel mai din stnga fie cel mai din dreapta. Exist dou
conve ii
- tiv a numrului se pune la
adrese mai mici (se pune n faa).

Byte #
numit
m
n de reprezentare:
big endian partea mai semnifica
0 1 2 3

eaz
la adrese mai mici (se pune n fa).

Byte #
- little endian partea mai puin semnificativ a datei se amplas
3 2 1 0



De exemplu n convenia little endian o valoare hexazecimal de
forma 11223344h se memoreaz la adresa fizic 400h n felul urmtor:




U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
28 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
De exemplu, procesoarele Alpha, Intel i MIPS folosesc convenia
little-endian, n timp ce n cazul procesoarelor MacIntosh, HP Bobcat sau
SPARC ordinea folosit este big-endian.

Cl f
tete c una din funciile de baz ale calculatorului este de
prelucrar r. Pentru a putea fi prelucrate, informaiile trebuie
reprezentate (codificate) ntr-un anumit format, pe baza unor reguli bine
definite i lipsi d rezentare a informaiilor
depinde de tipul o prioritare urmrite.
Inform
- program
-
semn numere naturale
semn numere ntregi
arte ntreag i parte fracionar (practic
a numerelor fracionare)
o multimedia
in care
asi icare
Se reamin
e a informaiilo
te e ambiguiti. Modul de rep
inf rmaiilor i de obiectivele
aiile prelucrabile pe un calculator sunt de mai multe tipuri:
(executabil) secven de coduri de instruciuni
date:
o numerice:
ntregi
fr
cu
reale numere cu p
sunt numere din mulimea Q
o alfanumerice text
o logice adevrat/fals
audio
video
imagini statice
secven de cadre (film)
o semnale mrimi fizice de proces, detectate prin senzori sau
transmise prin elemente de acionare

Interschimbarea noiunilor dat respectiv informaie este larg
rspndit n lumea larg, nefcndu-se distincie de cele mai multe ori ntre
ele, fiind tratate ca i sinonime. n realitate ns [Bel04], exist diferene
ntre cele dou noiuni: informaia are un coninut semantic (obinut n
urma unui proces de interpretare), pe cnd data este forma fizic de
reprezentare a unei informaii. Potrivit cercettorului Russell Ackoff
[Ack89] coninutul minii umane poate fi clasificat n 5 categorii (fiecare
categorie bazndu-se pe cele de dinaintea sa): date, informaii, cunoatere,
nelegere i nelepciune. Se pune ntrebarea ce decurge din aceste
observaii: Calculatorul prelucreaz date sau informaii? Dac se consider
n mod simplist c un program specific o secven de transformri pr

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 29
trec d
ate fi o valoare de
tempe
cifrei 1 ( xist ns i cazuri, mai ales n
dome torul identific
i per ii, care nu mai sunt simple date.
forme
de re z Alegerea unei anumite forme de codificare se
face n funcie de anumite obiective urmrite, cum ar fi:
reprezentarea coerent, a informaiilor n vederea stocrii,
simplificarea operaiilor de prelucrare, stocare i transmitere
oluri i un set de reguli pentru reprezentarea
oluri (numere
derate (Ex: bina
i neponderate (Ex: codul Gray). Un sistem ponder
i i t o p enta onderile sunt
va nsiderndu-se baza
eraie ponderat se
defin te n felul urmtor:
x
n
*b +...x
2
*b +x
1
*b +x
0
(3)
Codurile neponderate a fiecr cimale o tetrad binar,
cifrele binare neavnd ns semnificaia unor ponderi. Codul Gray are
atele iniiale n scopul generrii unui rezultat, atunci se poate spune c
un calculator prelucreaz date. Prin interpretarea datelor un utilizator le
transform ns n informaie. De exemplu data 49 po
ratur, o vrst, o poziie ntr-un ir, o dimensiune sau codul ASCII al
49=0x31) vzut ca i caracter (1). E
niul inteligenei artificiale [Seb, Gor05], n care calcula
cepe anumite concepte sau rela
Pentru fiecare tip de informaie [Seb] exist una sau mai multe
pre entare (codificare).
transmiterii i a prelucrrii acestora
utilizarea eficient a spaiului alocat (spaiu minim)
detecia i corecia erorilor

securizarea datelor
2.1.1. REPREZENTAREA INFORMAIILOR NUMERICE
FR SEMN. SISTEME DE NUMERAIE
Pentru reprezentarea valorilor numerice se pot folosi diferite
sisteme de numeraie [Gor05, Seb, Mr96]. Un astfel de sistem este definit
printr-un set finit de simb
valorilor prin combinaii de simb i litere). Se cunosc dou
tipuri de sisteme de numeraie: pon r, zecimal, hexazecimal)
at de numeraie atribuie
egul, p ponderi pentru fiecare pozi e d n r- re rez re. De r
puteri cresctoare ale unei valori; aceast loare co
sistemului ponderat de numeraie. Un sistem de num
e
- simboluri: 0, 1, 2, 3, ... (b-1) (1), unde b reprezint
baza sistemului de
numeraie
- reprezentare: N
b
x
n
...x
2
x
1
x
0
, x
n
0 (2)
- calculul valorii: N
b
=
n 2 1

sociaz ei cifre ze

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
30 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
caracteristic faptul c fiecare ecimal, reprezentat pe 4 cifre binare,
difer de urmtoarea cifr z , prin m ificarea unei singure cifre
binare din tetrad i a fost introdus pentru a minimiza o serie de erori n
proiectarea automatelor.

Zecimal
cifr z
ecimal od
Gray
0000 0
0001 1
0011 2
0010 3
0110 4
0111 5
0101 6
0100 7
1100 8
1101 9
Tabelul 2.1. Echivalena cod Gray zecimal
temul de numeraie binar este practic cel mai potrivit pentru
area valorilor num
Sis
reprezent erice ntr-un calculator. Exist dou explicaii
pentr
ului binar de numeraie const n numrul mare
de cif n valori (mai mare dect
n ori a eraie).
Pentru
n simbol suplimentar, i anume punctul zecimal. Toate cifrele care
cu puteri negative ale bazei,
u aceast alegere:
- Simplitatea implementrii folosind circuite care au 2 stri stabile
corespunztoare celor dou simboluri ale sistemului binar 0 i 1.
- Reguli de efectuare a operaiilor aritmetice mult mai puine dect
n oricare alt sistem de numeraie, ceea ce simplific structura
unitii aritmetice.
n sistemul binar pentru reprezentarea ntregilor fr semn (naturale) b
din (1) este egal cu 2. Pentru numerele ntregi fr semn pe n bii pot reine
2
n
numere n intervalul 02
n
-1. Dac A este un ntreg fr semn rezult c
numrul de bii pe care poate fi reprezentat este: n
b
= [log
2
A] + 1.
Demonstraia se bazeaz pe faptul c orice numr natural (fie A n acest caz)
poate fi ncadrat ntre dou puteri consecutive ale lui 2 (2
n
b
-1
A < 2
n
b
).
Dezavantajul sistem
re ecesare pentru reprezentarea unei anumite
ce lt sisteme de num
reprezentarea numerelor cu parte fracionar s-a introdus nc
u
urmeaz dup punctul zecimal sunt ponderate
dup cum urmeaz:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 31
- reprezentare: N
b
x
n
...x
2
x
1
x
0
.x
-1
x
-2
...x
-m

- calculul valorii:
N
b
= x
n
*b
n
+...x
2
*b
2
+x
1
*b
1
+x
0
*b
0
+ x
-1
*b
-1
+x
-2
*b
-2
+.... x
-m
*b
-m

Conversii ntre sisteme de numeraie
a) Din zecimal n binar
mr dintr-o baz de numeraie n alta se face separat
pentr cionar. Partea ntreag se divide
succe baz i se rein resturile pariale n ordinea invers a
gener tea fracionar se nmulete succesiv cu baza i se reine
de fiecare dat partea ntreag a rezultatului. Corectitudinea acestor tehnici
de conversie se demonstreaz matematic.
x
m-
)b+ ...+x
1
)b+x
0
Partea fracionar
.
x
-1
= [N
zec
b]
N b = x
[N
2z

xem 5
10
din zecimal n binar
se fac urmtoarele operaii:
Conversia unui nu
u partea ntreag i pentru partea fra
siv cu noua
rii lor. Par

Partea ntreag
N= (...(x
m
+0)b+
1
N=N
1
b+x
0
N
1
=N
2
b+x
1
...
N
m
= 0*b+x
m


N = N
ntr.
+N
zec.
N
zec
= x
-1
b
-1
+x
-2
b
-2
+ ..
zec
x =
-1
+N
2zec
-2 ec
.......
b]

De e plu pentru conversia numrului 23.4

23 23
10
= 10111
2
0,45 0,45
10
=0,01110...
2
11 1 0,9 0
5 1 1,8 1
2 1 1,6 1
1 0 1,2 1
0 1 0,4... .. 0


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
32 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Se observ c n cazul conversiei prii fracionare de cele mai multe
ori nu se obine un rezultat exact. Procesul de conversie se ncheie atunci
cnd se obine o precizie rezonabil de exprimare a valorii fracionare. De
exem
Poziia punctului zecimal nu se reprezint n calculator. Prin convenie
efinit. Pentru reprezentarea numerelor strict
l se consider n dreapta reprezentrii (dup
cifra
P
em de numeraie intermediar, care se apropie de
ambe
aia este prezentat n format
hexazecimal, chiar dac n calculator informaia exist n binar. Sistemul
octal i ulterior hexazecimal au fost introduse i datorit existenei
afioarelor cu 7 segmente.
onvertirea unui numr din sistemul binar n sistemul hexazecimal i
invers (vezi tabelul 2.2) se face prin gruparea biilor cte 4 (cele 16 cifre -
valori hexazecimale - sunt reprezentate pe 4 bii), ncepnd de la punctul
zecimal spre dreapt spre stnga i echivalarea cte unei cifre
hexazecimale cu o com i




plu n multe aplicaii inginereti o precizie de 2 cifre zecimale dup
virgul se consider o precizie acceptabil. ntrebarea este cte cifre binare
sunt necesare pentru o precizie similar? La exprimarea n baza zece, prin
dou cifre dup punctul zecimal se obine o eroare maxim de 1/100. n
baza 2 pentru o precizie similar trebuie s se utilizeze 7 cifre binare pentru
a obine o eroare maxim de 1/128, adic 1/2
7
. n mod similar pentru o
precizie mai mare de 1/1000 (3 cifre zecimale dup punct) sunt necesare 10
cifre binare (1/1024 = 1/2
10
).
se consider ntr-o poziie pred
ntregi poziia punctului zecima
cea mai puin semnificativ). Din aceast cauz aceast codificare
poart numele de "reprezentare n virgul fix". Pentru operaiile de
adunare i scdere poziia punctului zecimal nu influeneaz rezultatul
generat. Situaia este diferit pentru operaiile de nmulire i mprire, unde
poziia punctului n rezultat se schimb.

b) Din binar n hexazecimal
entru a face trecerea de la sistemul zecimal la cel binar i invers
adesea se utilizeaz un sist
le sisteme. De exemplu sistemul hexazecimal este utilizat n acest scop
deoarece, pe de-o parte permite exprimarea unor valori printr-un numr
redus de cifre, iar pe de alt parte se poate converti relativ simplu n
sistemul binar. n cazul n care se vizualizeaz coninutul unei zone de
memorie sau a unor regitrii inform

C
a i
binaie de 4 bi .

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 33

Hexa imal Zecimal Binar zec
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15
Tabelul 2.2. Echivalena binar hexazecimal zecimal.
Exemple de conversie binar hexazecimal i invers:
2.1.2 MN
te important s se stabileasc de la nceput
numrul de bii pe care se face reprezentarea.

1011.0011.1100.11
2
=> B3.CC
16
1FD
16
=> 1.1111.1101
2
101.1111.011
2
=> 5.F6
16
33.3
16
=> 11.0011.0011
2
. REPREZENTAREA NUMERELOR CU SE
Pentru reprezentarea numerelor pozitive i negative se aloc un bit
suplimentar, care indic semnul. Exist 3 forme de reprezentare a acestor
numere:
- prin semn i magnitudine (mrime) sau cod direct
- n complement fa de unu sau cod invers
- n complement fa de 2 sau cod complementar
Indiferent de reprezentare, bitul de semn este egal cu 0 dac numrul
este pozitiv i 1 dac numrul este negativ. Pentru evitarea ambiguitilor, la
acest tip de reprezentare es

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
34 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Rep
num
numere pozi
a re
10 2 10 2
129 -> 0000.0000.1000.0001 -129 -> 1000.0000.1000.0001
2
ii
entr
24 | -> 0001.1000 19 -> 0001.0011 |-127 | -> 0111.1111
d
complementar:
se oare.
i la
nt
1
rezentarea prin semn i magnitudine (SM) cod direct:
Se reprezint valoarea absolut a numrului pe n-1 poziii binare (n
rul total de bii ai reprezentrii) i se adaug un bit de semn (0 - pt.
tive i 1 pt. numere negative) pe poziia cea mai semnificativ
prezentrii. De exemplu:
-21
10
-> 1001.0101
2
17 -> 0001.0001 0 -> 0000.0000
(repre i) zentri pe 8 bi
129
10
-> valoarea absolut nu se poate reprezenta pe 7 bii (ca n cele
trei exemple anterioare) => reprezentarea se poate face numai
pe un numr mai mare de bii (minim 9)
10 2 10
(reprezentri pe 16 bii)
Dei aceast form de reprezentare este simpl, ea nu este
avantajoas pentru implementarea operaiilor aritmetice ntruct
unitatea aritmetico-logic ar trebui s in cont de semnul operanzilor.

Reprezentarea n complement fa de 1 (C1) cod invers:
Numerele pozitive se reprezint ca i n cazul anterior, adic n-1 b
p u valoare i 1 bit, egal cu 0 pentru semn. n cazul numerelor negative
se complementeaz fiecare poziie binar a reprezentrii valorii absolute a
umrului, inclusiv bitul de semn. De exemplu: n
|-
10 10 10
-24
10
-> 1110.0111 0001.0011 -127
10
-> 1000.0000

Se observ c -127 + 127 = 1111.1111. Dar x+x=0 = 0000.0000
xR Dezavantaj: Exist dou reprezentri ale numrului 0.

Reprezentarea n complement fa de 2 (C2) - co
Numerele ve int ca i cazu nteri poziti reprez n rile a
Reprezentarea numerelor negative se obine prin adugarea unei unit
eprezentarea n compleme fa de 1. De exemplu: r
|-21
0
| -> 0001.0101 15
10
-> 0000.1111 |-112
10
| -> 0111.0000

-21
10
-> 1110.1010+ C1 0000.1111 C1 -112
10
-> 1000.1111+ C1
1 1
-21
10
-> 1110.1011 C2 0000.1111 C2 -112
10
-> 1001.0000 C2


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 35
Reprezentarea n complement fa de 2 este avantajoas deoarece
simplific modul de calcul al operaiilor aritmetice. La operaiile de adunare
i scdere unitatea aritmetic nu trebuie s in cont de semnul operanzilor,
rezultatul generat fiind corect indiferent de semn. Mai mult rezultatul este
corec trict
pozitiv
adunar
:
umere cu semn Numere fr semn
1100.1111 ->207 207

nt fa de 2. Celelalte dou forme s-au folosit la primele
calcu
a reprezentarea n complement fa de 2, dac se trece de la o
rep p u m
extinderea semnului, nct n noua i
semnul numrului s se egula const n i de
semn n fiecare poziie iunii extinse.
t i n cazul n care se consider c reprezentrile sunt numere s
e. Pe baza acestei observaii se poate utiliza aceeai unitate de
e/scdere att pentru numere pozitive ct i pentru numere cu semn.
De exemplu

N
-64+ 1100.0000+ 192+
15 0000.1111 15
-49
0011.0001 -> 49

n ziua de azi toate calculatoarele utilizeaz reprezentarea n
compleme
latoare.
Observaie!!! Reprezentarea n cod complementar a unui numr
pozitiv nu nseamn complementarea numrului, ci reprezentarea sa n
form pozitiv, care este identic n cele trei forme de reprezentare (SM, C1
i C2).
L
rezentare e 8 bii la una pe 16 bii sa ai mare atunci este necesar
n aa fel reprezentare valoarea
pstreze. R copierea valorii bitulu
binar a por De exemplu:

Valoare Reprezentare C2 pe 8 bii Reprezentare C2 pe 16 bii
-6 1111.1010 1111.1111.1111.1010
0 0000.0000 0000.0000.0000.0000
6 0000.0110 0000.0000.0000.0110
Ta
Con
Consid e 8 bii
(a
7
a
6
a )
intervalului [
belul 2.3. Extinderea semnului la reprezentarea pe mai muli bii dect sunt
necesari

ver a n si din bi ar n zecimal a numerelor ntregi cu semn
ernd o valoare reprezentat n cod complementar p
1
a
0
rezult c valoarea corespondent n zecimal aparine
-2
7
, 2
7
-1]. Conversia se realizeaz n urmtorii pai:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
36 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
1. Se e
atunci numrul reprezentat este pozitiv i se poate
tarea n cod complementar a numrului
agnitudinea (valoarea absolut) se determin cu formula:
. n final dac numrul iniial este negativ atunci valorii absolute
ntruct cel mai semnificativ bit este 1 rezult c numrul este negativ.
Se determin reprezentarea n cod complementar a numrului pozitiv care
niial (11000111) fiind negativ
rezult c valoarea ntreag corespondent n zecimal acestuia este 57.
e utilizeaz pentru reprezentarea unor
valori foarte mari, foarte mici sau dac merele au o parte fracionar.
Pentru reprezentarea n virgul rul este adus la o form
norm o parte strict subunitar (mantisa) care
se nm antis prima cifr de
dup
f reprezint partea fracionar a lui N
xamineaz cel mai semnificativ bit.
Dac a
7
=0
trece la determinarea magnitudinii sale (vezi pasul 2).
Dac a
7
=1 atunci numrul reprezentat este negativ. n acest caz
se determin reprezen
pozitiv care are aceeai magnitudine i se calculeaz mrimea
acestuia.
2. M
a
6
2
6
+ a
5
2
5
++ a
0
2
0
(practic se adaug puterile lui 2 acolo unde
coeficienii a
i
sunt 1).
3
determinate la punctul 2 i este prefixat simbolul .
Exemplu:
Se d exprimat n cod complementar numrul: 11000111. S se
determine valoarea lui n zecimal.

are aceeai magnitudine i anume: 00111000+1=00111001. Magnitudinea
acestuia este: 2
5
+ 2
4
+2
3
+2
0
=57. Numrul i
2.1.3. REPREZENTAREA NUMERELOR N VIRGUL
FLOTANT. FORMATUL IEEE 754
Aceast form de codificare s
nu
flotant num
alizat (standard) n care exist
ulete cu o putere a lui 2 (exponentul). La m
virgul este strict diferit de 0.
N
e
=1,f2
unde,
N este numrul reprezentat n virgul mobil
1,f se numete mantis i trebuie s respecte relaia de normalizare:
1 | 1,f | < 2

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 37
2 baza sistemului de numeraie
e reprezint exponentul bazei sistemului de numeraie

IEEE (Institute of Electrical and Electronics Engineers) a dezvoltat un
standard pentru reprezentarea numerelor n virgul mobil i operaiile
aritm litarea portabilitii
programe
n 1985. ulte coprocesoare aritmetice, printre care i cele Intel
pentr a
n reprez sesc 3 cmpuri (vezi tabelul 2.4):
- un bit de semn (S) indic semnul numrului
- un r agnitudinea
num
ifre

etice n aceast reprezentare. Scopul era faci
lor ntre diferite calculatoare. Standardul IEEE 754 a fost publicat
Cele mai m
u f milia de microprocesoare 80x86, se conformeaz acestui standard.
entarea standard IEEE se folo
cmp pentru exponent (ca acteristic) indic m
rului
- un cmp pentru mantis (fracie) indic un set de c
semnificative ale numrului
31 30...23 22.0
S Caracteristic Fracie
T
recizie) 32 bii 1 semn + 8
tic + 56 mantis
deplasat. Pentru formatul scurt,
depla iar pentru formatul lung deplasamentul este
1023 xime (255, respectiv 2047) ale
carac
cuprins
reprezentate n precizie dubl este cuprins ntre 2,210
-308
i 1,710
308
.
Muli echivaleaz n mod greit reprezentarea n virgul flotant cu
mulimea numerelor reale din matematic. Exist cteva deosebiri eseniale:
abelul 2.4. Reprezentarea unui numr n virgul mobil simpl precizie
Standardul definete trei formate:
Formatul scurt (simpl p
caracteristic + 23 mantis
Formatul lung (dubl precizie) 64 bii 1 semn + 11
caracteristic + 52 mantis
Formatul temporar (precizie extins) 80 bii 1 semn + 24
caracteris
Caracteristica reprezint exponentul
samentul este 127 (7Fh),
(3FFh). Valorile minime (0) i cele ma
teristicii nu sunt utilizate pentru numerele normalizate, ele avnd
utilizri speciale.
NS = (1)
S
Mantis 2
Caracteristic-127
ND = (1)
S
Mantis 2
Caracteristic-1023
Gama numerelor care pot fi reprezentate n precizie simpl este
ntre aproximativ 2,210
-38
i 3,410
38
, iar cea a numerelor

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
38 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
- n virgul flotant se reprezint valori discrete i nu domeniu
continuu de valori (submulimi de numere raionale a mulimii
numerelor reale)
- nu pot fi reprezentate numere foarte mari sau foarte mici; de
- rezoluia absolut de reprezentare variaz cu valoarea reprezentat
poate genera surprize datorit
ilor
Op

astf
re.
unztoare exponentului mai mare.
te, atribuind exponentul comun.
a concomitent cu modificarea

- Adunarea (scderea) exponenilor.
mprirea) mantiselor.

Exe Mr96]:
S re rezint l mobil simpl precizie:
= 01 2
4
001
exponentul = 4
Semn
Carac is e
31 30.23 22.0
exemplu sunt probleme n ceea ce privete reprezentarea valorii
zero i a valorilor +/-
- compararea a dou valori flotante
preciziei de reprezentare i a rotunjir

eraii efectuate n virgul mobil
Adunarea i scderea a dou numere n virgul mobil se efectueaz
el:
- Se compar cei doi exponeni pentru a-l determina pe cel mai ma
- Se aliniaz mantisa numrului cu exponent mai mic, prin deplasarea
virgulei coresp
- Se adun / scad mantisele alinia
- Eventual se normalizeaz mantis
exponentului.
nmulirea i mprirea presupun:
- nmulirea (
- Eventuala normalizare a mantiselor.
mple [
se p e numerele n virgu
a) 25
10
(11001)
2
= 1,10
unde:
mantisa = 1,1
fracia = 1001

ul = 0
ter tica = expon ntul + 127 = 131

0 10000011 100100.0


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 39
1
2 2
5 4 3 2 1
5
2

= = b)
0 4
2 1111 , 1 11111 , 0 2 2 2 2
2

= = + + + +
nd :
mant
fraci 1
expon tu
Semnul = 0
Caracteristica = exponentul + 127 = 126
.23 22.0
1 2 3
2 2 2 2 31 + + + +
2 32

u e
isa =
a
1,1111
=
en
111
l = -1



31 30
0 01111110 11110.0

c)
3
2 2
3
3
2 0 , 1 001 , 0 2
2

= = =
0
2 8
1
=
unde:
manti =
fracia = 0

sa 1,0
exponentul = -3
Semnul = 1
Caracteristica = exponentul + 127 = 124

31 30.23 22.0
1 01111100 00000.0

Dac se urm t u e trei numere
exprimate mai sus: 25 - 1/8 rezult se obine:
25 - 1/8 = 1,1001 2
4
1,0 2
-3
=1,1001 2
4
0,0000001 2
4
=1,1000111
31 30.23 22.0
re e acum ad narea a dou din cel
2
4
= 11000,111
2
= 24,875
Reprezentarea n virgul mobil a rezultatului este:

0 10000011 10001110.0

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
40 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
2.1.4. EZENTAREA INFORMAIILOR
ALF DARDUL ASCII
b form de text
i even
dimensiunea unui caracter. Cel mai utilizat s entru reprezentarea
informaiilor a n standardul Ame Standard
Coding for Info ation Inte nge). Acest s dard utilizea bii pentru
reprezentarea codurilor alfanumerice (8 bi n varianta extins). Sunt
codificate urm rele tipur date:
- litere ri i mici
- cifre zecimale
- semne de punctua
- coduri de editare i formatare a te
- co erulu
Tabelul 2.5 conine cteva exemple de coduri ASCII:

Litere
REPR
ANUMERICE STAN
Informaiile alfanumerice sunt cele care se prezint su
tual conin o grafic simpl bazat pe forme grafice predefinite de
istem p
SCII ( lfa umerice este A rican
rm rcha tan z 7
i
toa i de
ma
ie
xtului
duri de control al transf i de date
Cifre
A 41h 0 30h
B 42h 1 31h
C 43h 2 32h
.... ...
a 61h 9 39h
b 62h
Coduri de formatare
c 63h spaiu 20h
.... CR- retur 0Dh
Semne de punctuaie
LF linie nou 0Ah
. 2Eh
, 2Ch
Coduri de control al
transferului
Operaii aritmetice
XON- pornire
11h
transmisie
+ 2Bh
transmisie
13h
XOFF- oprire
- 2Dh

Tabelul 2.5. Reprezentarea unui numr restrns de caractere din codul ASCII
Standardul "unicode" extinde codificarea ASCII prin adugarea unui
octet suplimentar. Astfel anumite litere speciale (litere greceti, litere arabe,
litere cu semne speciale, etc.) sau semne grafice sunt reprezentate pe 16 bii.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 41
2.1 AREA MAI
Se spune c o im rul este c
pentru rea formaii multimedia sp sar pentru
memorare este semnificativ mai mare dect pentru alte tipuri de informaie.
De exemp entru m a unei imagini spaiu rie variaz
(funcie de rezoluie) ntre cteva sute de koctei i civa megaoktei (vezi
tabelul 2.

Tip de informaie Detalii Cantitatea ie
.5. REPREZENT INFOR ILOR MULTIMEDIA
agine valoreaz ct 1000 de cuvinte. Adev
reprezenta unor in aiul nece
lu p emorare l de memo
6).
de informa
logic bit 1 semnal bipoziional 1
numeric 1 ntreg 16-32 bii
text 1 pagin ~1 KOctet
audio 10 sec., Fmax=20KHz 400 KOctei
video 10 sec.
Fcadre=50Hz100Hz
Rez.=1000*1000
1,5 GOctei
Tabelul 2.6. Cantitatea de informaie (spaiu necesar pentru stocare)
Informaiile multimedia (imagini i/sau sunete) sunt reprezentate
prin eantioane ale semnalului de intrare. Frecvena de eantionare
trebuie s fie n strict corelaie cu frecvena maxim a semnalului de
intrare. Conform teoremei lui Shanonn frecvena de eantionare trebuie s
fie de cel puin dou ori mai mare dect maximul frecvenei semnalului de
intrare [Nic04]. n caz contrar reprezentarea nu este fidel cu realitatea;
apar frecvene inexistente n semnalul iniial (fenomenul de "aliasing"). n
general, se utilizeaz o frecven a semnalului de eantionare cam de 10 ori
frecvena semnalului de intrare, minim de 5 ori din motive de cost (pentru
costuri reduse) i se poate ajunge chiar i la 100 ori.
Semnalul audio este eantionat n timp cu o frecven cuprins ntre
8kHz i 50KHz [Seb, Gor05], funcie de calitatea reprezentrii. Frecvena de
8KHz este acceptabil pentru convorbiri telefonice (unde limea de band
este limitat la 4 KHz), iar frecvene de 40-50KHz sunt necesare pentru
semnale audio de nalt fidelitate (urechea uman detecteaz semnale de
maxim 16-20kHz). Pentru un eantion se aloc de obicei 8 bii asigurndu-
se astfel o plaj de valori pentru variaia de amplitudine de 256 de valori,

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
42 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
sufici
rea iniial. Majoritatea schemelor de compresie sunt cu
pierd erea fidel a semnalului
sonor tip de informaie acest fapt
nu es
b/negru numrul de bii
aloca
esit un spaiu de memorie de: (3
octei/pixel)*(1000 pixeli/linie)*(700 linii/cadru)*(50 cadre/sec.)*10
secunde = 1.050.000.000 octei =1Goctet. Este de remarcat faptul c
calculatoare personale actualele nu dispun de o memorie intern care
de 100 de minute necesit
r video se impune utilizarea
unor metode eficiente de compactare, care s reduc spaiul necesar de
memo
ent pentru majoritatea aplicaiilor uzuale. n aceste condiii pentru
memorarea unui semnal sonor de 10 secunde este nevoie de 80-500Koctei.
Pentru reducerea spaiului de memorare se folosesc diferite tehnici de
compresie, prin care acest spaiu se poate reduce pn la aproximativ o
zecime din valoa
ere de informaie, adic nu garanteaz refac
n urma decompactrii. Dar pentru acest
te un impediment, mai mult chiar, algoritmii de compactare au i un
efect de filtrare a semnalului audio.
n cazul informaiilor video se utilizeaz tot un proces de eantionare
n timp a semnalului video de intrare. n acest mod informaia video este
mprit pe puncte (pixeli), linii i cadre. O imagine are o anumit
rezoluie dimensional i cromatic. Rezoluia dimensional se definete
pe dou direcii:
- orizontal numr de pixeli pe o linie i
- vertical numr de linii pe un cadru
Rezoluia cromatic este determinat de numrul de bii alocai
pentru reprezentarea unui pixel. La imaginile al
i variaz de la 1bit/pixel la 8 bii/pixel (imagini cu nuane de gri). O
rezoluie mai mare nu este necesar deoarece ochiul uman nu percepe mai
multe nuane de gri. Pentru imaginile color se aloc separat bii pentru
cele 3 culori de baz (rou, verde i albastru) sau pentru tripletul culoare /
luminan / intensitate.
Pentru imagini n micare (film) se achiziioneaz cadre (imagini
statice) cu o frecven de eantionare cuprins ntre 10Hz (film de slab
calitate, transmisibil pe o legtur Internet de mic vitez) i 50-70Hz (film
de calitate TV sau chiar mai bun) [Seb, Gor05].
n aceste condiii memorarea unei informaii video de 10 secunde la o
rezoluie i calitate acceptabil nec
s memoreze o astfel de informaie (un film
600 Goctei). De aceea i n cazul informaiilo
rare. Majoritatea metodelor de compactare sunt cu pierdere de
informaie; pentru un factor de compactare mai mare se face un compromis
n ceea ce privete calitatea imaginii.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 43
2.2. CODIFICAREA INFORMAIEI
Se numete cod, un set de simboluri elementare mpreun cu o serie
de reguli potrivit crora se formeaz aceste simboluri [Mr96]. Codificarea
repre teaz prin X={x
1
, x
2
,
, x
n
Y={y
1
, y
2
,
, y ul, atunci
codif e de
simbo
Func
secve ntr-o form
neleas de utilizator.
Obiectivele unui sistem de codificare sunt:
or ntr-o form ct mai simpl
2. facilitarea implementrii operaiilor aritmetice i logice
ECIMALE
vitate conversiile repetate din
zecim

0 -> 0000 , 1 -> 0001 , 2 -> 0010 , ..... 9 -> 1001 ; celelalte
Procesoarele Intel au instruciuni n limbaj de asamblare care suport
opera
zint procesul de stabilire a unui cod. Dac se no
} mulimea datelor n forma accesibil utilizatorului, iar cu
m
} mulimea simbolurilor interpretate de sistemul de calc
icarea reprezint asocierea fiecrui element x X unei secven
i
luri y
j
Y; n acest caz, codul este o funcie bijectiv f : X Y.
invers f
-1
: ia Y X reprezint procesul de decodificare a
nelor de simboluri utilizate de sistemul de calcul
1. reprezentarea informaiil
3. detecia i corecia erorilor (paritate, CRC, suma de control)
4. utilizarea unui spaiu minim de memorare (compactarea
informaiei)
5. protecia mpotriva accesului neautorizat (securitate)
2.2.1. CODURI Z
Pentru anumite aplicaii este important ca datele numerice s se
pstreze n form zecimal. n acest fel pot fi e
al n binar i invers. O posibilitate este utilizarea a 4 bii pentru a
reprezenta cele 10 cifre zecimale (0, 1, ... 9). Reprezentarea poart numele
de codul BCD Binary Coded Decimal. Acest cod este asemntor cu
reprezentarea hexazecimal cu diferena c se utilizeaz numai primele 10
combinaii de bii:
10 2 10 2 10 2 10 2
combinaii sunt nepermise (ex. 1010, ... 1111)

ii aritmetice n reprezentarea BCD. Codurile cifrelor zecimale se
pstreaz fie individual pe cte un octet (forma despachetat), fie cte 2
cifre pe un octet (forma mpachetat).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
44 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
2.2.2. CODURI PENTRU DETECTAREA I CORECTAREA
ERORILOR
transm
emisi
respe
[M

RC) este metoda cea mai folosit
corec
frecv
le erori avnd posibilitatea de a
corecta o eroare ap t la interse i coloanei detectate ca
ectnd paritatea.
Exist mai multe modaliti de detectare a erorilor n cadrul
isiei, bazate n general pe ataarea unor cifre binare de control la
a mesajului prezentat sub form binar; recepia va controla modul de
ctare a corectitudinii mesajului. Cele mai utilizate procedee sunt
r96]:
Codurile de control a paritii: la emisia unei succesiuni de cifre
binare a
1
, a
2
, , a
n
se ataeaz o cifr binar de control a
n+1
aleas
astfel nct numrul total de cifre binare de 1 s fie par sau impar, n
funcie de convenia de paritate stabilit. Are o eficien sczut
ntruct detecteaz numai erorile care au un numr impar de bii
modificai (1, 3, ...).
Detecia bazat pe distan Hamming (d numrul minim de bii
prin care difer doua coduri valide.
Codurile polinomial ciclice (C
pentru detectarea erorilor grupate. naintea transmiterii, informaiei i
se adaug bii de control, iar pe baza acestora, la dac la recepionarea
mesajului se detecteaz erori, atunci acesta trebuie retransmis. O
informaie pe n bii poate fi considerat ca lista coeficienilor binari ai
unui polinom cu n termeni, deci de grad n-1.
Exemplu: 110001 x
5
+ x
4
+ 1
Pentru a calcula biii de control se va efectua un anumit numr de
operaii cu aceste polinoame cu coeficieni binari. Operaiile se vor
efectua modulo 2, adunarea i scderea nu va ine seama de cifra de
transport, deci toate operaiile de adunare i scdere sunt identice cu
operaia XOR. Pentru generarea i verificarea biilor de control att
sursa ct i destinaia mesajului utilizeaz un polinom generator.
Exist i coduri care dup detectarea erorilor ofer posibilitatea
trii unei singure cifre binare detectat incorect. Dintre cele mai
ent utilizate se pot meniona:
Codurile de paritate ncruciat. n acest caz succesiunea de cifre
binare este divizat n secvene binare de aceeai lungime. La emisie,
fiecrei linii i coloane li se ataeaz o cifr de control conform
paritii stabilite. La recepie, prin controlul paritii pe fiecare linie i
coloan, se detecteaz eventuale
ru cia liniei
neresp

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 45
Codu i de date
i 3 it
perm estuia (prin complementarea poziiei eronate).
Structura codului Hamming este:

l Hamming 4+3 (ataeaz la emisie pentru fiecare 4 bi
bii de control) asigur detecia poziiei bitului eronat i implic
ite corectarea ac
c
1
c
2
a
3
c
4
a
5
a
6
a
7
unde,
a
3
, a
5
a
7
este mesajul (datele) de transmis
c
1
, c
2
, c
4
reprezint cifrele de control, care se determin astfel:
ing mrete secvena binar
ce ult mai riguros. La recepia
secvenelor binare, la fiecare grup de 7 cifre se procedeaz astfel:
Se ca ele:
+ a + a
fiecare sum cu 2
0
, 2
1
, 2
2
:
n
0
= 2
0
S
0
n
1
= 2
1
S
1
2
sajul
recepionat este corect, n caz contrar aceasta reprezint poziia care
este eronat.
2.3. OPERAII LOGICE PE BII. FUN II LOGICE.
2.3.1. FUNCIA I LOGIC (AN
AND
c
1
= a
3
+ a
5
+ a
7
c
2
= a
3
+ a
6
+ a
7
= a c
4 5
+ a
6
+ a
7
Se observ c transmisia prin codul Hamm
se transmite cu 75%, dar ofer un control m
lculea sum z
S = c + a
0 1 3 5 7
= 2c
1
S
1
= c
2
+ a
3
+ a
6
+ a
7
= 2c
2
S
2
= c
4
+ a
5
+ a
6
+ a
7
= 2c
4
Se pondereaz
n
2
= 2 S
2
Se calculeaz n
0
+ n
1
+ n
2
; dac aceast sum este 0 atunci me
C
D)
A B
0 0 0
0 1 0
1 0 0
1 1 1

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
46 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
2.3.2. FUNCIA SAU LOGIC (OR)

OR A B
0 0 0
0 1 1
1 0 1
1 1 1
2.3.3. FUNCIA NOT LOGIC

A NOT
0 1
1 0
2.3.4. FUNCIA SAU EXCLUSIV (XOR)

XOR A B
0 0 0
0 1 1
1 0 1
1 1 0

Regu

Figura 2.1 ncearc s dea o interpretare grafic (bazat pe mulimi i
pe operaiile dintre acestea reuniune, intersecie, diferen) a primei reguli
a lui De Morgan. Cercul mare reprezint mulimea tuturor cazurilor posibile.

lile lui De Morgan
1. NOT (A AND B) = (NOT A) OR (NOT B)
2. NOT (A OR B) = (NOT A) AND (NOT B)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 47

Figura 2.1. Verificarea regulii lui De MORGAN NOT (A AND B) = (NOT A) OR (NOT B)
2.4. EXERCIII I PROBLEME
1. S se converteasc urmtoarele numere din baza 10 n baza 2 i n baza
16:
0, 1, 1243, 256, 2048, 5655, 123.14, 33.125, 25675, 675.625

2. S se converteasc urmtoarele din baza 2 n baza 10 i 16:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
48 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
110100001100, 101.111011, 110011.11
S se exprime n hexazecimal urmtoarele iruri de caractere:
ABCDEF, hello. Artai cum vor fi stocate n memorie aceste iruri
tiind c procesorul Intel folosete convenia little endian.

3. S se converteasc urmtoarele numere din hexazecimal n binar:
AFE, ABC1, 12BD, E000,

4. S se evalueze numrul de bii necesari pentru a reprezenta numere
ntregi n intervalele:
0-100, 0-1000, 300-400, -100 +100

5. S se reprezinte urmtoarele numere n semn i mrime, complement fa
de 1 i complement fa de 2, pe 8 bii:
0, 13, -100, -44, -1, -130

6. S se precizeze domeniul maxim de valori ce se poate reprezenta pe un
octet i pe 2 octei dac se consider reprezentarea numerelor strict pozitive
i respectiv a numerelor cu semn.

7. S se reprezinte urmtoarele numere n virgul flotant simpl precizie:
1, 0.000023, 100000.000001, 13,4
S se comenteze limitrile reprezentrii n virgul flotant: domeniul maxim
de valori, valoarea minim reprezentabil n valoare absolut, pasul minim
ntre dou valori mari consecutive, etc.

8. S se descrie n pseudocod cteva tehnici de compactare a informaiei
(ex: codificarea secvenelor lungi de aceeai valoare, codificarea variaiilor
ntre eantioane consecutive, etc.)

9. Se vor vizualiza date din memoria i registrele calculatorului, folosind un
program de depanare (SPIMSal, TD, LC2, etc.).

10. Se va evalua necesarul de spaiu de memorie pentru diferite tipuri de
aplicaii (aplicaii care prelucreaz informaii numerice, grafic,
alfanumerice sau multimedia).

11. Probleme de conversie dintr-o baza in alta: Scriei un program care
convertete numere ntregi n i din binar, zecimal i hexazecimal.
Programul poate fi scris fie n Java, C++ sau C i vor exista trei argumente
n linia de comand care apeleaz executabilul realizat.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Reprezentarea informaiilor. Conversii de valori ntre sisteme de numeraie. Aritmetic
binar. Operaii logice 49
a) Un caracter care simbolizeaz din ce sistem de numeraie se face
conversia: - h pentru hexazecimal, d pentru zecimal sau b pentru binar.
b) Un alt caracter care exprim sistemul de numeraie destinaie: h, d sau b.
c) Un ir de digii (cifrele 09 i eventual literele AF) reprezentnd
numrul supus conversiei
Programul va afia pe ecran (ieirea standard a sistemului) unul din
urmtoarele mesaje:
Dac argumentele sunt date corect, se afieaz un mesaj care conine:
sistemul de numeraie surs, numrul iniial n acest sistem, sistemul de
numeraie destinaie i numrul n sistemul de numeraie final (De
exemplu: 16 n decimal este 10000 n binar).
Altfel, se afieaz un mesaj de ajutor pentru utilizarea parametrilor de
comand ai programului (De exemplu: Folosii java hex [ h | d | b
] [ h | d | b]).
Considernd c programul este scris n java i numit hex.java se dau n
continuare cteva secvene de apel cu rezultatele obinute.
% java hex b d 1010
1010 n binar este 10 n zecimal
% java hex h d 123456
123456 n hexazecimal este 1193046 n zecimal
% java hex d h 12345678
12345678 n zecimal este bc614e n hexazecimal
% java hex a b 123
Folosii java hex [ h | d | b ] [ h | d | b]
% java hex h d bc614e
bc614e n hexazecimal este 12345678 n zecimal

12. Scriei un algoritm eficient din punct de vedere al reprezentrii n
memorie pentru rezolvarea problemei 2
n
cu n foarte mare, n100.
Determinai numrul de digii pe care se reprezint numrul rezultat. Ca i
indicaie, se poate folosi aproximarea grosier 2
10
1000.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
3. STRUCTURI LOGICE DIGITALE.
TRANZISTORI. PORI LOGICE. STRUCTURI
LOGICE COMBINAIONALE. UNITATEA
ARITMETICO-LOGIC
3.1. TRANZISTORUL
Tranzistorul este un dispozitiv electronic, semiconductor, inventat la
laboratorul de telefonie Bell din New Jersey n decembrie 1947 de ctre
cercettorii n fizic John Bardeen, Walter Houser Brattain, i directorul
celor doi, William Bradford Shockley [Wik]. Pentru invenia lor cei trei au
fost recompensai n 1956 cu premiul Nobel. Descoperirea tranzistorului a
determinat dezvoltarea electronicii, acesta fiind considerat una din cele mai
mari descoperiri ale erei moderne. Tranzistorul poate fi folosit att n
domeniul analogic pentru a amplifica, stabiliza sau modula diverse semnale
electrice ct i n cel digital pentru comutare.
Din punct de vedere al complexitii microprocesoarelor se poate
spune c numrul tranzistorilor integrai ntr-un cip se dubleaz la fiecare 18
luni. Afirmaia aparine lui Gordon Moore i dateaz de la mijlocul anilor
60. Dup cum se poate observa din urmtorul tabel afirmaia este pe deplin
justificat de implementrile comerciale [Katz05].

Anul
lansrii
pe pia
Denumire
procesor
Numr de
tranzistori
ncorporai /
Tehnologia
de integrare
Frecvena
procesorului
Magistrala
de date
1971 Intel 4004 2300 / 10m 108KHz 4-bii
1972 Intel 8008 3500 / 10m 200KHz 8-bii
1974 Intel 8080 6000 / 6m 2MHz 8-bii
1978 Intel 8086 /
8088
29000 / 3m 4.77-10MHz 16-bii.
Implementat
n primul
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 51
calculator
personal IBM.
1982 Intel 80286 134000 /
1.5m
12.5-20MHz 16-bii
1985 Intel
80386DX
275,000 /
1m
33MHz 32-bii
1989 Intel
80486DX
1200000 /
0.8m
25-100MHz 32-bii.
Primul
procesor care
ncorporeaz
o memorie de
tip cache.
1993 Intel
Pentium
3100000/
0.5m
60-133MHz 32-bii
1995 Intel
Pentium Pro
5500000 /
0.35m
200MHz 32-bii
1997 Intel
Pentium II
7500000 /
0.35m
233-333MHz 32-bii
2000 Intel
Pentium III
28000000 /
0.18m
733MHz-
1.2GHz
32-bii
2001 Intel
Pentium 4
ver.
Northwood
42000000 /
0.18m
1.6 GHz 32-bii (din
2000 apare
versiunea
Itanium pe 64
de bii)
2003 Intel
Pentium 4
ver.
Northwood
Hyperthread
55000000 /
0.13m
2 3.4 GHz 32-bii
2004 Intel
Pentium 4
ver. Extrem
Edition
Hyperthread
178000000 /
0.09m
2,8 - 3,4GHz 32-bii
Tabelul 3.1 Procesorul Intel tendine tehnologice
Referitor la tabelul 3.1 sunt civa parametri care vor fi nelei mai
bine dup parcurgerea acestui capitol.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
52 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Dimensiunea tehnologiei de integrare reprezint o caracteristic
important n evaluarea i creterea performanei arhitecturilor de
calcul i implicit al memoriilor de tip cache. Exprim dimensiunea
unei pori logice (diferena n microni dintre ieirea i intrarea unei
pori logice fundamentale NAND). n unele documentaii este
interpretat ca fiind distana dintre dou intrri aferente porii logice.
Ca i corolar al tabelului 3.1 se poate afirma c i frecvena
procesoarelor pare s se dubleze n acelai ritm cu toate c, creterea n
vitez se datoreaz tendinelor tehnologice doar ntr-o proporie de 35%,
restul de 65% rezultnd n urma mbuntirilor arhitecturale [Flo05].
Tranzistorii sunt construite din circuite (n tehnologie) MOS (metal
oxid semiconductor) [Patt03]. Exist dou tipuri de tranzistori (vezi figura
3.1): de tip P (pozitiv) i de tip N (negativ). Au funcii complementare,
astfel nct folosite mpreun se pot realiza circuite CMOS. Tranzistorul are
rol de ntreruptor: nchide circuitul (valoarea tensiunii din A este egal cu
cea din B) sau deschide circuitul (valorile celor dou tensiuni din A i B
difer legtura fiind ntrerupt).

Funcionarea celor dou tipuri de tranzistori este descris n cadrul
figurii 3.1.


Figura 3.1. Tranzistori de tip P i de tip N


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 53
3.2. PORI LOGICE
3.2.1. INVERSORUL CMOS
Dac IN = 0 (adic 0 V) atunci tranzistorul de tip P va conduce iar cel
de tip N rmne blocat. Rezult c ieirea OUT va avea 2.9 V (adic 1
Logic).
Dac IN = 1 (adic 2.9 V) atunci tranzistorul de tip N va conduce iar
cel de tip P rmne blocat iar ieirea OUT va avea 0 V (adic 0 Logic).
Se poate astfel observa c OUT = Not (IN); ieirea este inversa
intrrii.


Figura 3.2. Inversorul CMOS
3.2.2. POARTA NOR (NOT OR)
Poarta NOR este realizat din doi tranzistori de tip P legai n serie i
cu
ire n punctul C 2.9V trebuie ca
cei doi tranzistori de tip P s conduc (ambele circuite nchise); deci A=0 I
B=0
doi tranzistori de tip N aezai n paralel (vezi figura 3.3 zona ncadrat
linie punctat). Astfel, pentru a avea la ie
C=1.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
54 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Pentru a avea la ieire n C 0V este suficient ca mcar unul din cei doi
tranzistori de tip N s conduc (cel puin un circuit nchis); deci A=1 SAU
B=1 C=0. Prin utilizarea unui inversor la ieirea porii NOR, n punctul
D, se obine rezultatul funciei OR aplicat celor dou intrri A i B.


Figura 3.3. Porile NOR i (OR)
3.2.3. POARTA N
Pentru a avea la ieire n C 0V trebuie ca ambii tranzistori de tip N s
conduc (ambele circuite nchise); deci A=1 I B=1 C=0. Prin folosirea
inversorului e rezultatul
func

AND (NOT AND)
Poarta NAND este implementat din doi tranzistori de tip P aezaii n
paralel i doi tranzistori de tip N n serie (vezi figura 3.4 zona ncadrat cu
linie punctat). Astfel, pentru ca la ieirea C s fie 2.9V trebuie ca cel puin
unul din cei doi tranzistori de tip P s conduc (cel puin un circuit nchis);
deci A=0 SAU B=0 C=1.
la ieirea porii NAND, n punctul D, se obin
iei AND aplicat celor dou intrri A i B.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 55

Figura 3.4. Porile NAND i (AND)
ntruct pentru exprimarea funciilor logice de 2 operanzi (AND, OR)
necesari 6 tranzistori i innd cont c la nivelul procesoarelor anilor
[Katz05] erau implementai 178 milioane de astfel de circuite digitale
re, rezult necesitatea unei convenii de reprezentare n vederea
ificrii pro
sunt
2004
prima
simpl cesului de proiectare. Trebuie specificat c porile logice
(AND, OR, NAND, NOR) pot avea mai mult de dou intrri.


3.5. Conve Figura nii de reprezentare a porilor logice

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
56 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Reprezentarea funciilor logice se poate face prin:
Tabel de adevr
Expresie logic
Circuite logice
Se spune despre setul de pori logice (AND, OR, NOT) c este
comp
3.3. STRUCTURI LOGICE DIGITALE
Se cunosc dou tipuri de structuri logice digitale:
1. Structuri de decizie pot realiza o decizie dar nu rein ce fel de
decizie binaionale
1. STRUCTURI LOGICE (CIRCUITE)
Circuitele logice combinaionale (CLC) fac parte din familia
sistemelor automate cu numr finit de stri, fiind un caz particular, acela al
let ntruct cele trei pori logice sunt suficiente pentru reprezentarea
oricrei funcii logice. Fcnd legtura cu legile lui De Morgan:
A OR B = NOT ((NOT A) AND (NOT B))
A AND B = NOT ((NOT A) OR (NOT B))
se poate spune c sunt suficiente fie pori de tipul NAND fie pori de
tipul NOR.
Funciile I-NU (NAND) respectiv SAU-NU (NOR) sunt suficiente
pentru reprezentarea oricrei funcii logice (se mai numete
completitudinea funciilor logice I-NU i respectiv SAU-NU) [Pat03].
a fost (0 sau 1). Se mai numesc structuri logice com
deoarece ieirile acestora sunt strict dependente de combinaia
valorilor de intrare. Nu depind de istoria informaiei ntruct aceste
structuri nu stocheaz nici un fel de informaie. Se cunosc trei astfel de
structuri:
Decodificatorul
Multiplexorul
Sumatorul
2.Structuri de memorare permit stocarea informaiei. Capacitatea
acestora se msoar n bii sau multiplii ai acestora.
3.3.
COMBINAIONALE

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 57
automatelor circuitului
de va
[Pop86]. Unul dintre acetia este
(vezi figura 3.6), un altul l
bufferelor (nivelului) de ieire (lungimea
re reprezint aceeai intrare pentru mai multe
pori logice
fr memorie. Lipsa memoriei implic independena
riabila timp i deci lipsa unor stri interne. Depinde exclusiv de
variabilele aplicate la intrare.
Parametrii:
.. Adncimea unui circuit este dat de numrul de circuite aflat pe cea
mai lung ramur care compune circuitul. Ea corespunde timpului de
execuie n cazul cel mai defavorabil.
.. Dimensiunea unui circuit reprezint numrul de elemente
combinaionale coninute n circuit.
O ntrebare fireasc ce se poate pune este urmtoarea: Cine
determin viteza sau frecvena maxim a unui sistem digital ? Rspunsul la
aceast ntrebare este: latena (sau ntrzierea) circuitului. Exist civa
factori care contribuie la aceast laten
timpul de propagare printr-o poart logic
reprezint factorul de ncrcare al
anumitor fire de legtur ca
) i chiar circuitul nsui caracterizat de adncime i dimensiune.
n realitate, cnd semnalul de la intrarea unei pori se schimb (din 0 n 1
sau din 1 n 0) semnalul de ieire nu se va schimba instantaneu (vezi figura
3.6).

Figura 3.6. ntrzierea semnalului printr-o poart logic
Timpul de propagare printr-o poart logic reprezint diferena n timp
dintre momentele n care este modificat semnalul pe intrarea porii logice i
respectiv momentul n care este sesizat modificarea semnalului la ieirea
porii logice. Se disting dou tipuri de ntrzieri prin poarta logic T
PHL

(timp de propagare din nivel logic High n nivel logic Low) i respectiv
T
PLH
(vezi variaz n
func
figura anterioar). Valoarea timpului de ntrziere
ie de poarta logic folosit precum i n funcie de familia de circuite
logice folosite. n general, cu ct preul per cip este mai mare cu att acesta
va fi mai rapid. La nivelul anului 2004, timpul de ntrziere printr-o poart
logic era cuprins n intervalul 1.5-4ns.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
58 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
3.3.1.1. DECODIFICATORUL

Figura 3.7. Decodificatorul - reprezentare cu pori logice
n
ttern de bii. Utilitatea sa se
va
p
mo
tat la ieire.

n general au n intrri i 2 ieiri. Decodificatorul furnizeaz la o
singur ieire 1 iar la restul 0. Ieirea i va avea valoarea logic 1 dac
numrul reprezentat n binar pe intrare este chiar 1. Funcia
decodificatorului este de interpretare a unui pa
regsete n faza de decodificare a instruciunilor (vezi modelul von
Neumann) cnd cmpul opcode parte component a oricrei instruciuni
specifica ce operaie trebuie efectuat (adunare / scdere / nmulire /
m rire / acces la memorie / ramificaie a programului). Decodificatorul
este utilizat i pentru identificarea regitrilor surs / destinaie sau a
durilor de adresare n cazul instruciunilor cu referire la memorie tot pe
baza pattern-urilor de bii din corpul instruciunilor. De asemenea, este
folosit la selecia adreselor de memorie.
3.3.1.2. MULTIPLEXORUL
Are rolul de a selecta o intrare i de a o conecta la ieire. Semnalul de
selecie (codificarea binar a acestuia) determin care dintre intrri va fi
onec c

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 59

Figura 3.8. Multiplexor 4:1 - reprezentare cu pori logice
n general, un MUX const din 2
n
intrri, n linii de selecie i o
ingur ieire. Multiplexorul este utilizat n proiectarea procesoarelor
pipeline n cel puin trei ipostaze:
La selec are
secvenial lui
at (se face / nu se face).
La selecia operanzilor unei instruciuni: pot fi instruciuni cu 2
regitri surs, pot fi instruciuni aritmetico-logice cu un registru surs i o
valoarea imediat, poate fi un calcul de adres dintre un registru index i
un deplasament (mod de adresare indexat), poate fi calculul adresei
destinaie n cazul unei ramificaii de program (registru + valoare
imediat). Pentru detalii vezi subcapitolul 6.2.
Scrierea rezultatului instruciunilor n setul de regitri generali ai
procesorului, n faza store results de procesare (vezi modelul von
Neumann) poate fi fcut prin instruciuni aritmetico-logice sau
instruciuni de tip load. Selecia se va face tot intermediul unui
multiplexor 2:1 comandat cu un bit din opcod-ul instruciunii.
3.3.1.3. SUMATORUL
Efectueaz numere
binare avnd un numr egal de bii. Orice sumator pe mai muli bii este
const
arele elementare pe un bit pot fi:
s
ia adresei urmtoarei instruciuni dintre PC+4 (o proces
, instruciunea fiind codificat pe 4 octei cazul procesoru
MIPS R3000 [Flo03]) i PC+adresa_relativ (identificarea unei
ramificaii n program) n funcie de bitul rezult

operaii aritmetice (adunare sau scdere) cu dou


ruit din sumatoare elementare pe un bit.
Sumato

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
60 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
semisumatoare (sumator pentru bitul zero), acest sumator elementar se
caracterizeaz prin faptul c nu ine seama de transportul de la bitul cu
se
re in seama de transportul de la bitul cu
semnificaie imediat inferioar.
Se cunosc trei circuite combinaionale de nsumare. Primul este
sumatorul cu transport propagat, care poate s adune dou numere de
cte n bii n timp (n) i utiliznd un circuit de dimensiune (n) [Cor90]. Al
doilea este sumatorul cu transport anticipat, de dimensiune (n) care
adun n timp (log
2
n). Al treilea este un circuit cu transport salvat, care,
n timp (1) (constant), poate reduce suma a trei numere de cte n bii la
suma unui numr de n bii i a unuia de n+1 bii. Circuitul are dimensiunea
(n).

Sem
- in
mnificaie imediat inferioar (vezi figura 3.9).
sumatoare complete pe un bit ca
isumatorul (sumatorul pentru bitul zero) [Patt03, Clc04]
trrile celor dou numere pe un bit sunt reprezentate prin X
0
i Y
0
.
- ieirile sunt: S
0
- (suma celor dou numere) i - (Carry - transportul
ctre bitul 1).


Figura 3.9. Semisumator pe un bit

Sumatorul complet pe un bit
t de transportul de la bitul de
semn intrrile: X
n
, Y
n
, C
n
i ieirile: S
n
, C
n+1
.
Func l de mai jos. Din tabel se deduc relaiile
(3.1) de intrri:
Sumatorul complet pe un bit ine con
ificaie imediat inferioar. Are
ionarea sa se bazeaz pe tabelu
i (3.2) care descriu dependena ieirilor


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 61
(3.2)
) ( ) (
(3.1)
1
n n n n n
n n n n n
n
n n n n n n
n
n n n n n n n n n
n n n n n
n
n n
Y X C Y X
Y X Y X C C C Y X C Y X C Y X C Y X C Y X C
Y X C Y X C Y
+ =
= + + + = + + + =
= +
+

) ( ) (
n
n n n n
n
n n n n n n
X C
Y X Y X C Y X Y X C C
=
= + + + =
n n
n
n n
n
n n n n n n
Y X C Y X C Y X C Y X S + + + =

Figura 3.10. Sumator complet pe un bit varianta (1)
Din relaia (3.2) se deduce urmtoarea schema din figura 3.11, mai
apid (scade numrul de nivele cu 1 o poart): r


Figura 3.11. Sumator complet pe un bit varianta (2)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
62 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
(3.3) ) ( ) ( ) (
1
n n n n n n
n
n n n n n n n n n n n n n n n n
X C +
n
n n n
n
n n n n n n n n n n n
n
n n n
Y X C X C Y C C Y X Y Y C X X X C Y C Y Y X
C Y X C Y X C Y X C Y X C Y X C Y X X C
+ + = + + + + + = +
+ + + + = + =
+

Pentr
X{0, 1}.

Sumator cu tran
[Clc04]
Schema acestui s
un bit interconectate ca
n n n n n n
C Y X C Y + +
u deducerea relaiei (3.3) am folosit faptul c X + X = X, pentru
sport succesiv (propagat) 74LS83 (4 bii)
umator pe patru bii cuprinde patru sumatoare complete pe
n figura 3.12:


Figura 3.12. Sumator cu transport succesiv pe 4 bii (circuitul 74LS83)
C
0
se pune la mas dac circuitul este folosit pentru nsumarea a dou
numere cu 4 bii, deoarece nu exist transport de la un bit cu semnificaie
mai mic. Cnd se extinde numrul de bii folosind dou sau mai multe
circuite conectate se face concordana cu schema din figura 3.13:


Figura 3.13. Extinderea capacitii de adunare
Considernd t ntrzierea pe o poart logic elementar (sau pe un
nivel logic), observnd schema din figura 3.11, rezult c C
1
se obine cu o

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 63
ntrziere de 2t. ntrzierea cu C
n+1
(transportul obinut la ieirea ultimului
sumator de rang n) este 2t (n+1), ceea ce este inacceptabil pentru
sumatoare cu numr mare de ranguri. Timpii de calcul pentru biii de sum
(S
0
S
n
) sunt:
t
S
1
=2t.
t
S
2
= t+ t
C
1
=t+2t=3t

t
S
n
= t+ t
C
n-1
= t+2(n-1) t=(2n-1)t

mbuntirile au dublu scop:
simplificarea structurii sumatorului
reducerea timpului de nsumare.

Sum
r medie, larg i
oarte larg MSI, LSI, VLSI) s-a renunat la aceast structur integrndu-
s specializate, scheme mult mai performante. Sumatorul cu
nt re minim eea comutaie (logic) se
poate realiza sub o form ii). Relaia
(3.3 arti ariz are, devine:
1
= Y
0
+ C
0 0
)
C
2
= X Y
1
+ C
1 1
+ Y
1
)(X
0
Y
0
+ C
0
(X
0
+ Y
0
))
n+1
X
0 0
(3.4)
e b rel ei .4) se poa ta sumatorul cu ntrziere
min . La acest sum se d de 2t deoarece
dep e do de
..n,
i C
0
. D umrul mare de
por nec re n plementare. Compromisul const aici n
imp ent a u xte
min pe grupe de bi ranspo


ator cu ntrziere minim
Sumatorul cu transport succesiv are o structur simpl dar prezint
marele dezavantaj c orice operaie de nsumare necesit un timp foarte
mare pentru execuie datorit propagrii transportului. Imediat ce progresele
tehnologice au permis (apariia circuitelor integrate pe sca
f
e n circuite
rzie are la baz id
disjunctiv
c orice funcie de
ie de conjunc (disjunc
), p cul at pentru diverse ranguri de sum
C X
0
(X + Y
0
1
(X
1
+ Y
1
) = X
1
Y
1
+ (X

C = f(
..n,
Y
..n,
C
0
)
P aza ai (3 te implemen
im
ind
ator C
n+1
etermin cu o ntrziere
ezavantajul const n n ar X
0
pe
Y
0..n
tru im i esa
lem are nor scheme mi care conin sumatoare cu ntrziere
im i i cu t rt propagat ntre aceste grupe.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
64 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Sum tor tr sp ticip
m
nt re minim este imposibil de realiza ediar.
Aceasta grupeaz r ere minim, astfel
nct
a cu an ort an at
ntruct su
rzie
atorul cu transport succesiv este lent, iar sumatorul cu
t, se caut o soluie interm
elaiile obinute la sumatorul cu ntrzi
s se obin dimensiuni rezonabile. Ideea de baz este aceea de a
caracteriza comportarea unui rang al sumatorului din punctul de vedere al
generrii / propagrii unui transport [Pop86].
La acest tip de sumator se va micora timpul de execuie al sumrii
dar va crete i dimensiunea circuitului. Pentru implementare se va pleca de
la ecuaiile ce descriu sumatorul complet (3.1) i (3.3).

(3.1)
n n n n
Y X C S =

1 n n n n
X C Y C (3.3) ) (
n n n n n n n n
Y X C Y X Y X C + + = + + =
+

e consider notaia:
n n
lul sumatorului
complet;
P = X
n
+ Y
n
reprezint termenul de propagare deoarece o
valoare de 1 aplicat numai pe una din intrrile
sumatorului va permite ca ieirea C
n+1
s ia valoarea
intrrii C
n
, care astfel se propag numai prin acest
nivel binar.
Cu aceste notaii, se va scrie expresia logic a transportului asociat
fiecrui ordin binar al unui sumator dup cum urmeaz:
C
1
= X
0
Y
0
+ C
0
(X
0
+ Y
0
) = G
0
+ P
0
C
0
C
2
= G
1
+ P
1
C
1
= G
1
+ P
1
G
0
+ P
1
P
0
C
0
C
3
= G
2
+ P
2
C
2
= G
2
+ P
2
G
1
+ P
2
P
1
G
0
+ P
2
P
1
P
0
C
0

C
i
= G
i-1
+ P
i-1
G
i-2
+ P
i-1
P
i-2
G
i-3
+ + P
i-1....
P
1
G
0
+ P
i-1....
P
0
C
0
(3.5)

Propagarea transportului s-a transformat ntr-un calcul anticipat, n
sensul c C
i
se poate calcula n paralel pentru i=1, 2, ..., n fr a se mai
atepta calculul mrimilor pentru indicii anteriori i-1,...,1.
S
C
n+1
= G + PC
n
unde:
G = X
n
Y
n
este termen de generare deoarece pentru X = Y = 1
transportul se genereaz la nive

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 65
3.3.2. PROIECTAREA UNEI UNITI DE CALCUL
ARITMETICO-LOGIC
Unitatea aritmetico-logic (ALU) reprezint componenta
microprocesorului care trateaz (execut) toate operaiile aritmetice i
logice. ALU este un circuit logic combinaional care efectueaz operaii
aritmetice i logice asupra unei perechi de operanzi pe n bii.
Ca i exerciiu se va prezenta n continuare modul de funcionare a
unei uniti ALU simplificate pe 4 bii (A[3:0] i B[3:0] vezi schema bloc
din figura urmtoare).


Figura 3.14. S gice pe 4 bii chema bloc a unei uniti aritmetico-lo
Operaiile ALU sunt controlate prin intermediul intrrilor de selecie-
funcie (M, S
1
i S
0
). Intrarea de selecie M va determina modul de operare
aritmetic (M=1) sau logic (M=0) iar S
1
i S
0
va stabili operaia propriu-zis
(adunare / scdere / OR / AND ). n general o unitate aritmetico-logic
trebuie s realizeze urmtoarele operaii (vezi tabelul 3.2).

M = 0 Logic
S1 S0 C0 Funcia Operaia (pe bit)
0 0 X A
i
B
i
AND
0 1 X A
i
+ B
i
OR
1 0 X A
i
B
i
XOR
1 1 X (A
i
B
i
) XNOR

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
66 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
M = 1 Aritmetic
S1 S0 C0 Funcia Operaia
0 0 0 A Transfer A
0 0 1 A + 1 Incrementeaz A cu 1
0 1 0 A + B Adun A cu B
0 1 1 A + B + 1 Incrementeaz suma dintre A i B cu 1
1 0 0 A + B' A + complementul fa de 1 al lui B
1 0 1 A - B Scade B din A (i.e. B' + A + 1)
1 1 0 A' + B B + complementul fa de 1 al lui A
1 1 1 B - A Scade A din B (sau A' + B + 1)
Tabelul 3.2. Operaiile executate de ALU
Primul pas n proiectarea unei uniti ALU pe 4 bii l reprezint
proiectarea unui ALU pe un bit (pentru simplitate va fi notat ALU-1). O
prim metod const n realizarea tabelei de adevr pentru ALU-1. ntruct
exist 6 intrri (M, S
1
, S
0
, C
0
, A
i
i B
i
) i dou ieiri (F
i
i C
i+1
) aplicarea
metodei (cu creionul pe hrtie) este dificil din punct de vedere al timpului
consumat. O solu
aritmetic i modul.
chema bloc a ALU-1 conine pe lng cele dou module i un multiplexor
ie alternativ const n separarea n dou module (unitate
) i (unitate logic) i proiectarea individual a fiecru
S
2:1 (vezi figura 3.15).


Figura 3.15. Schema bloc a unitii aritmetico-logice pe 1 bit (ALU-1)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 67
Unitate 2:4 i pori
logice
a logic poate fi realizat folosind un decodificator
AND, OR, XOR i NOT (vezi figura 3.16).


Figura 3.16. Unitatea logic pe 1 bit
Proiectarea unitii aritmetice din figura 3.15 se bazeaz n principiu
pe sumatorul complet pe 1 bit (vezi figura 3.10). Unitatea aritmetic trebuie
s realizeze n principiu un ir de operaii simple: adunare ntre doi operanzi,
incrementarea unui operand, adunarea a doi operanzi i a unui 1, adunarea la
un numr complementul fa de 1 a altuia, diferena dintre dou numere
(vezi tabelul 3.2). Schema bloc a unitii de adunare din cadrul ALU-1 este
prezentat n figura 3.17. Practic trebuie implementat doar logica de
selecie (blocurile A logic i B logic).


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
68 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 3.17. Unitatea aritmetic pe 1 bit
n tabelul 3.2 intrarea C
0
(C
i
n figura 3.17) este doar n aparen de
selecie. n realitate, n funcie de valoarea lui se va aduga sau nu 1. Fiecare
semnal C
i+1
va avea rol de transport de intrare pentru A
i+1
i B
i+1
(rangul
urmtor n procesul de adunare).


Figura 3.18. Logica de selecie din cadrul unitii aritmetice

O
la s
100
dre pe prima poziie). Dac se ine cont de formula
peraia de deplasare (shift)
Reprezint operaia de translatare cu una sau mai multe poziii binare
tnga sau dreapta. De exemplu, numrul fr semn, reprezentat pe 8 bii,
10111, prin deplasare la dreapta devine 01001011 (se taie un bit din
apta i se adaug un zero

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 69
gen prezentare a unui numr ntreg oarecare pe n+1 digii n baza
b, N .x
2
x
1
x
0
, cu x
n
0 a crui valoare numeric este:
x
n
*b
n
+...x
2
*b
2
+x
1
*b
1
+x
0
atunci este foarte simplu de
o
val
ste irii 151 / 2).

eral de re
b
= x
n
..
N
b
=
observat c o deplasare cu o poziie la stnga sau dreapta este echivalent cu
nmulire respectiv o mprire cu baza (n cazul acesta b=2). Astfel,
oarea binar 10010111 reprezint n zecimal numrul 151 iar 01001011
75 (partea ntreag a mpr e

Figura 3.19. Circuit de deplasare (la stnga i dreapta)
n figura 3.19 este prezentat un circuit de deplasare pe 4 bii. Semnalul
C va activa la un moment dat fie deplasarea la dreapta (C=1) fie la stnga
(C=0). Dac deplasarea este la stnga ieirea circuitului ignor bitul cel mai
din stnga (D
0
) i introduce un zero n coada noului numr (S
3
). Dac
dep
(D
3
SAU d
permit
spect st lucru se ntmpl deoarece semnalul C comand intrarea
0
iar Not C comand intrarea D
2
.
lasarea este la dreapta ieirea circuitului ignor bitul cel mai din dreapta
) i introduce un zero pe prima poziie a noului numr (S
0
). Porile logice
ei primesc dou semnale de intrare (D
0
sau D
2
, respectiv D
1
sau D
3
)
ca la un moment dat doar unul din cele s furnizeze valoarea n S
1

iv S re
D
2
. Ace

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
70 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
n acest moment, bazndu-ne pe circuitele logice combinaionale
nterior prezentate se poate trece la implementarea operaiilor aritmetice de
nm lire respectiv mprire (mai complexe dect cele de adunare i
sc
3.4.
1. P
p
e 3 numere acestora. Se vor folosi funciile (clasele)
te n rezolvarea seminarului aferent capitolului 2.

2. Referitor la urmtoarea diagram logic ce semnific valoarea 1 la
ieirea X ? Un rspuns corect nu necesit mai mult de 10 cuvinte.

a
u
dere).
EXERCIII I PROBLEME
robleme de utilizare a numerelor dintr-o anumita baz (2, 8, 10, 16)
entru adunarea / scderea / nmulirea / mprirea / numr de bii de 1
maximul dintr /
utiliza


3.
d
intr A[1:0] i B[1:0] iar
Y fiind rezultatul produs n urma nmulirii valorilor codificate de A i B.
Notaia standard pentru aceasta este: Y = A[1:0]B[1:0]. Se cere:

Pornind de la cunotinele de proiectare a unui sumator complet, se
orete implementarea unui multiplicator (circuit de nmulire) cu dou
ri (fiecare intrare pe 2 bii). Intrrile sunt notate

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 71
a. Care este valoarea maxim care poate fi reprezentat pe 2 bii pentru
intrarea A (A[1:0]) ?
b. Care este valoarea maxim care poate fi reprezentat pe 2 bii pentru
intrarea B (B[1:0]) ?
c. Care este valoarea maxim care poate fi luat de ieirea Y ?
d. Care este numrul minim de bii necesar pentru a putea reprezenta
valoarea maxim a ieirii Y ?
e. Realizai tabela de adevr pentru circuitul de nmulire descris mai
sus. Vor fi patru intrri binare (2 bii pentru intrarea A A[1], A[0],
i ali 2 pentru B B[1] i B[0]).
f. Implementai folosind pori logice AND, OR i NOT cel de-al treilea bit
al ieirii Y (Y[2]) rezultat din tabela de adevr de la punctul anterior.

4. Se tie c poarta logic NAND (I NU) este complet (orice funcie
logic poate fi implementat folosind doar pori NAND). Folosind doar
pori logice NAND construii circuite logice combinaionale care s
implementeze urmtoarele funcii. De un real folos ar fi utilizarea
regulilor lui DeMorgan.

5.

(a) NOT
(b) AND
(c) OR
(d) NOR
Un comparator pe un bit este un circuit (vezi figura de mai jos) avnd
dou intrri (fiecare pe 1 bit) A i B i trei ieiri G (mai mare strict), E
(Egal) i L (mai mic strict).

este 1 dac A>B E este 1 dac A=B L este 1 dac A<B
0 altfel 0 altfel 0 altfel
Desenai ta

G

a) bela de adevr pentru comparatorul pe un bit:


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
72 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
A B G E L
0 0
0 1
1 0
1 1


b) Implementai G, E i L folosind porile logice AND, OR i NOT.

c) Folosind comparatoare pe 1 bit, construii un ve ificator (comparator
pe 4 bi care s genereze la ieire semnalul EQUAL=1 dac i
numai dac A[3:0]=B[3:0] cele dou intrri A i fiecare)
r
i),
i B (pe 4 bi
coincid.





U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 73
6.
a) Un multiplexor 4:1 (jos, stnga) selecteaz ntre 4 intrri folosind
dou linii de selecie (S
0
, S
1
). Mai precis, ieirea multiplexorului va fi
egal cu A dac selecia (S
1
S
0
) este egal cu 00 (S
1
fiind cel mai
semnificativ bit). B se va gsi la ieire pentru selecia (S
1
S
0
= 01), C
pentru selecia (S
1
S
0
= 10) iar D va fi la ieirea multiplexorului atunci
cnd ambii bii de selecie vor fi 1. Construii circuitul de m ltiplexare
4:1 a crei funcionare tocmai a fost descris folosind mu
u
ltiplexoare
2:1 (jos, dreapta). Intrrile n multiplexoarele folosite vor fi etichetate
A, B, C i D, liniile de selecie vor fi notate cu S
0
i S
1
, iar ieirea
circuitului Y.



b) Cte multiplexoare 2:1 sunt necesare pentru construirea unui
multiplexor 2
k
:1 (k>0).
7. n aceast problem se cere s se determine pentru toate intrrile
posibile ale lui A i B dac celelalte tranzistoare (etichetate de la 1 la 6)
conduc sau nu. Convenim c dac tranzistoarele (1-6) conduc (circuit
nchis) atunci au valoarea 1 logic, altfel 0 logic (nu conduc circuit
deschis). De asemenea, indicai valoarea logic a lui Z.



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
74 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software




b) Scriei expresia logic care descrie ieirea Z n funcie de intrr i B.

8. n aceast problem
e 2.
a
3
a
unnd primul caz n care a0 i b0 se pune ntrebarea Se
ile A
se va construi un circuit combinaional pentru a
determina cnd apare depire (overflow) la adunarea a dou numere n
complement fa d
a) Se presupune c numerele a i b, folosite ca intrri, sunt pe 4 bii: a =
2
a
1
a
0
i b = b
3
b
2
b
1
b
0
.
i. Presup
obine depire la adunarea celor dou numere (a i b) ? Scriei
expresia logic corespondent acestui caz (n termenii biilor lui a i

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 75
respectiv b) care este adevrat doar pentru aceste valori ale lui a i b
(pozitive).
ca intrri pe a (a = a
3
a
2
a
1
a
0
) i b (b = b
3
b
2
b
1
b
0
). Ieirea
sumatorului, tot pe 4 bii este s, (s = s
3
s
2
s
1
s
0
) i un bit de transport final
c
3
. Scriei expresia logic care este adevrat cnd suma celor dou
num i
res
ii. Cerin identic cu cea de la punctul anterior cu deosebirea c a0
i b<0.
iii. Cerin identic cu cea de la punctul i. cu deosebirea c a<0 i b0.
iv. Presupunnd n acest caz c a<0 i b<0 se pune ntrebarea Se
obine depire la adunarea celor dou numere (a i b) ? Scriei
expresia logic corespondent acestui caz (n termenii biilor lui a i
respectiv b) care este adevrat doar pentru aceste valori ale lui a i b
(negative).

b) Se presupune la acest punct c dispunem de un sumator funcional pe
4 bii avnd
ere a i b genereaz depire (n funcie de biii lui a, b i s,
pectiv bitul de carry c
3
), indiferent de semnul celor dou numere.
(Indicaie: se vor folosi informaiile de la punctul (a)). mbogii
circuitul sumator cu pori logice n vederea implementrii semnalului de
depire (numit overflow).
Acesta va lua valoarea 1 la generarea depirii de ctre sum.



9. a) Cte linii de selec i c ii de ieire furnizeaz multiplexoarele
urmtoare ? Not: N rul liniilor de intrare este specificat n tabelul
de mai jos.

ie
um
te lin

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
76 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Numr linii de Numr linii de selecie Num
intrare ieire
r linii de
32
16
5

b) Cte
Num
linii de ieire furnizeaz decodificatoarele urmtoare ? Not:
rul liniilor de intrare este specificat n tabelul de mai jos.

Numr linii de
intrare
Numr linii de ieire Numr linii de
ieire active la un
moment dat
16
5
3

10. Care este expresia logic (boolean) a urmtorului circuit combinaional
?



11. S uiete din componente
in roduc un bit de sum i
un
so
decodificator 3 la 8
jo
suma DA, realizai acest lucru. (Indicaie:
dac o intrare n poarta OR nu este necesar, atunci aceasta poate fi
nlocuit cu 0, neafectnd rezultatul final).
e reamintete c un sumator se constr
div it) care p iduale (sumator complet pe un b
ul de transport (carry) n funcie de intrrile binare A, B i bitul Carry
sit de la nivelul anterior. Presupunnd c dispunem de un
i dou pori OR cu 6 intrri (vezi figura de mai
s), se pune ntrebarea dac pot fi conectate astfel nct s obinem un
tor complet pe un bit. Dac


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Structuri logice digitale. Tranzistori. Pori logice. Structuri logice combinaionale. Unitatea
aritmetico-logic 77


b) Prin ce se caracterizeaz circuitele logice combinaionale ? Dar cele
secveniale ?
c) Cum funcioneaz (descriei pe scurt) decodificatoarele, sumatoarele
i multiplexoarele ?

12. Rspundei la urmtoarele ntrebri:
a) Care ar fi relaia descris printr-o expresie logic ntre tranzistoarele
de tip P i N ?

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
4. ELEMENTE PRIMARE DE MEMORARE.
REGITRII. MEMORII. AUTOMATE CU NUMR
FINIT DE STRI
4.1. STRUCTURI LOGICE SECVENIALE
Se definete circuit de memorie orice component semiconductoare
care implementeaz funcia de memorare. Un circuit secvenial este un CLC
care are memorie i i permite s memoreze istoria lui (vezi figura 4.1).
irea este o funcie de intrri i starea curent. Funcia este calculat de
naional. Starea este reinut n elementul de
Ie
ctre circuitul logic combi
memorare. Starea urmtoare se determin, de asemenea, n funcie de intrri
i starea curent.


Figura 4.1. Circuit logic secvenial
rcuite logice secveniale: sincrone (CLSS) i
asinc

Sunt de 2 feluri de ci
rone (CLSA).
CLSS sunt caracterizate de faptul c exist o trecere discret a
timpului. Transferul de informaie se produce numai pe durata
tactului.
n cazul CLSA nu exist impulsuri de tact i momentele succesive de
timp sunt date de caracteristicile circuitului. Memoria joac rolul unei
linii de ntrziere.
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 79
4.1.1. BISTABILUL R-S
Reprezint un element simplu de memorare care poate reine un bit de
informaie, circuitele bistabile putnd avea la ieire dou stri stabile (0
logic i 1 logic) un timp nedefinit i doar o comand extern putnd
declana modificarea strii logice a ieirii. Exist mai multe variante de
implementare, n figura 4.2 fiind prezentat una dintre acestea. Este realizat
din dou pori de tip NAND. Ieirea fiecrei pori se conecteaz la intrrile
celeilalte. n m intrri (S i R)
sunt l
od normal (cel mai mult timp) celelalte dou
n starea 1 ogic. Dup cum se va vedea n continuare, exist pentru
intervale scurte de timp, situaii cnd fie S fie R pot fi n 0 logic, dar nu
simultan.


Figura 4.2. Bistabil R-S: reine dou stri stabile a) (a=1) i b) (a=0)
n cazul a) din figura 4.2, ieirea a poate fi setat pe 1 prin setarea
rar a lui S pe 0 i meninerea (ndelungat) a intrrii R pe 1. Odat ce
a a este 1, practic intrarea A n poarta NAND din josul figurii este 1, R
tempo
ieire
de
0 l
necon
care
propa
rezul
bistabilu
asemenea este 1, rezultnd la ieirea b valoarea 0, care nseamn de fapt
a intrarea B n poarta de sus. Astfel, la ieirea a se va gsi n continuare 1
diionat de valoarea lui S. Dup revenirea lui S n 1 la ieirea a rmne
tot 1. Se spune astfel c bistabilul R-S stocheaz valoarea 1.
Invers, n cazul b) ieirea a poate fi setat pe 0 prin pstrarea intrrii S
la valoarea 1 i setarea temporar a intrrii R pe 0. Analog cu cazul a), la
ieirea b i implicit la intrarea B se va afla valoarea 1 logic. innd cont de
faptul c S este permanent n 1 atunci la ieirea a se va afla 0,
gat pe intrarea A a porii de jos va face inutil prezena lui R n 0,
tatul n b fiind 1. Astfel, dup revenirea lui R n 1 la ieirea a a
lui va fi tot 0. Se spune c bistabilul R-S stocheaz valoarea 0.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
80 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
n tabelul 4.1 este sintetizat funcionarea bistabilului R-S n funcie
guraia strii curente (notat Q) i cea
+
de confi viitoare (notat Q ).

Q Q
+
S R
0 0 1
*
0 1 0 1
1 0 1 0
1 1
*
1
Tabelul 4.1. Configuraia intrrilor R i S pentru tranziia strilor din Q n Q
+
i anterior trebuie fcute dou precizri:
r la faptul c starea Q reprezint valoarea ieirii a a
bistabilului R-S la un moment t iar starea Q
+
constituie valoarea
ant
intr
anu
dou
sinc
n cazul tabelulu
U Prima se refe
0
ieirii a la momentul t
0
+ t.
U A doua se refer la valoarea * care trebuie neleas astfel: iniial
valoarea lui R sau S (n funcie de coloana pe care apare) este 0,
urmnd ca ulterior la momente de t
0
+ 2t, R sau S s revin n 1.
Bistabilul R-S are autonomie limitat: el depinde de starea lui
erioar i de intrri. Ieirile se schimb numai pentru anumite valori ale
rilor. Realizeaz funcia de memorare pentru c variaia unor intrri n
mite cazuri nu are efect nici asupra ieirilor i nici asupra strilor. Exist
tipuri de bistabili R-S: varianta asincron (vezi figura 4.2) i varianta
ron (vezi figura 4.3).


ura 4.3. Bistabil R-S sincron (intrrile R Fig
U Apar stri interzise (R=0 i S=0)
a
i S
a
sunt intrrile aferente bistabilului
R-S asincron, iar T este semnalul de ceas)
Bistabilul R-S prezint i unele dezavantaje:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 81
U n cazul bistabilului R-S sincron apar limitri datorate impulsului
de tact.
U Are dou intrri de comand pentru a comanda o singur ieire
(care este tot una cu starea)
4.1.2. B
R
de nt
procesu
atunci
semnal
ntrziat c
logice
setat pn
valoare
Bist
modific
WE
3
), va
urmtoarea stare la ie
timp n
egal cu v
onexiunile luiai
bistab
ISTABILUL DE TIP D (DELAY).
eprezint o extensie a bistabilului de tip R-S i este un bistabil cu rol
rziere. Exist dou intrri: una de date D i una de validare a
lui de memorare WE (write enable). Dac WE este egal cu 1
ieirea bistabilului (fie aceasta Q) este setat la valoarea D (practic
ul de ieire este identic cu cel de intrare cu meniunea c este
u un interval de timp egal cu timpul de propagare prin dou pori
fundamentale I-NU vezi figura 4.5). Ieirea rmne la valoarea
la o nou setare a semnalului WE pe 1 (cnd la ieire va fi noua
a lui D).
abilul de tip D (vezi figura 4.4) nu are variant de funcionare fr
are de stare ci, la fiecare impuls de tact primit (activare a semnalului
loarea preluat de bistabil pe intrarea D este cea care determin
ire. Pentru a pstra valoarea la ieire nemodificat, ct
u se primete impuls de tact, este necesar s meninem intrarea D
aloarea curent de pe ieire. Aceast funcionare este asigurat de
de reacie, care leag fiecare ieire Q la intrarea D a ace c
il.


Figura 4.4. Bistabil de tip D

3
Semnalul WE devine 1 logic.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
82 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Ecuaia logic de stare a bistabilului de tip D este: Q(t
n+1
) = D(t
n
),
unde t
n+1
- t
n
este maxim o perioad de tact procesor (T
CLK
). Ieirea Q
reprezint intrarea D ntrziat cu maxim un tact.


Figura 4.5. Bistabil de tip D cronogram
4.1.3. REGITRII.
Un registru este un ansamblu de bistabili i, eventual, pori logice
care realizeaz schimbrile de stare ale bistabililor. Grupul de bistabili care
formeaz registrul pot fi ncrcai simultan, sub aciunea unui impuls de tact
unic. Un registru de n bii are n bistabili i poate memora i / sau deplasa
orice informaie reprezentabil pe n bii. Porile logice au rolul de a controla
cnd i cum o informaie nou este transferat n registru.
ncrcarea regitrilor
ile
logice puse pe intr
Componentele unui sistem digital sunt complet definite de regitrii pe
care i conin i de operaiile care se execut asupra datelor lor. Operaiile
executate asupra datelor memorate n regitrii se numesc microoperaii.
Exemple: deplasare, numrare, ncrcare, tergere. Pentru executarea
fiecreia dintre aceste microoperaii exist structuri bine determinate ale
regitrilor respectivi. n continuare se vor descrie structurile unora dintre
aceti regitri.

Funcia unui registru cu ncrcare paralel este de a prelua valor
rile de date, simultan pentru toate poziiile binare la

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 83
primirea aceluiai impuls de ceas, i de a stoca temporar configuraia binar
respectiv n scopul unui acces uor la ea n vederea prelucrrii. Registrul
paralel (de stocare / tampon) [Fil96] vezi figura 4.6, este format din n
bistabili de tip D acionai sincron de un tact comun.


Figura 4.6. Schema general a unui registru paralel
n momentul aplicrii tactului, cuvntul binar de n bii prezent la
intrrile I
0
, I
1
, ..., I
n-1
este nscris n cele n celule de memorie i poate fi citit
la ieirile Q
0
, Q
1
, ..., Q
n-1
.

Registrul de deplasare
D
conec
rat
de bistabilii si se numete registru de deplasare. n funcie de construcia
registrului, operaia de mutare (shift) se poate face spre stnga, spre dreapta
sau n ambel

Registrul de deplasare serie este format din n bistabili de tip
tai n cascad (ieirea dintr-un bistabil este intrare n urmtorul)
[Fil96]. n plus, funcionarea este sincronizat prin faptul c toate intrrile
de ceas sunt legate la aceeai surs. Astfel, toi bistabilii vor primi la acelai
moment impulsul de tact care determin deplasarea informaiei. Un registru
capabil s deplaseze, adic s translateze cu o poziie informaia memo
e direcii.

Figura 4.7. Schema general a unui registru serie

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
84 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Intrarea D
IN
conine informaia care se va memora n primul bistabil,
iar ieirea D
OUT
va conine vechiul coninut al ultimului bistabil al
regist lui de deplasare analizat. Se observ c informaia D
IN
ajunge la
ieirea D
OUT
dup n impulsuri de tact.

Regitrii combinai (cu funcii multiple)
Cele dou tipuri de registre tratate anterior sunt utilizate n aplicaii n
care transferul datelor se face fie numai paralel fie numai serie. Registrele
combinate permit trecerea de la transferul paralel la cel serie i invers. n
figura 4.8 se prezint un registru combinat pe 4 bii [Fil96].

ru

Figura neral
semnalul S (com tament de registr erie / p lel) es 0,
unt d hise po 2 atele d ntrare I
0 1
, I
2
i
rile celor 4 bistabile. ncrcarea paralel are loc n mom tul
rii impulsului de ce (CLK).
- S/P=1, registrul realizeaz o plasare a datelor de la stnga la
ioneaz at ca i convertor paralel-ser datele d
intr use pa el la in rile I
0
, I
2
i I fiind extrase serie ieire O
(ser outpu ct i ca un convertor serie-paralel atele se troduc o
man r seri la intr a SI ( ial inpu i sunt extrase pa el la ie ile
Q
0
, , Q
2
i
3
.
4.8. Schema ge a unui registru paralel-serie sau serie-paralel
- Dac /P por u s ara te
s esc rile i d e i , I I
3
au acces la
intr en
aplic as
Dac de
dreapta, cu cte un bit pentru fiecare impuls de ceas.
Registrul func t ie, fiin
od ral tr , I
1 3
, la a S
ial t), , d in de
ie al are ser t) ral ir
Q
1
Q

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 85
Referitor la regi utiliz e ctre calculato LC-3 s isting:
8 re tri de uz general R
0
, IR (instruction register), PC
(program counter), MAR (registru de adres memoriei) toate pe
16 b i,
regi boolee pe 1 N se negati sem pozitiv
pent identifi ea nu relor nule.
sc
func eral
trebu
unui sistem de calcul: sistemul de operare, BIOS (rutina de iniializare a
sistemului de calcul imediat dup alimentarea cu energie teste de
memorie, verificare periferice). Memoriile ROM pot fi doar citite nu
au
utilizator la prima folosire a dispozitivului.
UVEPROM (Ultraviolet Erasable PROM) sunt identice cu
m
O
trii ai d rul e d
- gi R
7
al
ii
- tri ni bit: mn v, P n , Z
ru car me
Dintre regitri pe 16 bii, registrul PC trebuie s ndeplinea
iile de ncrcare paralel i cea de numrtor, regitrii de uz gen
ie s fie capabili de deplasri, ncrcare paralel, iar pentru regitrii IR,
MAR i MDR este necesar doar ncrcarea paralel.
Trebuie menionat c se poate opera nu numai asupra regitrilor (ca i
entiti atomice) ci i asupra cmpurilor din interiorul unui registru (de
exemplu: IR[3:0]).
4.1.4. MEMORIA
Reprezint o zon de date de capacitate mai mare dect regitrii
procesorului dar mai lent dect acetia. Se cunosc urmtoarele tipuri de
memorii:
ROM (read only memory) memorii fixe, nevolatile, n care informaia
se pstreaz i dup ntreruperea alimentrii. Circuitele ROM sunt
circuite pur combinaionale, celula de memorie fiind un tranzistor
programat sau nu, amplasat la intersecia unei linii cu a unei coloane, din
matricea de memorie (vezi figura 4.10). n ele se nscrie softul de baz al
scrise (scrierea se face o singur dat n momentul fabricrii).
PROM (programmable ROM) poate fi programat de productor s
emoriile PROM cu deosebirea c ofer posibilitatea de tergere i
reprogramare prin expunerea la raze ultraviolete. Necesit un
echipament special pentru programare.
EEPROM (Electrical Erasable PR M) sunt identice cu memoriile
UVEPROM cu deosebirea c tergerea se face prin aplicarea unor
semnale electrice speciale de tensiune ridicat (30V).
FLASH ROM este o memorie special de tip EEPROM care poate fi
tears sau programat n timpul funcionrii n circuit (aplicaii cu

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
86 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
microcontrollere n care se ncarc un cod obiect gata de execuie).
Odat programat coninutul rmne nemodificat chiar i dup eventuale
an

la implementarea
ult energie.
rezint un condensator care se descarc n timp);
este de tip
AM) cu 10% pn la 20% mai
rapid dect primele memorii DRAM.
SDRAM (Synchronous DRAM) mai rapide cu aproape 25%
dect memoriile EDO RAM.
DDR sau SDRAM II (Double Data Rate SDRAM) de dou ori
mai rapide dect memoriile SDRAM.
RDRAM (Rambus DRAM) dezvoltate de ctre firma Rambus
Inc., sunt de aproape zece ori mai rapide dect memoriile
DRAM.
SLDRAM (Synclink DRAM) este principalul competitor din
punct de vedere tehnologic al memoriilor RDRAM.

Creterea decalajului dintre viteza procesoarelor i timpul de acces la
memorie a impus introducerea unui sistem ierarhic de memorie (vezi figura
4.9), pentru a nu face simit la nivelul perform nei globale a sistemului
ncetineala cu care cu ct capacitatea
memo
se aborteaz, dac nu, se acceseaz MP cu penalizrile de timp impuse
omalii datorate cderii tensiunii de alimentare.
RAM (random access memory) este o memorie care poate fi scris sau
citit (atta timp ct este alimentat cu energie). Informaia se pierde
dup oprirea alimentrii. Accesul la memorie se permite numai n
anumite momente de timp validate de un semnal de tip acces la memorie
(memory request). Exist dou tipuri majore de memorii RAM:
o SRAM (Static RAM) mai rapide, mai fiabile dar mai scumpe per
unitate de octet memorat. Uzual sunt folosite
memoriilor cache. De asemenea, consum mai m
o DRAM (Dynamic RAM) lent i necesit regenerare (celula de
memorie o rep
ieftin per unitate de octet memorat. Memoria principal
DRAM. Din punct de vedere al evoluiei n timp a memoriilor
DRAM se cunosc urmtoarele etape:
EDO (Extended Data Out R
a
se acceseaz memoria. Practic,
riei crete, cu att scade timpul de acces la memorie i se ieftinete
preul per unitate de octet memorat. Memoria cache este o memorie situat
din punct de vedere logic ntre CPU (unitatea central de procesare) i
memoria principal, mai mic, mai rapid i mai scump (per byte) dect
aceasta i gestionat n general prin hardware astfel nct s existe o ct
mai mare probabilitate statistic de gsire a datei accesate de ctre CPU, n
cache. Aadar, cache-ul este adresat de ctre CPU n paralel cu memoria
principal (MP): dac data dorit a fi accesat se gsete n cache, accesul la
MP

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 87
de latena mai mare a acesteia, relativ ridicat n comparaie cu frecvena de
tact a at d a int c

CPU. Oricum, data acces in MP se v roduce i n ache.

Figura 4.9. Ierarhizarea memoriei ntr-un sistem de calcul
Memoria este caracterizat de un numr mare de locaii de dimensiune
fix
n
fel,
cu 2
16777216 locaii. Dac fiecare loca nci spaiul de
mem
rie a unui
icuvnt (2 octei) sau a unui dublu cuvnt (8 octei) (vezi lh load high
sau ld load double la procesorul MIPS). n general un cuvnt este scris sau
citit la un moment dat. n cazul n care se dorete accesul n scriere sau citire
la un singur octet trebuie cunoscut convenia de reprezentare de pe maina
respectiv (big sau little endian).
n figura 4.10 este descris modul de implementare a unei memorii cu 4
locaii, fiecare coninnd un bit. Bitul de informaie este reinut n bistabili
de tip D. De regul, fiecare locaie conine w bii (n figura 4.10 w=1).
Dac w=8 atunci memoria este adresabil pe octet. Pentru adresarea celor n
locaii de memorie sunt necesari [log
2
n] bii de adres dac se consider n
o putere a lui 2, altfel [log
2
n]+1. Circuitul decodificator va selecta doar o
loca

fiecare. Cu n bii de adres pot fi adresate 2 locaii de memorie. Ast
4 de bii de adres pot fi accesate 2
24
locaii, adic 16 Megalocaii
ie reine 1 octet atu
orie acoperit este de 16 MBytes iar dac locaia conine un cuvnt de 4
octei rezult c spaiul de memorie adresabil este de 164=64 MBytes.
Calculatoarele sunt adresabile (pot extrage cuvinte de dimensiuni
variabile) n mod normal pe cuvnt sau pe octet. Exist ns procesoare cu
instruciuni care solicit ncrcarea / scrierea din / n memo
sem
ie de memorie din cele n, la un moment dat.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
88 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 4.10. Schema general a unei memorii pe un bit (soluia nescalabil)
n realitate semnalul de ieire nu poate fi obinut dintr-o poart SAU
cu 2
n
intrri. Soluia de scalabilitate a ieirii compus din cele 2
n
intrri
presupune folosirea de pori SAU cu 2 intrri ca n figura 4.11. Se impune
astfel observaia conform creia timpul de citire al locaiei 0 este mai lung
dect timpul de citire al ultimei locaii (2
n
-1) informaia de la locaia 0 are
de parcurs mult mai multe pori SAU dect oricare alta.


Figura 4.11. Schema general a unei memorii pe un bit (soluia scalabil)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 89
n figura 4.12 este prezentat o memorie tot cu 4 locaii, fiecare locaie
avnd de data aceasta un numr de 3 bii (D
2
D
0
). Numrul de bii de adres
este [log
2
4], adic 2 (A
1
A
0
). Validarea prelurii datelor scrierii sau
citirii se face cu semnalul de validare WE. Se remarc aceeai observaie de
nescalabilitate a porilor SAU aflate la ieirile de date D
<2>
, D
<1>
, D
<0>
.


Figura 4.12. Schema general a unei memorii pe 3 bii
n figura 4.13 este ilustrat modul de implementare a unei memorii de
8Koctei folosind circuite de 2K intrri adresabile 4 bii. Semnalul CS (chip
select) dac este setat pe 1 este validat adresarea, citirea i scrierea unui
cip. Este necesar gruparea pe fiecare linie a dou circuite pentru a realiza o
memorie adresabil pe octet (crearea unui banc de 2Koctei). Circuitele
primare avnd 2K intrri rezult necesitatea a 11 bii de adres (A
10
A
0
),
ceilali doi bii (A
12
A
11
) din totalul de 13 bii necesari pentru adresarea
unui spaiu de 8K intrri sunt folosii pentru selecia bancului de dou
ircuite primare. c


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
90 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 4.13. Implementarea unei memorii de 8Koctei folosind circuite de 2K
intrri adresabile 4 bii

Aplicaie 1: Descriei funcionarea circuitului secvenial din figura
urmtoare cunoscnd c la momentul iniial ieirile Q
3
Q
2
Q
1
Q
0
sunt 0000.


Figura 4.14. Schema unui numrtor pe patru bii

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 91
Pentru rezolvare se va realiza tabelul de valori al ieirilor Q
3
Q
2
Q
1
Q
0
.

Valoarea ieirilor Q
3
Q
2
Q
1
Q
0
la
momentul t
Valoarea ieirilor Q
3
Q
2
Q
1
Q
0
la
momentul urmtor t
Q
3
Q
2
Q
1
Q
0
Q
3
Q
2
Q
1
Q
0
0 0 0 0 0 0 0 1
0 0 0 1 0 0 1 0
0 0 1 0 0 0 1 1
0 0 1 1 0 1 0 0
0 1 0 0 0 1 0 1
0 1 0 1 0 1 1 0
0 1 1 0 0 1 1 1
0 1 1 1 1 0 0 0
1 0 0 0 1 0 0 1
1 0 0 1 1 0 1 0
1 0 1 0 1 0 1 1
1 0 1 1 1 1 0 0
1 1 1 0 0 1 1 0
1 1 0 1 1 0 1 1
1 1 1 1 1 1 0 1
1 1 1 0 0 0 1 0
Tabelul 4.2. Comporta matului secven ntrri
Dup cum se poate observa datorit area lui Q
0
,
acesta va schimba starea cu fiecare impuls de tact. De asemenea, Q
1
va
chimba starea abia dup dou impulsuri de tact (cnd Q
0
a schimbat din 0
i napoi din 1 n 0). Porile AND au rolul de a facilita tranzitarea
e funcionarea unui
ircuit numrtor saturat pe 4 bii.
it Program Counter (numrtor de program) care reine adresa
urmtoarei instruciun n f tea memoriei
i de numrul de octei pe care e reprezentat fiecare instruciune, acest
me auto ntul ial n funcie de i
inversorulu e la intr i d
s
n 1 i apo
dintr-o stare n alta a lui Q
2
abia dup 4 perioade de tact i respectiv a lui Q
3

abia dup 8 perioade de tact. Raionamentul poate continua i se va ajunge
a tabelul de adevr de mai sus, care de fapt descri l
c
n general, un numrtor este un dispozitiv care memoreaz de cte ori
un eveniment particular sau proces a avut loc atunci cnd s-a activat
semnalul de tact. n practic sunt folosite att numrtoare bazate pe
incrementare ct i numrtoare bazate pe decrementare. Anticipnd puin,
nitatea de control a fiecrei arhitecturi de procesare dispune de un registru u
num
i din program. uncie de adresabilita

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
92 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
numrtor va fi incrementat dup aducerea din memorie a cte unei
instruciuni cu o anumit valoare (1, 2, 4, 8), dar de fiecare dat aceeai.
4.2. AUTOMATE SECVENIALE I PROGRAMABILE
Automatul cu numr fi de stri presupune o desfurare automat a
unui
oare, n studiul computaiei i limbajelor i n proiectarea
sistem
eflect schimbrile intrrii de la iniializarea
istemului pn n momentul de fa. O tranziie indic o schimbare de stare
i este descris de o condiie care este nevoie s fie ndeplinit pentru a
declana tranziia. O aciune este o descriere a unei activiti ce urmeaz a fi
executat la un anumit moment. Exist cteva tipuri de aciuni:
Aciune de intrare executat la intrarea ntr-o stare.
Aciune de ieire executat la ieirea dintr-o stare.
Aciune de intrare de date executat n funcie de starea prezent i de
datele de intrare.
Aciune de tranziie executat n momentul unei tranziii.
Logica automatelor finite stabilete c ieirea i starea urmtoare a
unui automat finit este o funcie de intrare i de starea curent. Logica unui
AF este prezentat n figura 4.15 [Wik].
nit
numr finit de secvene. n informatic, automatele finite sunt folosite
pe larg n modelarea comportamentului aplicaiilor, ingineria software,
comp lat i
elor digitale hardware (automatele cu numr finit de stri se folosesc
n structurile hardware de predicie aferente ramificaiilor condiionate din
program, mecanisme de confiden n vederea unei evacuri / inserri
selective n structuri de predicie a salturilor indirecte de tip Target Cache,
dar i n reducerea decalajului dintre viteza procesoarelor i timpul de acces
la memorie prin concepte de tip selective victim cache).
Un automat finit (AF) sau o main cu stri finite este un model de
comportament compus din stri, tranziii i aciuni [Wik]. O stare stocheaz
nformaii despre trecut, adic r i
s

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 93

Figura 4.15. Logica automatelor finite
Automatul finit poate fi reprezentat printr-o diagram de stri (sau
diagram de stri i tranziii) ca n figurile 4.16 i 4.17 [Wik]. n plus, se
folosesc i tabele de tranziie. Cea mai comun reprezentare este dat mai
jos: prin combinaia strii curente (B) i a condiiei (Y) se determin starea
urmtoare (C). Informaii complete privind aciunile pot fi adugate doar ca
note de subsol. n limbaj natural funcionarea automatului urmtor s-ar
descrie astfel: Din starea B dac se ndeplinete condiia Y se trece n starea
C.

Starea curent / Condiia Starea A Starea B Starea C
Condiia X ... ... ...
Condiia Y ... Starea C ...
Condiia Z ... ... ...
Tabelul 4.3. Tabel de tranziie ntr-un automat cu numr finit de stri caz general

Figura 4.16 descrie funcionarea unui automat simplu de nchidere /
eschidere a unei ui (de supermarket, de autobuz, etc.). Practic automatul
se poate afla n dou stri posibile (DESCHIS sau NCHIS). n fiecare din
ele dou stri se ajunge datorit unei Condiii de tranziie (declanat
de u
de i

d
c
practic de scurgerea unui interval de timp sau de apsarea unui buton, sau
n senzor de micare, etc.) iar la intrarea n fiecare stare are loc o aciune
ntrare.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
94 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 4.16. Diagrama de stri i tranziii automat simplu de nchidere /
deschidere a unei ui
cur
pro
pe turi de
redicie implementate n cadrul procesoarelor actuale) [Flo05].

Pentru o i mai bun exemplificare, i pentru crearea unei legturi cu
sul care urmeaz acestuia introductiv, i anume cel de Organizarea i
iectarea microarhitecturilor, se prezint funcionarea unui automat finit
doi bii (de tip numrtor saturat, folosit de cele mai multe struc
p
Figura 4.17. Diagrama de stri i tranziii automat finit pe doi bii (de tip
numrtor saturat)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 95
Tabela de tranziie arat astfel:

Stare urmtoare Stare
curent
Pentru intrare = 0
(predicie
incorect)
Pentru intrare = 1
(predicie corect)
Predicie (Aciune
de ieire:
predictibil=1 /
nepredictibil=0)
0 0 1 0
1 0 2 0
2 1 3 1
3 2 3 1
Tabelul 4.4. Tranziiile automatului de predicie pe 2 bii
Cei doi bii pot codifica pn la patru stri (cazul nostru 03).
Funcionarea automatului este de tip numrtor saturat ntruct pentru o
intrare 1, starea este incrementat doar dac este mai mic strict dect starea
maxim altfel rmne la valoarea maxim (saturaie). Pentru o intrare 0,
parte este vzut n
binar invers sub forma 0011 i reprezint irile asociate fiec stri
n parte 0 i este asociat cel mai pu nificativ est caz
bitul 0, torul bit lui 1, bitul 0 etc).
Rolul acestui automa torul: starea utomatului va determina
aciunea ire (predicia ificaiei n pr , adic urm urii
cu if sau a celei cu else) Da logic, u ci se prezic saltul se
va face, iar dac e 0 logic, se prezice c saltu e va face. Evident c nu
se poate ac dicia este corect , procesorul va
considera c predicia este corect i va de a aducerea ciunii
urmtoare de pe ramura prezis. Dac predic te a fi fost fals
se va ini rocesarea cele e ramuri de program. Totodat, automatul va
tranzita n nou stare conform figurii 4.17 s tabelului 4.
starea este decrementat doar dac este mai mare strict dect starea minim
altfel rmne la valoarea minim (saturaie). ntr-o implementare software
care modeleaz funcionarea automatului finit (de predicie) acesta poate fi
este descris printr-un ir de caractere cu un format mai special, ce prezint
att numrul de stri, tranziiile ntre stri ct i predicia aferent fiecrei
stri. De exemplu, automatul anterior s-ar descrie prin irul de caractere:
01021323:12. Prima parte a irului pn la caracterul : reprezint
tranziiile pentru starea 0 cu intrare 0, apoi cu intrare 1, apoi tranziiile din
1 pentru aceleai intrri, etc. Numrul 12 din a doua
ie
in sem
rei
bit, n ac (strii
urm
t este urm a
de ie ram
c acesta e 1
ogram area ram
e c at n
l nu s
ti n avans d pre . Oricum
clan instru
ia se dovede
ia p ilalt
tr-o au a 4.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
96 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
ntr-un circuit digital, o implementare hardware a unui AF necesit
un registru pentru a stoca variabilele de stare, un bloc de logic
combinaional care determin tranziia de stare, i un alt bloc de logic
ombinaional care determin ieirea automatului finit [Wik].
Optimizare at fin gsire i finit cu
numrul minim de s are opereaz cu aceeai func litate. Aceast
problem se poate rezolva folosind un [Wik, Cor90].
Automatele finite pot fi clasific e n: Acceptoare Transductoare.
Automatele accepto genereaz o ieire binar, fie da, fie nu,
reprezentnd rspunsul la ntrebarea Intrarea este acce tat sau nu de
main?". Maina, utilizat n cazul gramaticilor din limbajele formale,
poate fi descris i ca f ie pentru un limbaj, n cazul de fa limbajul
definit ar conine toate cuvintele acceptate de main i nici unul din cele
neacceptate. Toate strile automatului se clasific n stri acceptante (finale)
esrii ntregului ir de
trare automatul este ntr-o stare final, atunci intrarea este acceptat, altfel
nu. Ca o regul, intrarea este compus din simboluri (caractere); nu se
folosesc aciunile. Transductoarele genereaz ieire pe baza unei intrri date
i/sau a unei stri, folosind aciuni. Ele sunt folosite n controlul aplicaiilor.
Aici se disting dou tipuri [Wik]:
Maina Moore Automatul folosete doar aciuni de intrare, i deci
ieirea depinde doar de stare. Avantajul modelului Moore este dat de
simplificarea comportamentului.
Maina Mealy Automatul folosete doar aciuni de intrare de date,
adic ieirea depinde de intrare i de starea curent. Utilizarea unui AF
Mealy conduce adesea la o reducere a numrului de stri.
n practic se folosesc deseori modele hibride. O alt distincie care se
face ntre automatele finite este cea ntre automatele finite deterministe
(AFD) i cele nedeterministe (AFN). n cazul automatelor deterministe, din
fiecare stare se poate efectua exact o singur tranziie pentru fiecare intrare
posibil. n cazul automatelor nedeterministe, pentru o anumit stare i o
anumit intrare, pot fi mai multe tranziii posibile, sau chiar nici una.
Aceast distincie este relevant n practic, dar nu i n teorie, deoarece
exist un algoritm care poate transforma orice AFN ntr-un AFD echivalent,
dei aceast transformare mrete, de obicei, complexitatea automatului.

Modelul matematic
n funcie de tip, exist mai multe definiii. Un automat finit acceptor
este un cvintuplu <, S, s
0
, , F>, unde:
este alfabetul de intrare (o mulime finit i nevid de simboluri).
c
a unui autom it nseamn a automatulu
tri c iona
algoritm de colorare
at i
are
" p
de initor
sau neacceptante. Dac la momentul terminrii proc
in

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 97
S este o mulime finit i nevid de stri.
s
0
este starea iniial, element al lui S. ntr-un automat finit
nedeterminist, s
0
este o mulime de stri iniiale.
este funcia de tranziie a strii: : S x S.
F este mulimea strilor finale, o submulime (posibil vid) a lui S.
Un automat finit transductor este un sextuplu <, , S, s
0
, , >, unde:
, S i s
0
i pstreaz semnificaiile din definiia automatului finit
acceptor.
este alfabetul de ieire (o mulime finit i nevid de simboluri).
este funcia de tranziie a strii: : S x S x .
este funcia de ieire.
Dac funcia de ieire este o funcie de stare i de alfabetul de intrare
(: S x ), atunci aceast definiie corespunde modelului Mealy. Dac
funcia de ieire depinde doar de stare (: S ), atunci aceast definiie
corespunde modelului Moore.

Aplicaie 2: Circuitul de mai jos implementeaz un automat cu numr finit
de stri (fie acesta M). Registrul pe un bit etichetat S memoreaz starea
curent, I este intrarea i O este ieirea.


(a) Cte stri are automatul M? Desenai diagrama strilor i a tranziiilor
pentru automatul M.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
98 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
(b) Circuitul de mai jos este un automat cu numr finit de stri programabil.
Componentele circuitului, sunt etichetate astfel: (A) o memorie cu patru
lo
c

caii fiecare coninnd un bit (2
2
x1-bit), (Z) o memorie cu dou locaii a
te un bit fiecare (2
1
x1-bit). (S) un registru pe un bit.

Ce trebuie s conin locaiile de memorie A i Z astfel nct acest circuit s
reprezinte o implementare hardware a automatului M?

Adresa (A
1
A
0
) Coninutul locaiei A
00
01
10
11
Adresa (Z
0
) Coninutul locaiei Z
0 1
1 0

Rspuns:
a) ntruct S este reprezentat pe un bit rezult c M are dou stri. Diagrama
strilor i a tranziiilor pentru automatul M arat astfel:


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 99

Considerm o stare a automatului (S=0) i alta (S=1). Din schem se
v c O= not S. o
a
bser De asemenea, pentru orice intrare egal cu 0 (I=0)
utomatul trece din starea curent n cealalt (din S=0 n S=1 sau invers).
Pentru orice intrare egal cu 1 (I=1) au atul i pstreaz starea.

b)
tom
Adresa (A
1
A
0
) Coninutul locaiei
00 1
01 0
10 0
11 1
Se observ c A
1
este I (intrarea n automat) iar A
0
este S (starea
curent). inem cont de consideraiile anterioare (intrare 1 pstreaz starea
constant, intrare 0 schimb starea).

Adresa (Z
0
) Coninutul locaiei
0 1
1 0
Se observ c O (ieirea) este dat de coninutul locaiei, i este negaia
strii S.

n finalul acestui curs, anticipnd puin ce va fi prezentat n cursurile
urmtoare, este ilustrat diagrama fluxului de date din cadrul calculatorului
LC-3. Aceasta conine toate structurile logice digitale, combinaionale i
secveniale, care combinate ndeplinesc funcia de procesare a informaiilor,

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
100 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
funcie cheie a oricrui model de calcul de tip von Neumann. Dei pare
demn de intimidat, schema este prezentat aici pentru a se observa c, n
acest moment, se dispune de cunotine suficiente pentru nelegerea
funcionalitii unui calculator.


Figura 4.18. Fluxul datelor la calculatorul LC-3
4.3. EXERCIII I PROBLEME
1. S se implementeze folosind circuite primare de memorie de capacitate
8Klocaii x 1 octet o memorie de 64Kcuvinte, fiecare cuvnt avnd 32
bii. Care sunt liniile de adres dac memoria este adresat pe cuvnt ?
Dar dac este adresat pe octet ?


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 101


2. n diagrama logic de mai jos A i B sunt doi regitrii pe 16 bii
conectai la un sumator care realizeaz operaii de adunare pe 16 bii. Se
presupune c registrul A are valoarea iniial 0 i registrul B are valoarea
X. Ce valoare va conine registrul A dac semnalul WriteEnableA este
activat de 5 ori ? Dar dac WriteEnableA este activat de N ori ?



3. n diagrama logic de mai jos se presupune c Y conine iniial valoarea
0 n timp ce X conine un numr oarecare n complement fa de 2. ntr-

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
102 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
o singur propoziie descriei ce valoare va reine Y dup ce semnalul
WriteEn este ridicat n 1 logic i cobort n 0 logic de 16 ori.



4. Automate secveniale si programabile: Se consider diagrama de
funcionare a urmtorului circuit.



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Elemente primare de memorare. Regitrii. Memorii. Automate cu numr finit de stri 103
Componentele circuitului, sunt etichetate astfel: (A) un registru pe 4 bii
reprezentnd un numr ntreg fr semn (iniializat cu valoarea 0); (B) un
num
ut
rtor pe 4 bii; (C) un registru pe 8 bii care memoreaz un ntreg n
complement fa de 2 (iniial setat pe 127); (D) un multiplexor pe 8 bii 2-la-
1; (E) un circuit al crui ieire este true (1) atunci cnd intrarea (un ntreg n
complement fa de 2 pe 8 bii) este pozitiv; (F) un sumator pe 8 bii; (G) o
memorie cu 16 locaii fiecare coninnd cuvinte de 8 bii (2
4
x8-bit). Se
presupune c aceast memorie are urmtorul coninut:

Adresa Coninut Adresa Conin
0
31
8
27
1
47
9
95
2
5
10
88
3
16
11
67
4
112
12
63
5
3
13
54
6
59
14
80
7 15
8 110

(a)
de
lips

Determinai valorile stocate n regitrii A i C la sfritul fiecrui ciclu
tact pentru 8 ciclii desfurai. Completai urmtorul tabel cu informaiile
.
Ciclu de tact Registrul A Registrul C
0 0 127
1
2
3
4
5
6
7
8

ntr-o singur propozii (b) e, ce realizeaz circuitul ?


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
5. MODELUL ARHITECTURAL VON NEUMANN.
COMPONENTE DE BAZ. PRINCIPIILE
PROCESRII INSTRUCIUNILOR
5.1
funcionale, ci este stocat n memorie, fiind descris folosind un
limbaj numit cod-main. n cod-main, operaiile de executat sunt
codificate sub forma unor numere numite instruciuni. El a recomandat
sistemul binar pentru memorarea datelor i a propus instruciuni de control a
acestora. Programul de executat este descris printr-un ir de instruciuni,
care se execut consecutiv. Von Neumann a introdus ideea gruprii
instruciunilor n subrutine care s fie apelate repetat. Subrutinele des
folosite nu trebuiau reprogramate pentru fiecare nou program ci puteau fi
pstrate n biblioteci i citite din memorie atunci cnd erau necesare. Pe
lng unitile funcionale care execut operaii aritmetice, calculatorul mai
are o unitate de control, care citete secvenial instruciunile programului i
care trimite semnale ntre unitile funcionale pentru a executa aceste
instruciuni. Rezultatele intermediare sunt stocate n memorie. Aceast
arhitectur se numete von Neumann. Marea majoritate a calculatoarelor
din ziua de azi sunt bazate pe aceast arhitectur; noiunea de limbaj-
main, i cea nrudit, de limbaj de programare, folosite pentru descrierea
programelor, sunt concepte foarte naturale pentru toi cei care manipuleaz
calculatoarele. Von Neumann propune calculatorul s fie vzut ca sistem
de procesare a informaiei (bazat pe procesor CPU), adic un mecanism
care dir ormaiei
. COMPONENTELE DE BAZ ALE MODELULUI
ARHITECTURAL VON NEUMANN
n anii '40, matematicianul John von Neumann [Wik] analizeaz
starea de fapt a calculatoarelor i scrie n 1945 un raport intitulat First
Draft of a Report on the EDVAC (Prima schi a unui raport despre
EDVAC Electronic Discrete Variable Automatic Computer), n care
sugereaz o arhitectura revoluionar care s transpun n realitate
(implementeaz fizic) maina universal de calcul Turing. n aceast
arhitectur, programul nu mai este reprezentat de felul n care sunt cuplate
unitile
ecioneaz dar i realizeaz procesarea inf
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Modelul arhitectural von Neumann. Componente de baz. Principiile procesrii
instruciunilor 105
(inter
ente principale:
4
acioneaz cu instruciuni i date preluate de la intrare i produce
rezultate la ieire).
Cunotinele anterior dobndite (o bogat colecie de circuite logice
combinaionale i secveniale) vor permite implementarea i funcionarea
logico-fizic a modelului arhitectural von Neumann. Figura 5.1 ilustreaz
structura de baz a calculatorului (arhitecturii de procesare) propus de von
Neumann pentru execuia programelor.
Se disting cinci compon
Memoria: reine att instruciuni ct i date.
4 Unitatea de procesare: execut instruciunile din programe.
4 Unitatea de control: parcurge secvenial i interpreteaz
instruciunile, controlnd fluxul de execuie al programelor.
4 Unitatea de intrare date (Input): permite introducerea datelor din
exterior n memoria calculatorului.
4 Unitatea de ieire (Output): produce rezultatul generat de program
pentru utilizator.


Figura 5.1. Modelul arhitectural von Neumann
Memoria are dou caracteristici importante: capacitatea (este de dorit
a fi ct mai mare) i timpul de acces (este de dorit a fi ct mai mic),
parametrii cu tendine antagoniste. Practic, cu ct capacitatea memoriei
crete, cu att scade timpul de acces la memorie i se ieftinete preul per
unitate de octet memorat. Creterea decalajului dintre viteza procesoarelor i
timpul de acces la memorie impune introducerea unui sistem ierarhic de
memorie, pentru a nu face simit la nivelul performanei globale a
sistemului ncetineala cu care se acceseaz memoria [Vin00].
Fiecare locaie de memorie este caracterizat de adres i coninut.
Adresa reprezint o secven binar (pattern de bii) care identific n mod

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
106 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
unic o locaie de memorie. Coninutul reprezint valoarea (patternul de
bii) stocat la respectiva adres. Numrul total de locaii de memorie
un
e un spaiu de adrese de 2 locaii (magistrala de adrese este pe 16 bii).
Uzual, calculatoarele actuale sunt dotate cu o memorie principal (central)
de tip nd un
cuv
ord) la fiecare acces n memorie.
i MDR. MAR (registrul de adres al memoriei) este ncrcat cu valoarea
adr
e va fi stocat
memorie la activarea semnalului WriteEnable.
Pentru o mai bun nelegere a noiunilor de adres de memorie i
respectiv coninutul memoriei, se consider urmtorul exemplu: fie o
memorie de tipul (2
3
x3-bii) a crei locaii sunt numerotate de la adresa
000
2
la 111
2
. n aceast memorie la adresa 110
2
se afl cuvntul 000
2
iar la
a
unice (nu pot exista dou
ns
disponibile formeaz spaiul de adrese. Calculatoarele LC-2 i LC-3 disp
16
d
RAM de capacitate 1 GByte (2
32
adrese, la fiecare adres exist
nt de 8 bii). Adresabilitatea constituie numrul de octei de date
(cuvnt de memorie word) disponibili la o anumit adres i utilizai de
ctre unitatea de procesare. n mod frecvent, o instruciune trebuie s scrie
au s citeasc un ntreg cuvnt (w s
Accesarea memoriei se realizeaz prin intermediul celor doi regitrii MAR
esei de la care sau la care se va citi sau scrie din / n memorie. Valoarea
din MAR va fi depus pe decodificatorul de adrese al memoriei. Pentru
instruciunile care citesc date din memorie (de tip load) coninutul memoriei
se ncarc n MDR (registrul de date al memoriei). Pentru instruciunile de
scriere n memorie (de tip store), n MDR se nscrie valoarea c
n
dresa 000
2
se afl cuvntul de date 001
2
. Se reamintete c, adresele sunt
locaii distincte caracterizate de aceeai adres).
, coninuturile a dou sau mai multe locaii pot coincide.

Adresa Coninut
000
2
001
2
001
2

010
2

011
2

100
2

101
2

110
2
000
2
111
2


Unitatea de procesare reprezint motorul de execuie al programului.
Este compus din mai multe uniti, fiecare ndeplinind o anumit funcie
complex (de la adunri, scderi la nmuliri, mpriri, extrageri de rdcin
ptrat, etc). O unitate de procesare minimal conine o unitate aritmetico-

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Modelul arhitectural von Neumann. Componente de baz. Principiile procesrii
instruciunilor 107
logic (ALU) i un set de regitrii de uz general. Numrul de bii ai datei
cu care opereaz unitatea de procesare se numete dimensiunea cuvntului
de date (word size) al mainii (arhitecturii). ALU realizeaz operaiile
aritmetico-logice de baz (adunare / scdere / AND / NOT) n general pe
ntreg
bii, la Intel Pentium IV pe 32 de bii, la
ntel Itanium, PowerPC i Alpha Compaq pe 64 de bii. Procesoarele din
sistemele dedicate (telefoane celulare, maini de splat, frigidere,
co e
cu ca
fiecare pe 16 bii, arhitectura Alpha ISA deine 32
e regitrii fiecare pe 64 de bii, procesoarele MIPS R2000, R3000 dein 32
de regitrii pe 32 de bii fiecare (MIPS R16000 are 64 regitrii care pot lucra
az toate aciunile necesare pentru
execuia instruciunilor: extrage (instruction fetch) din memorie (sau din
cache
din memorie i
IR (instruction register) pstreaz instruciunea curent care se execut.
Unitile de intrare / ieire sunt cunoscute sub numele generic de
dispozitive periferice nu din cauz c sunt mai puin importante pentru
procesor ci datorit poziiei acestor dispozitive fa de CPU. n cazul
calculatorului (simulatorului) LC-3 (LC-2) dispozitivul de intrare l
reprezint tastatura cu regitrii de interfa (KBDR de date i KBSR de
stare) iar dispozitivul de ieire este monitorul cu regitrii de interfa
(CRTDR de date i CRTSR de stare). Evident c exist o varietate de
dispozitive de intrare (mouse, scanere digitale, stick-uri USB, dischete, etc)
i de ieire (imprimante, ecrane cu cristale lichide, harddisk).


ul cuvnt de date (word) dar uneori i pe subdiviziuni ale acestuia
(octet, bit). Procesorul MIPS are cuvntul de date pe 32 de bii dar
instruciunile acestuia pot opera i pe octet (byte), semicuvnt (halfword).
Cuvntul de date la LC-2 este pe 16
I
piatoare, imprimante, etc) necesit cuvinte de date pe doar 8 bii. Valoril
re opereaz unitatea aritmetico-logic sunt stocate n zone de memorie
de capacitate foarte redus i caracterizate de vitez de operare
(citire/scriere/deplasare/rotire) foarte ridicat regitrii procesorului. LC-2
eine 8 regitrii (R d
d
0
R
7
)
cu date att pe 64 ct i pe 32 de bii).
Unitatea de control coordone
-ul de instruciuni) instruciunea, o decodific (decode), preia
operanzii corespunztori din regitrii sau memorie (operand fetch) i o
execut (execute). Folosete doi regitrii de interfa cu memoria: PC
(program counter) n alte arhitecturi poart denumirea de instruction
pointer, reine adresa urmtoarei instruciuni care va fi adus

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
108 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
5.2. PRINCIPIILE PROCESRII INSTRUCIUNILOR
Ideea central a modelului de procesare propus de von Neumann
evideniaz faptul c att instruciunile ct i datele sunt memorate ca i
secvene de bii, n memoria calculatorului, programul fiind executat
succesiv (pascupas) cte o instruciune la un moment dat n funcie de
direcia indicat de unitatea de control.


Figura 5.2. Calculatorul LC-3 vzut ca un
[Pal07
model de procesare von Neumann
]

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Modelul arhitectural von Neumann. Componente de baz. Principiile procesrii
instruciunilor 109
Dup cum se poate observa n figura 5.2, nucleul central (inima) al
unitii de control finit de stri care
stabilete starea i ie ice conform cu
fiecare tip de instruciune (selecia regitrilor surs/destinaie, tipul
operaiei: cu registru surs sau cu valoare imediat, tipul instruciunii: de
rocesul este controlat de ctre
finit de stri efectueaz cte o
tranziie (ciclu main) la fiecare impuls de tact (perioada de tact este
l reprezint un automat cu numr
irea automatului i a circuitelor log
salt necondiionat sau apel de subrutin, etc). P
ceasul sistemului. Automatul cu numr
egal cu inversul frecvenei procesorului
CLK
CLK
f
T = ).
1
5.2.1. CICLUL INSTRUCIUNII
Vzut din exterior instruciunea reprezint unitatea atomic
(fundamental) a unui program. Cu toate acestea instruciunea este divizat
pe cmpuri de ctre unitatea de control i interpretat permindu-se apoi
execuia ei. n cadrul procesoarelor RISC (MIPS, Alpha, PowerPC)
formatul instruciunilor este de lungime fix (uzual 32 de bii). Fiecare
instruciune este caracterizat de dou cmpuri de baz:
Codul operaiei (opcode): specific operaia ce se va executa.
Operanzii: sursa respectiv destinaia instruciunii.
Setul de instruciuni al calculatorului, formatul acestora, setul de
regitri, tipurile de date utilizate i modurile de adresare (mecanismul prin
are calculatorul / procesorul localizeaz operanzii) constituie arhitectura
me iei sale se numete ciclul instruciunii.

etape:
o (1) Coninutul registrului PC se depune n MAR (MAR (PC)).
o (2) Automat PC-ul este incrementat pentru a pointa spre adresa
Instruciunea se depune din registrul de date al memoriei n IR (IR
(MDR)).
c
setului de instruciuni (ISA).
Succesiunea de etape prin care trece instruciunea de la aducerea ei din
morie pn la ncheierea execu
Von Neumann a propus ase etape (faze de procesare ale instruciunii):
Fetch: aduce instruciunea din memorie de la adresa dat de registrul PC
i o depune n registrul instruciunii (IR). Chiar i aceast etap poate fi
divizat n sub
urmtoarei instruciuni (PC (PC) + 1).
o (3) Se citete instruciunea din memorie odat cu accesarea semnalului
READ (MDR Mem[MAR]).
o (4)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
110 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Dac subetapele (1), (2) i (4) necesit un singur ciclu de tact (operaii
foarte rapide de transfer sau adunare), subetapa (3) poate dura mai mult
n funcie de decalajul n timp dintre timpul de acces la memorie i viteza
procesorului.
de
instruciunea n cauz.
Evaluate address: n cazul instruciunilor cu operand n memorie este
registru sau registru cu valoare imediat). Dac
instruciunea este de ramificaie (modific fluxul de control al
programului) atunci registru PC este actualizat cu o nou valoare adresa
d
lor RISC cu mod de
dresare indirect registru i nu indexat) poate fi evitat faza Execute. De
asemenea, nu toate fazele de procesare n erioade
de tact.

Decode: este identificat operaia ce va avea loc i sunt stabilii operanzii
(regitrii surs i cel destinaie). Opcode-ul este depus pe intrarea unui
decodificator care va decide secvena de evenimente solicitate

calculat adresa acestuia (cunoscut sub numele de adres efectiv


effective address).
Fetch operands: sunt determinai operanzii surs pentru execuia
instruciunilor fie din setul de regitrii generali ai procesorului fie din
memorie. Regitrii surs vor deveni operanzi de intrare pentru unitatea
aritmetico-logic sau pentru memorie. Pentru operandul stocat n
memorie este folosit adresa efectiv (EA), calculat la pasul anterior
(evaluate address).
Execute: se execut operaia codificat n instruciune. De exemplu,
pentru instruciunile aritmetico-logice se adun/scade etc., cei doi
operanzi (registru cu
estinaie a instruciunii de salt. Pentru instruciunile de transfer cu
memoria (load / store) n aceast faz nu se face nimic.
Store results: scrie rezultatul instruciunii n destinaia corespunztoare
(n registru sau n memorie). Adresa efectiv anterior calculat va indica
de unde se aduce rezultatul sau unde se scrie n memorie.
O observaie care rezult se refer la faptul c nu toate instruciunile
necesit toate cele 6 faze de procesare. Pentru instruciunile care folosesc
doar regitrii (formatul R-tip la instruciunile procesoarelor RISC) faza
Evaluate Address poate fi srit (skip). Pentru instruciunile cu referire la
memorie (formatul I-tip la instruciunile procesoare
a
ecesit acelai numr de p

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Modelul arhitectural von Neumann. Componente de baz. Principiile procesrii
instruciunilor 111

Figura 5.3 Ciclul instruciunii n concepia lui von Neumann
Dup cum se poate observa n figura 5.3 unitatea de control repet
ul instruciunii pentru toate instruciunile din program, ghidat de
oarea registrului PC. ntruct valoarea aces
cicl
val tuia este incrementat pe
dur
control pe durata fazei execute rezult c n fiecare moment se cunoate
adr
leg e, arbori), cunoscnd adresa primei instruciuni se poate trece la
exe
D
procesa e de execuie din cadrul
pro n la 20 i chiar 31 de
Pre
ata fazei fetch sau este actualizat de instruciunile de ramificaie i
esa urmtoarei instruciuni. La fel ca i n cazul structurilor de date cu
turi (list
cuia ntregului program.
ei nu toate tipurile de instruciuni necesit toate cele ase faze de
re i, n ciuda tehnicilor avansat
cesoarelor pipeline
4
superscalare care presupun p
nivele pipeline de procesare (vezi Intel Pentium 4 versiunile Northwood i
scott), fazele de procesare propuse de von Neumann (v.N) au rmas

4
hnica de procesare pipeline reprezint o tehnic de procesare paralel a informaiei prin
un proces secvenial este divizat n subprocese, fiecare subproces fiind executat ntr-u
ent special dedicat i care opereaz n paralel cu celelalte segmente. Fiecare segment
Te
care n
gm se
execut o procesare parial a informaiei. Rezultatul obinut n segmentul i este transmis n
tactul urmtor spre procesare segmentului (i+1). Rezultatul final este obinut numai dup ce
informaia a parcurs toate segmentele, la ieirea ultimului segment. Denumirea de pipeline
provine de la analogia cu o band industrial de asamblare. Este caracteristic acestor tehnici
faptul c diversele procese se pot afla n diferite faze de prelucrare n cadrul diverselor
segmente, simultan.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
112 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
actuale i n ziua de azi. Din punct de vedere al performanei sistemelor de
calcul, evoluia de la modelul de procesare propus de von Neumann la cele
actuale const n urmtorul fapt: modelul iniial (v.N) presupunea c
instruciunile sunt executate secvenial, una cte una; doar dup ce o
instruciune aflat n curs de execuie a efectuat faza store result o alta poate
efectua faza fetch. Procesoarele moderne presupun un paralelism att
temporal de tip pipeline (mai mult e procesare aferente unor
instruciuni diferite executate n acelai timp) ct i unul spaial de tip
uperscalar (mai multe uniti de execuie aferente aceleai faze de
procesare).
5.2.2. TIPURI DE INSTRUCIUNI
Calculatorul (simulatorul) LC-3 deine un set de 16 instruciuni, astfel
nct cmpul opcode este codificat pe 4 bii. De asemenea, zona temporar
de stocare din cadrul unitii de procesare (regitrii procesorului) const din
8 locaii (R0-R7). Codificarea operanzilor (surs, destinaie) n corpul
instrucii se face pe 3 bii per operand. Se disting trei mari categorii de
instruciuni [Patt03]:
Operaionale (instruciuni de procesare a datelor aritmetico-logice)

e faze d
s

Figura 5.4. Exemplu de instruciune de adunare la calculatorul LC-3
Semantica instruciunii din figura 5.4 este urmtoarea: ADD R6, R2, R6
sau Adun coninutul registrului R2 la coninutul registrului R6 i
stocheaz rezultatul n registrul R6.

Instruciuni de transfer date (transfer de date ntre memorie i regitrii
procesorului)
Pentru exemplificare se consider instruciunea LDR (ncarc o dat de
la o locaie de memorie ntr-un registru al procesorului). Adresa de memorie
se determin printr-o adunare dintre un registru de baz i un deplasament
(offset). Este ntlnit n cazul instruciunilor din programele de nivel nalt
care prelucreaz structuri de date omogene (vectori, matrici).


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Modelul arhitectural von Neumann. Componente de baz. Principiile procesrii
instruciunilor 113

a 5.5. Exemplu de instruciune de aducere din memorie la calculatorul LC-3 Figur
Semantica instruciunii din figura 5.5 este urmtoarea: LDR R2, 6(R3)
sau Adun valoarea 6 la coninutul registrului R3 pentru a forma
adresa de memorie. ncarc data din memorie de la adresa calculat n
ciuni de ramificaie sau modificare a fluxului de
execuie al programului). n cadrul acestei categorii se ncadreaz
instruciunile de salt condiionat, necondiionat, indirecte, de apel de
su
registrul R2.

De Control (Instru
brutine.
Teorema lui Bhm-Jacopini afirm c orice program (de nivel nalt)
poate fi descris folosind structuri secveniale, alternative i repetitive. Astfel,
dac nu apare n cadrul programului nici o structur alternativ (if/else,
switch/case) sau repetitiv (repeat, while, for) n faza FETCH unitatea de
control aduce cte o instruciune de la adresa dat de PC i i incrementeaz
apoi valoarea acestuia. Instruciunile de ramificaie din programele
asamblare poart numele de jump-uri (salturi) sau branch-uri. Jump-urile
sunt necondiionate (modific ntotdeauna PC-ul) iar branch-urile sunt
condiionate (modific PC-ul doar dac o condiie logic este ndeplinit,
spre exemplu dac coninutul unui registru este egal cu 0). Pentru aceste
instruciuni pe durata fazei EXECUTE este actualizat PC-ul cu adresa
destinaie a saltului.
Pentru exemplificare se consider instruciunea JMPR (ncarc PC-ul
cu valoarea obinut prin adugarea unui offset la coninutul unui registru al
procesorului. Valoarea care se ncarc n PC reprezint adresa instruciunii
de la care se continu procesarea).


Figura 5.6. Exemplu de instruciune de salt necondiionat la calculatorul LC-3
Semantica instruciunii din figura 5.6 este urmtoarea: JMPR R3, #6
sau Adun valoarea 6 la coninutul registrului R3 i ncarc rezultatul
binut n registrul PC.

o

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
114 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
5.2.3. CEASUL PROCESORULUI
Motorul ntregii activiti de procesare a instruciunilor l reprezint
semn
ura 5.7.
alul de ceas. Ceasul sistemului este semnalul care ine unitatea de
control n micare. La fiecare impuls de tact (ceas) unitatea de control
tranziteaz la urmtorul ciclu main (urmtoarea instruciune sau
urmtoarea faz din instruciunea curent) vezi fig


Figura 5.7. Ciclul instruciunii vzut ca un automat cu numr finit de stri
Circuitul generator de semnal de tact este bazat pe un cristal de cuar
oscilator, care genereaz secvene regulate de nivele logice 0 i 1.
Perioada de tact se determin ntre dou fronturi ascendente ale semnalului
de ceas (vezi figura 5.8b).

Oprirea sistemului de calcul
Programele utilizator se ncheie prin transferarea controlului
portant aplicaie software care ruleaz pe sistemului de operare (cea mai im
un sistem de calcul i care are printre funciile sale pe cea de gestionare a
procesorului i a celorlalte resurse hardware). n continuare, sistemul de
operare intr ntr-o bucl de ateptare pn cnd este lansat o nou

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Modelul arhitectural von Neumann. Componente de baz. Principiile procesrii
instruciunilor 115
aplicaie utilizator. n tot acest timp, unitatea de control este activ i
parcurge ciclul instruciunii aferent instruciunilor componente programelor
utilizator sau a celor aparinnd sistemului de operare. Oprirea sistemului de
calcul presupune oprirea unitii de control, deci anularea semnalului de tact
care reprezint pulsul sistemului. Acest lucru se realizeaz printr-o
operaie de SI logic cu un generator de semnal 0- logic (vezi figura 5.8a.
Generatorul de semnal 0 este un bistabil de tip R-S pe a crui intrri R i
S se seteaz valorile 0 i 1 (R=0 i S=1).


Figura 5.8. Oprirea sistemului de calcul
5.3. E
1. Pentr
cuvntul
Coninu
XERCIII I PROBLEME
u aceast problem, se consider o memorie cu 8 locaii, avnd
de date pe 3 bii (2
3
x3 bii), aa cum se poate observa mai jos.
tul memoriei este urmtorul:


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
116 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

orie.

OPC E entru
codif r rea imediat
(IMM

OPC
a) tiind c fiecare bit de memorie este reinut folosind un bistabil de tip D,
ci astfel de bistabili sunt necesari pentru implementarea memoriei
respective?
b) Presupunnd c se ncepe citirea din memorie la locaia 000 i c fiecare
valoare citit din memorie de la adresa curent reprezint adresa
urmtoarei locaii de unde se va citi, indicai irul primelor 8 valori citite
din mem

2. Se consider urmtorul format de instruciune pe 32 de bii, alctuit din
OD , cmp pentru codificarea registrului destinaie (DR), cmp p
ica ea registrului surs (SR) i un cmp pentru valoa
).
ODE DR SR IMM

Dac sunt
care este c
IMM?

3. Se cons
Von Neum
i ncheie
memorie (
necesit 1.
(DECODE
ADDRESS
OPER ciclu pentru
scrier
Cte in
o frecven

4. Se c or) este invers
proporional u Altfel spus,
Frecvena=1/Perioada_de_tact. De exemplu, un procesor la 1 GHz are
perioada de tact de 1 ns (10
-9
s). Considerm trei tipuri mari de instruciuni:
implementate 60 de coduri de operaie (opcodes) i 16 regitrii,
el mai mare numr pozitiv care poate fi reprezentat n cmpul
(Se presupune c IMM este un numr n complement fa de 2).
ider o arhitectur de procesare care urmeaz modelul propus de
ann (n care se specific faptul c fiecare instruciune trebuie s-
execuia (store result) nainte de aducerea altei instruciuni din
fetch instruction)). Presupunnd c, n medie o instruciune
2 ciclii de tact pentru faza FETCH, 1 ciclu pentru decodificare
), 1 ciclu pentru evaluarea adresei operanzilor (EVALUATE
), 1.8 ciclii de tact pentru aducerea operanzilor (FETCH
ANDS), 2 ciclii de tact pentru faza EXECUTE i 1
ea rezultatului n setul de regitrii ai procesorului (STORE RESULT).
struciuni sunt executate ntr-o secund de un procesor care ruleaz la
de 2.5 GHz ?
unoate c frecvena unui calculator (proces
c perioada sa de tact.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Modelul arhitectural von Neumann. Componente de baz. Principiile procesrii
instruciunilor 117
cu acces la me r d/And/Or, etc) i
altele (grupa ins
mai muli ciclii pent
dureaz 12 ciclii de act, n timp ce
cele de r
tipuri de i

mo ie (load/store), aritmetico-logice (Ad
truciunilor de ramificaie). O instruciune poate necesita
ru execuie. Astfel, instruciunile cu referire la memorie
tact, cele aritmetico-logice 9 ciclii de t
amificaie necesit 10 ciclii de tact. Frecvena medie de apariie pe
nstruciuni este ilustrat n urmtorul tabel:
Tipul Instruciunii Frecvena de apariie [%]
Instruciuni cu referire la memorie 40%
Instruciuni aritmetico-logice 40%
Alte instruciuni 20%

m avnd 650.000 de
instruciuni pe un calculator ce ruleaz la o frecven de 3.2 GHz.

Determinai ct timp (s) dureaz execuia unui progra
5. Urmtorul tabel reprezint o mic memorie. Pentru urmtoarele ntrebri
se va face referire la acest tabel.

Adresa Data
0000 x1E43
0001 xF025
0010 x6F01
0011 x0000
0100 x0065
0101 x0006
0110 xFED3
0111 x06D9

a) Care este valoarea binar coninut n locaia 3? Dar n locaia 6?
b) Valoarea binar coninut n fiecare locaie de memorie poate fi
interpretat n mai multe moduri: numr ntreg n complement fa de 2,
numr flotant simpl sau dubl precizie, etc.
b1) Interpretai locaia 0 i locaia 1 ca ntregi cu semn n complement
fa de 2.
b2) Considernd locaia 4 ca fiind un cod ASCII, despre ce caracter este
vorba ?

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
118 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
b3) Interpretai locaia 6 ca un numr flotant n dou ipostaze: 1 bit de
semn, 7 bii de exponent i 8 bii de fracie, respectiv 1 bit de semn,
coninutul acestei locaii. Ce valoare binar conine respectiva locaie?
torul LC-3 urmeaz s efectueze faza FETCH
adresa specificat de registrul PC. Cunoscnd
confi
locai
5 bii de exponent i 10 bii de fracie.
b4) Interpretai locaia 5 ca un ntreg fr semn.
c) n modelul de procesare Von Neumann coninutul unei locaii de
memorie poate fi i o instruciune. Dac acest lucru se ntmpl la
locaia 0, identificai instruciunea.
d) O valoare binar poate fi interpretat i ca o adres de memorie.
Presupunnd acest lucru la locaia 5, ce adres de memorie se indic prin

6. Se consider c simula
aferent instruciunii de la
guraia iniial a componentelor modelului von Neumann (unitatea de
procesare setul de regitrii generali, unitatea de control registrul PC i
unitatea de memorare regitrii MAR i MDR i respectiv coninutul
ilor de memorie) se cere s se determine coninutul fiecreia dintre
resursele indicate n figur dup executarea de dou ori a ciclului
instruciunii. Indicaie: Instruciunea de la adresa 0x3010 este una de
adunare (ADD) iar cea de la adresa 0x3011 este I Logic (AND).



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
6. LC-3 ARHITECTURA SETULUI DE
INSTRUCIUNI. CALEA FLUXULUI DE DATE.
ORGANIZAREA MEMORIEI LA LC-3 [Patt03]
6.1. LC-3 ARHITECTURA SETULUI DE
z prin intermediul

struciuni aferent procesorului virtual (simulatorului) LC-3 (Little
Comp
are vrea s scrie un program n limbajul main
al respectivului procesor sau s neleag dac un program scris n limbaj de
nivel nalt a fost translatat corect n codul main al procesorului n cauz.


INSTRUCIUNI
Arhitectura Setului de Instruciuni (ISA) reprezint interfaa
dintre software (programele de aplicaie / sistem de operare) i hardware-ul
care l execut. ISA specific modul de organizare a memoriei (spaiul de
adresare: zon de date statice i dinamice, de cod, de stiv, zon rezervat
nucleului sistemului de operare, adresabilitatea numr de bii stocai la
fiecare locaie), setul de regitri, setul de instruciuni, formatul instruciunii,
tipurile de date utilizate i modurile de adresare (mecanismul prin care
calculatorul / procesorul localizeaz operanzii). Translatarea unui program
de nivel nalt (fie acesta C, Fortran) n ISA-ul aferent calculatorului care va
executa respectivul program (uzual IA-32) se realizea
compilatorului.
Capitolul de fa realizeaz trecerea de la partea hardware spre cea
software a unui sistem de calcul. Astfel, este descris arhitectura setului de
in
uter versiunea 3) [Patt03] i vor fi analizate detaliat organizarea
memoriei i calea fluxului de date respectiv control la LC-3.
ntr-o alt definiie, ISA ar reprezenta totalitatea componentelor i
operaiilor (hardware ale) unui calculator vizibile la nivelul programatorului
(software). ISA pune la dispoziia proiectantului (hardware) de sisteme de
calcul toate informaiile necesare pentru a putea construi un calculator
conform modelului propus de von Neumann. Aceste informaii sunt
suficiente i pentru cineva c
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
120 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
6
REGITII GE
uciunile
datele
Dup cum s-a mai precizat n capitolul anterior, arhitectura von
Neumann a unui sistem de calcul pune la dispoziie doi regitrii de interfa
procesor memorie:
Registrul de adres al memoriei (MAR) care selecteaz prin
intermediul unui decodificator de adres locaia de memorie care
va fi scris sau citit.
Registrul de date al memoriei (MDR) care reine data citit sau
care se va scrie din / n memorie.
LC-3 reprezint un procesor virtual pe 16 bii (fiecare instruciune este
codificat pe 16 bii). De asemenea, memoria este adresat printr-un cuvnt
5

de 16 bii (busul de date fiind de 16 bii). n consecin, spaiul de memorie
adresabil la LC-3 este de 2
16
locaii = 65536 (64k) locaii. Adresabilitatea la
LC-3 este tot de 16 bii, de unde rezult faptul c, LC-3 dispune de o
memorie total de 64k 2o = 128ko. Spre deosebire de alte procesoare, LC-
3 nu este adresabil pe octet. Spaiul de memorie al LC-3 (pentru d se
vedea
(nc t
sistemului serviciu),
iv (aferent apelurilor de funcii din programele utilizator
ntruct p ere logic dar i fizic memoria difer de
ste situat n afara) unitatea de procesare, operaiile cu memoria consum
de ce
memorare temporar de vitez foarte
mare
.1.1. LC-3 ISA: ORGANIZAREA MEMORIEI I SETUL DE
NERALI
Spaiul de memorie aferent unui sistem de calcul este organizat n
aa fel nct s rein instruciunile programelor utilizator, instr
programelor supervizor (aferente sistemului de operare) dar i
prelucrate prin intermediul respectivelor programe.
etalii a
i figura 10.4 din capitolul 10) conine o zon de cod utilizator
epnd cu adresa 0x3000), zona de date globale, zona rezerva
de operare (care include i instruciunile rutinelor de
zona de st
variabile locale, parametrii, etc.).
i din unct de ved
(e
le mai multe ori mai mult dect un ciclu de tact procesor (>1T
CPU
).
Aceste operaii presupun nti calculul adresei i apoi citirea sau scrierea
datei, realizabile prin instruciuni load LDR sau store STR.
Setul de regitrii generali alturi de unitatea aritmetico-logic
compun unitatea de procesare a oricrui sistem de calcul. Regitrii
procesorului constituie o resurs de
(accesul scrierea i citirea se face la viteza procesorului) dar de

5
Cu toate c, la toate procesoarele octetul este format din 8 bii, numrul de bii care
compun un cuvnt de date nu este identic la toate arhitecturile. Astfel, la LC-3 cuvntul
(word) este pe 16 bii iar la procesorul MIPS R3000 este pe 32 de bii, informaia stocat pe
16 bii numindu-se semi-cuvnt (halfword).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 121
capacitate redus. Pot fi accesai pe timpul fazei de procesare Fetch
Operand aferent instruciunilor de tip Add, Load sau Store. LC-3 [Patt03]
dispune d i regitrii
booleeni de condi
setai sau resetai de ctre instruciunile care au un registru destinaie
de condiie este setat, bazat pe ultima instruciune care altereaz un
regist
te unitatea de control a proc r i - [P 0
dispune PC l ca n
curs de p Instru cesorului LC- icate pe un
singur cuvnt
i
truciunii
(IR[11:0]) specific operanzii (asupra crora se aplic operaia)
adresare aferent instruciunii:
ii pentru fiecare operand surs i / sau
e
e 8 regitrii generali R
0
R
7
, fiecare pe 16 bii i tre
ie (N negativ, Z zero, P pozitiv) fiecare pe 1 bit,
(aritmetico-logice i de citire din memorie). n fiecare moment, cel mult un
registru
ru general. Un alt registru foarte important, indirect adresabil de ctre
programator este PC (Program Counter), care reine adresa urmtoarei
instruciuni. Prin instruciunile de salt i apel de / revenire din subrutin
valoarea PC-ului poate fi alterat.
6.1.2. LC-3 ISA: FORMATUL INSTRUCIUNII I SETUL DE
INSTRUCIUNI
Se reaminte c eso ulu LC 3 att 3]
de 2 regitrii:
rocesare).
6
i IR (registru
ciunile pro
re reine instruciunea aflat
3 sunt codif
de 16 bii i sunt compuse din dou pri principale:
+ Opcode (sau codul operaiei, reinut de cei mai semnificativi 4 bi
ai registrului instruciunii IR[15:11]). Rezult practic 2
4
=16
operaii (instruciuni) distincte un set foarte simplu. n general
trebuie ales un compromis ntre un set de instruciuni complex, dar
de cele mai multe ori redundant, caracterizat de un cost ridicat i un
set optimizat de instruciuni la un cost mai mic (vezi clasificarea
procesoarelor RISC CISC [Vin03] care face obiectul cursului de
Organizarea i proiectarea microarhitecturilor). Acest compromis
se stabilete de cele mai multe ori pe baza simulrii pe programe de
test reprezentative (benchmark-uri).
+ Cei mai puini semnificativi 12 bii ai registrului ins
conform modului de
i: cte 3 o Regitri b
destinai .
o Cmp generator de adres (offset) pe 6, 9 sau 11 bii.
o Valoare imediat pe 5 bii.

6
Exist procesoare (de exemplu INTEL) cu instruciuni de lungime variabil pe unul sau
mai multe cuvinte.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
122 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Singurul tip de C-3 este tipul ntreg
comp
d byte), ntreg pe 16 bii cu i fr semn (int / unsigned
int, h i fr semn (long /
pe
ii
Modurile de adresare specific modul de localizare al operanzilor
esare direct (sau relativ la PC): EA este codificat n
corpul instruciunii i se obine printr-o nsumare a PC cu cmpul
generator de adres pe 9 bii).
o Adresare indirect. n corpul instruciunii este codificat un
pointer
7
spre EA: valoarea PC + cmp generator de adres pe 9
bii formeaz adresa la care gsim adresa operandului (i nu
operandul ca n cazul adresrii directe).
o Adresare indexat (sau relativ la o adres de baz) folosit n
cazul instruciunilor de prelucrare ale tablourilor (structurilor
matriceale). EA se obine nsumnd adresa de baz stocat ntr-
un registru general i un cmp generator de adres pe 6 bii.
Diferena dintre adresarea direct i cea indexat const n faptul
c, n cazul primeia, adresarea se face ntr-o zon (NEAR)
apropiat PC-ului instruciunii de transfer date (+/- 256
instruciuni) iar n cazul celei de-a doua adresri, spaiul accesat
poate fi (FAR) ndeprtat fa de instruciunea de transfer
Pe scurt,
dat nativ (implementat la) L
lement fa de 2 pe 16 bii. Celelalte procesoare (de exemplu MIPS,
INTEL) implementeaz i tipurile: ntreg pe 8 bii cu i fr semn (short /
byte, byte / unsigne
alfword / unsigned halfword), ntreg pe 32 bii cu
unsigned long, word / unsigned word), simpl precizie virgul mobil
32 de bii (float) respectiv dubl precizie virgul mobil pe 64 de b
(double).
instruciunii. Prin convenie, adresa efectiv (EA) reprezint locaia de
memorie a operandului. LC-3 [Patt03] suport 5 moduri de adresare:
Imediat (dac operandul este localizat direct n instruciune).
Registru (operanzii surs sunt doi regitrii generali).
Memorie (cu:
o Adr

(practic aproape oriunde n zona de cod utilizator).
setul de instruciuni aferent LC-3 ISA cuprinde:
+ Instruciuni operaionale, care manipuleaz direct date. Din
aceast categorie fac parte cele aritmetico-logice (ADD, AND i
NOT).
+ Instruciuni de transfer date:
a) ntre memorie i regitrii procesorului
- citire din memorie (LD, LDI i LDR)

7
Termenul de pointer a fost preluat n limba romn i poate fi folosit cu sensul de
referin, indicator de adres, localizator. Pentru detalii studiai capitolul 12.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 123
- scriere n memorie (ST, STI i STR)
- ncrcarea unei adrese de baz ntr-un registru
destinaie (LEA). Spre deosebire de cele 6 instruciuni
anterioare, LEA nu acceseaz memoria.
ntre memorie / regitrii i porturi (regitrii de interfa ai
ct i respectiv apel / revenire de / din subrutin, ntreruperi
software): BR, JMP / RET, JSR / JSRR, TRAP, RTI. Efectul

dresa
6.1.2.1. LC-3 ISA: INSTRUCIUNI
i stocrii rezultatului napoi n
memorie prin intermediul unei singure instruciuni ca la IA-32 ISA. Acest
cven de trei instruciuni: una de citire din
e i u e sc e.
Instruciunile ADD i AND pot opera i n modul imediat de adresare.
Pentr
b)
dispozitivelor periferice regitrii de stare sau de date ai
tastaturii sau ai monitorului vezi pentru detalii capitolul 8
ntreruperi software).
+ Instruciuni de control (salt condiionat / neocndiionat, direct /
indire
tuturor acestor instruciuni este de a modifica cursul programului
(fluxul de execuie). Practic, indirect se modific PC-ul (a
urmtoarei instruciuni de executat din program).
OPERAIONALE
LC-3 implementeaz doar trei instruciuni aritmetico-logice: ADD,
AND i NOT. Operanzii destinaie ai acestora sunt regitrii generali ai
procesorului dar semnul acestuia va seta i unul din cei trei regitrii booleeni
(N, Z sau P) resetndu-i pe ceilali doi. Aceste instruciuni nu refer zone de
memorie. La LC-3 ISA nu exist posibilitatea adunrii coninutului unei
locaii de memorie cu o valoare imediat
lucru poate fi realizat printr-o se
memorie, una de adunar na d riere napoi n memori
u fiecare din instruciunile setului LC-3 ISA sunt ilustrate grafic
codificarea i succesiunea de operaii efectuate (vezi figurile 6.1 6.14)
pentru execuia cu succes a instruciunilor.
LC-3 nu implementeaz (nc! poate la versiunile viitoare)
instruciunile aritmetice mari consumatoare de timp nmulirea i
mprirea, ci doar instruciunea de adunare (deoarece se opereaz cu
numere ntregi n Complement fa de 2 nu este necesar implementarea
scderii, aceasta fiind de fapt o adunare cu inversul operandului). ntruct s-
a artat n capitolul 3 (vezi i [Patt03]) completitudinea porilor I-NU
adic prin intermediul acestor pori pot fi implementate oricare operaii
logice LC-3 ISA ofer doar instruciunile NOT i AND, celelalte
instruciuni (OR, XOR) existente la alte arhitecturi (MIPS, INTEL) putnd

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
124 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
fi realizate prin combinaii ale instruciunilor NOT i AND (vezi spre
rezolvare problemele 9 i 10 de la sfritul acestui capitol).
n continuare, prin Reg identificm setul de regitrii generali ai
rocesorului, cmpul Dst substituie codul (iar Reg[Dst] numele) registrului
destinaie iar cmpul Src substituie codul (iar Reg[Src] numele) registrului
surs. De asemenea, BaseR, folosit n cazul instruciunilor de transfer cu
mod de adresare indexat codific registrul de baz (adresa de nceput de
pagin sau zona de memorie utilizator supus ateniei nceputul unui
tablou unidimensional), de la care se va face un acces relativ n acea pagin.

Instruciunea NOT
NOT Reg[Dst], Reg[Src]

NOT reprezint un operator unar (are un singur operand surs). Dup
cum se poate vedea i din figura 6.1, registrul destinaie este dat de cmpul
IR[11:9] iar registrul surs de cmpul IR[8:6], restul biilor fiind 1 (IR[5:0]).
Semantica instruciunii (Reg[Dst] <= NOT Reg[Src]) presupune
inve a
de 1) i copiere aie. Registrul
surs
p
rsarea fiecrui bit al registrului surs (transformarea n complement f
a pe poziia corespunztoare n registrul destin
rmne nemodificat n urma execuiei instruciunii. De menionat c
sursa i destinaia pot referi acelai registru.

Exemplu:
NOT R2, R6


Figura 6.1. Codificarea instruciunii NOT i succesiunea de operaii efectuate n
cazul acesteia

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 125
La nceputul fazei de decodificare cmpul IR[8:6] va ataca setul de
regitrii generali de unde, pe timpul fazei fetch operand, registrul surs Src
va ataca o intrare a unitii aritmetico-logice (ALU). Prin intermediul
opcode-ului (IR[15:12]) se atac simultan automatul cu stri finite (vezi
lul 4.2) care va genera comanda
(sem
ruciunile ADD/AND
eg[Dst], Reg[Src1], Reg[Src2] sau ADD Reg[Dst], Reg[Src1], Imm5
i
AND mm5
dintre regitrii surs prin ul de adresare este
imedi
Reg[Src1] AND SEXT(Imm5) n cazul operaiei de I logic
rintr-o instruciune care face AND cu valoarea 0. De exemplu, n cazul
instru
figura 6.17 iar pentru detalii subcapito
nalul) NOT pentru unitatea ALU. Declanarea acestuia (NOT) se
realizeaz n faza de execuie urmat apoi de scrierea rezultatului n setul de
regitrii generali (pe timpul fazei scriere rezultat).

Inst
ADD R
Reg[Dst], Reg[Src1], Reg[Src2] sau AND Reg[Dst], Reg[Src1], I

Instruciunile ADD/AND au modul de operare similar. Sunt operaii
binare (au doi operanzi surs fie doi regitrii, fie un registru i o valoare
imediat). Registrul destinaie este identificat prin cmpul IR[11:9] iar unul
cmpul IR[8:6]. Dac mod
at atunci bitul IR[5] = 1 iar cmpul IR[4:0] specific valoarea
imediat, pe 5 bii, creia i se va extinde semnul pe16 bii obinndu-se un
numr ntreg n complement fa de 2. Se reamintete c, operaiile
aritmetico-logice se efectueaz cu operanzi de dimensiuni egale n numr de
bii. Semantica celor dou instruciuni este urmtoarea:
Reg[Dst] <=
8
Reg[Src1] + SEXT(Imm5) n cazul adunrii i respectiv
eg[Dst] <= R

De exemplu, iniializarea unui registru cu 0 rezult n mod natural
p
ciunii AND R2, R2, #0, dei valoarea 0 este pe 5 bii reprezentat
n registrul instruciunii, prin extensia semnului (care este tot 0) rezult 0 pe
16 bii. Simbolul # (a se citi diez) semnific faptul c valoarea ce i
urmeaz va fi n sistemul zecimal de numeraie. O alt posibilitate ar fi fost
precedarea valorii de irul 0x care sugereaz o valoare n sistemul
hexazecimal de numeraie.


8
Simbolul <= are rolul de atribuire a valorii expresiei din dreapta sa variabilei din stnga
sa.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
126 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 6.2. Codificarea instruciunilor ADD/AND cu mod de adresare imediat i
succesiunea de operaii efectuate n cazul acestora
Dac modul de adresare este registru atunci bitul IR[5] = 0, biii
IR[4:3] sunt i ei 0 iar cmpul IR[2:0] specific cel de-al doilea registru
surs. Semantica celor dou instruciuni este urmtoarea:
Reg[Dst] <= Reg[Src1] + Reg[Src2] n cazul adunrii i respectiv
Reg[Dst] <= Reg[Src1] AND Reg[Src2] n cazul operaiei de I logic

Figura 6.3. Codificarea instruciunilor ADD/AND cu mod de adresare prin
registru i succesiunea de operaii efectuate n cazul acestora

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 127
Exemple:
ADD R1, R4, R5
AND R2, R3, R6

i adunarea i rezultnd valoarea final (6
2 = 4) n R1 (registrul destinaie).
De menionat c, LC-3 este implementat ca un procesor cu set
optim re,
pentru increm
regist
Figura 6.4 descrie modul de lucru al instruciunii: ADD R1, R4, # -2
(decrementare cu 2). Astfel, pe o intrare a unitii ALU se va regsi valoarea
din R4 iar pe cealalt valoarea (-2) reprezentat n complement fa de 2.
Prin intermediul opcode-ului automatul cu stri finite genereaz comanda
(semnalul) ADD, efectundu-se apo
izat de instruciuni (nu implementeaz instruciuni pentru scde
entare / decrementare sau pentru transferul valorilor dintr-un
ru ntr-altul). Totui, setul redus de regitrii generali nu permite
cablarea unui registru (R
0
) la mas, cum fac alte procesoare RISC [Flo03].


Figura 6.4 Exemplu de adunare cu mod de adresare imediat

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
128 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
6.1.2.
entru
ncr
esorului n memorie: ST (store direct), STI
) i STR (store indexat).
n linii mari, formatul celor 7 instruciuni de transfer date (LD, LDI,
LDR, LEA, ST, STI i STR) este ilustrat n tabelul 6.1.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
2. INSTRUCIUNI CU REFERIRE LA MEMORIE (DE TRANSFER
DATE)
ntruct LC-3 pune la dispoziie trei moduri de adresare pentru
localizarea datelor n memorie rezult trei opcode-uri distincte p
carea datelor din memorie ntr-un registru: LD (load direct), LDI (load
indirect) i LDR (load indexat) i respectiv, trei instruciuni distincte pentru
scrierea datelor din regitrii proc
(store indirect
Cod operaie
(opcode)
Dst sau Src
Cmp generator de adres
(pgoffset9)
Tabelul 6.1. Formatul general al instruciunilor de transfer date (Load / Store)
Problema principal n cazul instruciunilor cu referire la memorie o
reprezint modul de adresare, care intenioneaz specificarea adresei direct
n instruciune. Dar cum spaiul de adresare este de 2
16
locaii i
instruciunile sunt pe 16 bii, mai mult, 4 bii stabilesc codul operaiei iar ali
trei bii registrul surs / destinaie, rezult c doar maxim 9 bii din
instruciune pot fi utilizai la calculul adresei. Drept soluie, se poate
considera mem
9
12)
cuv C)
sau indexat (r 6 la adresarea
index
, Label i ST Reg[Src], Label
unde Label reprezint adresa efectiv (EA) fie sub form numeric fie
simb pul
generator de adres din registrul instruciunii (pgoffset9 din tabelul 6.1)
EA <= (PC) + SEXT(IR[8:0])
oria LC-3 ca i o colecie de pagini, fiecare de cte 2 (5
inte. Adresa de baz poate fi dat de PC (adresare direct, relativ la P
elativ la un alt registru), iar cei 9 bii (sau

at) constituie deplasamentul (offset-ul) n respectiva pagin.

Instruciunile LD i ST
D Reg[Dst] L

olic. EA se determin nsumnd la PC-ul instruciunii LD cm
cruia i se extinde semnul de la 9 la 16 bii. Astfel,
Evident c i procedeul invers este valabil, adic, dndu-se valoarea
lui Label i a PC-ului instruciunii LD se poate determina coninutul
cmpului IR[8:0].
Semantica celor dou instruciuni este urmtoarea:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 129
LD Reg[Dst], Label Reg[Dst] <= Mem[(PC) + SEXT(IR[8:0])]
ST Reg[Src], Label Reg[Src] => Mem[(PC) + SEXT(IR[8:0])]

n cele dou mnemonici asamblare LD Reg[Dst], Label i ST
Reg[Src], Label adresa specificat prin eticheta Label trebuie s aib
valoarea n intervalul [PC-256; PC+255]. n plus, n cazul instruciunilor cu
referire la memorie care modific valoarea unui registru destinaie (LD,
LDI, LDR i LEA) codurile de condiie (N, Z i P) sunt setate
corespunztor.


Figura 6.5. Codificarea instruciunii Load cu mod de adresare direct i
succesiunea de operaii efectuate n cazul acestora
n figura 6.5 sunt prezentate codificarea instruciunii LD i
succe
fazei de
IR[8:0] c tea ALU (etapa 1 din
figura
informaii rezultatul depunndu-se n registrul MAR (etapa 2 din figura 6.5).
n faz
MAR iar depune n registrul MDR. n
nal, pe parcursul fazei Scrie rezultat, valoarea din MDR este depus n
aia specificat de cmpul Dst (IR[11:9])
siunea operaiilor ce concur la execuia acesteia. Astfel, pe timpul
decodificare, PC-ul instruciunii LD i cmpul generator de adres
ruia i se extinde semnul pe 16 bii atac unita
6.5). Pe timpul fazei de evaluare adres se nsumeaz cele dou
a de fetch operand se acceseaz memoria cu adresa tocmai stocat n
coninutul locaiei de memorie se
fi
setul de regitrii generali la loc
etapa 3). (



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
130 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Exemplu:
Se consider la adresa PC = 0x4019 instruciunea LD R2, 0x1AF, iar
n memorie la locaia Figura 6.6 ilustreaz
modul de lucru al instr tului final n registrul
destin
0x3FC8 se afl valoarea 0x5.
uciunii LD cu stocarea rezulta
aie R2.


Figura 6.6. Exemplu de instruciune Load cu mod de adresare direct
Pentru operaia de scriere n memorie (instruciunea Store cu mod de
adresare direct) diferena n ce privete codificarea este urmtoarea:
0011 Src pgoffset9
n urma execuiei instruciunilor de scriere n memorie (ST, STI i
TR) codurile de condiie rmn nemodificate. n ce privete modul de
operare a instruciunii Store cu mod de adresare direct, succesiunea de
operaii efectuate este aceeai cu cea din figura 6.5 cu deosebirea c operaia
3 se face n sens invers (dinspre setul de regitrii generali, de la un registru
surs de aceast dat, spre o locaie de memorie, prin intermediul aceluiai
registru MDR (registru de date a memoriei).

Instruciunile LDI i STI
LDI Reg[Dst], Label i STI Reg[Src], Label

O alt modalitate de a obine o adres complet (pe 16 bii) prin
intermediul unei instruciuni o reprezint citirea adresei dintr-o locaie de
S

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 131
memorie urmat apoi de citirea sau scrierea de la / la respectiva adres.
Instruciunile care implementeaz acest mecanism se numesc cu acces
indirect la memorie (load indirect sau store indirect). n primul rnd adresa
este obinut din PC-ul instruciunii LDI i cmpul generator de adres
(IR[8:0]) cruia i se extinde semnul pe 16 bii (la fel ca la adresarea direct)
iar apoi, n al doilea rnd, coninutul locaiei de la adresa calculat este
folosit ca i adres pentru load i store. Ca i avantaj trebuie spus c aceast
instruciune nu necesit un registru de baz pentru adresare. ns,
dezavantajul major l constituie accesul suplimentar la memorie (dou
accese pentru obinerea operandului). Instruciunile de la nivel high (HLL)
care genereaz la nivel low (asamblare / cod main) instruciuni cu referire
la memorie n mod de adresare indirect sunt cele care opereaz asupra
pointerilor (transmiterea parametrilor unei funcii prin pointer, pointer la
pointer).


Figura 6.7. Codificarea instruciunii Load cu mod de adresare indirect i
succesiunea de operaii efectuate n cazul acestora
n mnemonica asamblare aferent celor dou instruciuni Label
reprezint adresa adresei (pointer address) fie sub form numeric fie
simbolic. Se determin nsumnd la PC-ul instruciunii LDI cmpul
generator de adres din registrul instruciunii (pgoffset9 din figura 6.7)
cruia i se extinde semnul de la 9 la 16 bii. Astfel,
pointer address <= (PC) + SEXT(IR[8:0])
EA (adresa efectiv) <= Mem [pointer address]
Reg{Dst] <= Mem [Mem [pointer address] ]

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
132 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Evident c i procedeul invers este valabil, adic, dndu-se valoarea
lui Label i a PC-ului instruciunii LDI se poate determina coninutul
cmp
evaluare adres se obine adresa
adres operandului, care se depune
6.7). Pe parcursul fazei fetch operand se atac memoria cu MAR i
con rior
trece
enea, la
locai
ului IR[8:0].
Modul de operare al instruciunii LDI este urmtorul: pe timpul fazei
de decodificare se atac sumatorul (unitatea ALU) cu PC-ul instruciunii
LDI i cmpul generator de adres IR[8:0] cruia i se extinde semnul pe 16
bii (etapa 1 din figura 6.7). n faza de
ei n registrul MAR (etapa 2 din figura
inutul locaiei de memorie se depune n registrul MDR, care ulte
n MAR (etapa 3 din figura 6.7). n acest moment n MAR se afl
adresa operandului. n faza de execuie se acceseaz memoria din nou cu
adresa tocmai stocat n MAR (etapa 4 din figura 6.7) i se obine operandul
care se depune n registrul MDR (etapa 5 din figura 6.7). n final, pe
parcursul fazei Scrie rezultat, coninutul lui MDR este depus n setul de
regitrii generali la locaia specificat de cmpul Dst (IR[11:9]) (etapa 5).

Exemplu:
Se consider la adresa PC = 0x4A1C instruciunea LDI R3, 0x1CC,
iar n memorie la locaia 0x49E8 se afl valoarea 0x2110. De asem
a 0x2110 se gsete valoarea 0xFFFF. Figura 6.8 ilustreaz modul de
lucru al instruciunii LDI cu stocarea rezultatului final n registrul destinaie
R3.


Figura 6.8. Exemplu de instruciune Load cu mod de adresare indirect

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 133

Pentru instruciunea de scriere n memorie n mod de adresare indirect
(STI Reg[Src], Label) diferena n ce privete codificarea este urmtoarea:
1011 Src pgoffset9
n ce privete modul de operare a instruciunii Store cu mod de
adresare indirect, succesiunea de operaii efectuate este aceeai cu cea din
nstruciunile LDR i STR
LDR Reg[Dst], Reg[BaseR], index6 i STR Reg[Src], Reg[BaseR], index6

n modul de adresare direct pot fi adresate cuvinte aflate n aceeai
pagin de memorie cu instruciunea curent. Totui, n cazul programelor
mari, acest lucru nu este suficient spaiul fiind prea mic, chiar i n cazul
procesorului LC-3, motiv pentru care proiectanii LC-3 au propus modul de
adresare indexat (pentru a accesa zone de memorie din oricare alte pagini,
diferite de cea a instruciunii curente). Astfel, se folosete un registru (pe 16
bii) pentru a furniza adresa de baz. Dup cum se poate observa, n figura
6.9, codificarea instruciunii LDR presupune existena n registrul IR a
urmtoarelor cmpuri: opcode pe 4 bii, registrul destinaie pe 3 bii,
registrul de baz pe 3 bii i cmpul deplasament (index6 din figura 6.9) pe
6 bii (fr semn), deci o valoare ntreag n intervalul [0; 63]. nainte de a fi
ad
const , deplasamentul la modul indexat este pe 6 bii, fa de 9
a operandului din memorie se
etermin nsumnd la registrul de baz Reg[BaseR] cmpul generator de
din ex6) e cu 0 de la 6 la 16
Astfel
[BaseR [5:0])
= Mem seR] + ZEXT(IR[5:0])]

figura 6.7 cu deosebirea c, dup aflarea adresei efective unde se va scrie
informaia n memorie, operaia 5 se va face n sens invers (dinspre setul de
regitrii generali, de la un registru surs de aceast dat, spre o locaie de
memorie, prin intermediul aceluiai registru MDR (registru de date a
memoriei).

I
ugat la registrul de baz, n faza de decodificare, se extinde cu 0 cmpul
deplasament pe 16 bii. O alt diferen fa de modul de adresare direct
n faptul c
bii la cel direct. Adresa efectiv (EA)
d
adres
bii.
registrul instruciunii (ind
,
care se extind
EA <= Reg ] + ZEXT(IR
Reg[Dst] < [Reg[Ba

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
134 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 6.9. Codificarea instruciunii Load cu mod de adresare indexat i
succesiunea de operaii efectuate n cazul acestora
Ciclul instruciunii LDR (load indexat) presupune dup aducerea i
depunerea acesteia n registrul IR (lucru efectuat n faza fetch instruciune)
decodificarea instruciunii. Pe parcursul acestei faze, cu cei trei bii IR[8:6]
se identific registrul de baz din setul de regitrii generali i se realizeaz
extensia cu 0 pe 16 bii a cmpului deplasament IR[5:0] (etapa 1 din figura
6.9). Pe timpul fazei de evaluare adres se calculeaz suma dintre cele dou
informaii anterior amintite, rezultatul depunndu-se n registrul MAR
(etapa 2 din figura 6.9). Pe durata fazei de fetch operand se acceseaz
memoria de la adresa dat de MAR iar coninutul se depune n registrul
MDR (etapa 3 din figura 6.9), de unde urmeaz a fi copiat n registrul
estinaie corespunztor n faza Scrie rezultat (etapa 4 din figura 6.9).

la lo
d
Exemplu:
Se consider instruciunea LDR R3, R3, 0x1D, iar n memorie
caia 0x2362 se afl valoarea 0x0F0F. De asemenea, coninutul
registrului R3 naintea execuiei instruciunii este 0x2345. Figura 6.10
ilustreaz modul de lucru al instruciunii LDR cu stocarea rezultatului final
n registrul destinaie (acelai) R3.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 135

Figur iune Load re indexat
tr eg[Src], R
memorie n mod de adresare indexat) difer te codificarea
t
c BaseR
c perare a tore cu mod de
i peraii efectuate este aceeai cu cea din
aflarea ad
i 4 se vor face n sens i ordine invers
dinspre set rali, de la un
registru surs, spre o locaie de memorie, prin in lui MDR.
Instruciunea LEA
g[

unde Label reprezint adresa efectiv (EA
. mnd la P
a 6.10. Exemplu de instruc cu mod de adresa
Pen u instruciunea STR R eg[BaseR], index6 (scriere n
ena n ce prive
este urm oarea:
0111 Sr index6
n
adresare
e privete modul de o
ndexat, succesiunea de o
instruciunii S
figura 6.9
informaia n m
cu deosebirea c, dup
emorie, operaiile 3
resei efective unde se va scrie
(4 nti i 3 dup, iar sensul este ul de regitrii gene
termediul registru

LEA Re Dst], Label
) fie sub form numeric fie
C-ul instruciunii LEA cmpul simbolic EA se determin nsu

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
136 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
generator
cruia i se extinde sem
iunii (pgoffset9 din figura 6.11)
i. As
) + SEXT
Evident c i procedeul invers este valabil, ad , dndu-se valoarea
lui Label i a PC-ului instruciunii LEA se poate determina coninutul
cmpului IR[8:0].
anume ncarc n registrul
l de memorie de la adresa).
LEA Reg[Dst], Label Reg[Dst] <= (PC) + SEXT(IR[8:0])
de adres din registrul instruc
nul de la 9 la 16 bi tfel,
(IR[8:0])
ic
EA <= (PC
Semantica instruciunii este urmtoarea i
destinaie valoarea adresei efective (nu coninutu
Uzual se folosete la prelucrarea tablourilor (unidimensionale) situate
ntr-un spaiu de memorie apropiat instruciunii curente (+/- 256 de cuvinte)
cnd, se ncarc ntr-un registru general adresa de nceput a tabloului, iar
accesul la fiecare element al tabloului se face printr-o adresare indexat
avnd ca registru de baz pe cel anterior setat prin instruciunea LEA.
Ca i n cazul adresrii directe sau indirecte, adresa specificat prin
eticheta Label trebuie s fie n intervalul [PC-256; PC+255]. De asemenea,
codurile de condiie sunt setate.


Figura 6.11. Codificarea instruciunii Load cu mod de adresare imediat i
succesiunea de operaii efectuate n cazul acestora
Spre exemplificare, se consider n memorie la adresa PC=0x4019
urmtoarea instruciune LEA R5, -3. Figura 6.12 ilustreaz modul de lucru
al instruciunii LEA cu stocarea rezultatului final n registrul destinaie
(acelai) R5.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 137

Figura 6.12. Exemplu de instruciune Load cu mod de adresare imediat
6.1.2.3. LC-3 ISA: INSTRUCIUNI DE CONTROL (RAMIFICAII N
PROGRAM)
Instruciunile de ramificaie (de salt i / sau apel) au rolul de a altera
cursul secvenei de instruciuni (fluxul de control al programului) prin
modificarea registrului PC. n funcie de condiia de salt, memorat n
corpul instruciunii, se cunosc salturi condiionate (se face saltul dac se
ndeplinete condiia) sau necondiionate (se face tot timpul saltul PC-ul
se modific ntotdeauna). n cazul saltului condiionat dac nu se
ndeplinete condiia de salt atunci se va executa urmtoarea instruciune din
program (PC-ul obinut n urma fazei fetch a instruciunii de salt nu este
alterat). Salturile necondiionate pot fi directe (se cunoate tot timpul adresa
destinaie a saltului nc din momentul compilrii sursei programului) sau
indirecte (caz n care adresa de salt este dat printr-un registru care-i
modific n mod dinamic valoarea reinut [Flo05]). n cazul salturilor
indirecte, adresa mentul execuiei
progr
program necondiionate dar, n care, apelurile au o proprietate important:
de salt se cunoate abia n mo
amului.
Pe lng instruciunile de salt mai exist i instruciuni de apel i
revenire din subrutine. Acestea fac parte din categoria ramificaiilor de

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
138 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
salveaz adresa de revenire n programul apelant (PC-ul instruciunii
urmtoare apelului).
Instruciunile de ntrerupere software TRAP reprezint
instruciuni de apel ctre rutine de tratare aferente sistemului de operare. La
ncheierea fiecrei rutine se revine n programul apelant cu o instruciune de
tip return (care repune n registrul PC valoarea adresei succesoare
instruciunii TRAP).
Pe scurt, instruciunile de control oferite de LC-3 ISA sunt [Patt03]:
+ BR x Label salt condiionat (poate fi totui chiar i
necondiionat) la o adres relativ la PC-ul instruciunii curente de
salt (deplasamentul fa de PC este pe 9 bii).
+ JMP / JSR Label instruciuni de salt necondiionat (sau apel de
subrutin) direct la o adres pe 11 bii relativ la PC-ul
instruciunii de salt.
+ JMPR / JSRR instruciuni de salt necondiionat sau apel de
subrutin indirect, la o adres indexat obinut dintr-un registru de
baz i un deplasament pe 8 bii (fr semn).
+ TRAP ntreruperi software practic apeluri directe de subrutine
ale sistemului de operare.
+ RET / RTI instruciuni de revenire din subrutina utilizator sau
cea aferent sistemului de operare.

Instruciunea BR x Label

unde Label reprezint adresa efectiv (EA) fie sub form numeric fie
simbolic. EA se determin nsumnd la PC-ul instruciunii BR cmpul
generator de adres din registrul instruciunii (pgoffset9 din figura 6.13)
cruia i se extinde semnul de la 9 la 16 bii. Astfel,
EA <= (PC) + SEXT(IR[8:0])
Evident c i procedeul invers este valabil, adic, dndu-se valoarea
lui Label i a PC-ului instruciunii BR se poate determina coninutul
cmpului IR[8:0].
Simbolul x reprezint condiia care trebuie ndeplinit i poate fi n
(negativ), z (egalitate cu 0), p (strict pozitiv), nz (mai mic sau egal cu 0), np
(diferit de 0), zp (mai mare sau egal cu 0), nzp (saltul se face necondiionat
pe oricare din condiii este echivalent instruciunii JMP, doar c
deplasamentul este pe 9 bii).
Semantica instruciunii este urmtoarea: dac cei trei bii de condiie
(regitrii booleeni N, Z i P) sunt 0 (nu sunt setai practic), conform figurii

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 139
6.14 niciuna din cele trei pori logice I nu genereaz 1 logic (toate ieirile
sunt 0) i rezult c saltul nu se face (echivalent unui simplu NOP no
operation) i se trece la urmtoarea instruciune din program succesoare
branch-ului. Dac registrul boolean corespunztor condiiei este setat (de ex.
condiia n negativ i registrul N=1) atunci saltul se va face (se spune c
este taken) la adresa specificat prin eticheta Label, noul PC nemaifiind
(PC+1) ci (PC + SEXT(IR[8:0])). Ca i n cazul acceselor la memorie cu
mod de adresare direct, adresa specificat prin eticheta Label (target-ul
saltului) trebuie s fie n intervalul [PC-256; PC+255], unde PC reprezint
adresa instruciunii de salt. Dac nu coincide ns condiia cu regitrii
booleeni setai (de ex. condiia n negativ i registrul N=0) atunci saltul
nu se va face (se spune c este not taken), instruciunea care se va procesa
fiind cea succesoare branch-ului din program (de adres PC+1 vezi i
figura 6.13).


Figura 6.13. Codificarea instruciunii Branch i succesiunea de operaii efectuate
n cazul acesteia
ruciunii Branch (BR x Label) este urmtorul:
pe ciune, practic dup depunerea instruciunii n
Modul de lucru al in
e
st
timpul faz i fetch instru

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
140 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
reg ementarea PC-ului cu o unitate pentru a indica
spr e din program (valoarea PC+1 unde PC
prezint adresa branch-ului fiind depus pe intrarea 0 a multiplexorului
c
adr bii i PC-ul saltului
e depun pe intrarea sumatorului ALU (etapa 1 din figura 6.13) iar cmpul
de co e IR[11:9 selecie prezentat detaliat n
figur 4 (practic intrri i SAU
cu ), a c alul taken (ndeplinirea condiiei
nsemnnd se face saltul, altfel nu se face) din etapa 2 aferent figurii 6.14.
Pe zei eva PC-ul target al branch-ului
(PC + SEXT(IR[8:0]) care va ataca a doua intrare a multiplexorului (cea de
1 l faza de ndeplinirea sau nu condiiei de
sal e ncar esa instruciunii de la care se va
procesa n continuare (etapa 3 din figura 6.13).
xempli iunea de salt
stocat emorie la adresa PC enea, dintre regitrii
booleeni de condi ste setat. Figura 6.14 ilustreaz
succesiunea de operaii care conduc la modificarea fluxului de control al
pro i dete
istrul IR are loc i incr
e urmtoarea instruciun
re
MUX i care va fi selectat dac semnalul taken va fi 0, nsemnnd, de fapt,
saltul nu se face). Pe timpul fazei de decodificare cmpul generator de
es IR[8:0] cruia i se extinde semnul de la 9 la 16
s
ndii
a 6.1
] atac blocul logic de
3 pori logice I cu dou o poart logic
3 intrri rui ieire va fi semn
timpul fa luare adres se calculeaz
ogic). n execuie n funcie de a
t n PC s c valoarea corect, adr
Spre e
n m
ficare, se consider instruc
=0x4028. De asem
BR z 0x0D9
ie doar registrul Z e
gramului

rminarea noului PC.

Figura 6.14 e salt condiionat (Branch if zero) . Exemplu de instruciune d

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 141
Tratarea necondiionat, apel i revenire din
subrutine utilizator i ale sistemului de operare, precum i a ntreruperilor
soft p s pitolul 8 al prezentei cri.
iu at (JMP/J , JMPR/JSRR la LC-3)
se n n l sub nume de jump-uri. Formatul
instruciunilor JMP i JSR respectiv JMPR / JSRR este aproape identic, un
sing
atru
struciuni (JMP/JSR i JMPR / JSRR) se va insista n capitolul 8.
i
Cele mai uzuale sunt c are ,
afiarea unui caracter ecra cheierea programului
utilizator i cedarea trolu erare. Dup execuia
instru
re va fi decrementat la fiecare pas oprirea
cndu-se cnd contorul ajunge la 0 (structur repetitiv cu numr
cunoscut de pa [N 97 Sto ], f pr utilizarea unei santinele
10
pe post
de control iar oprirea algoritmului se face dac nu din lem
aten morie) este chiar cel cutat, aflat pe post de santinel

instruciunilor de salt
ware Tra e va face mai pe larg n ca
Instruc
tlnesc
nile de salt necondiion
iteratura de specialitate
SR
le
ur bit difereniind ntre salt i respectiv apel (pstrarea PC-ului de
revenire n registrul R7 la LC-3 [Patt03]). Asupra formatului celor p
in
Instruciunile TRAP sau ntreruperile software invoc de fapt o rutin
a s stemului de operare identificat printr-un vector de ntrerupere pe 8 bii.
ele c permit citirea unui caracter de la tastatur
pe nul monitorului sau n
con lui sistemului de op
ciunilor din rutina de tratare a ntreruperii software, PC-ul este setat
cu adresa instruciunii succesoare Trap-ului. Asupra formatului instruciunii
TRAP, semanticii acesteia, despre adresele de start aferente rutinelor de
tratare ale ntreruperii se va insista n capitolul 8.
6.1.3. LC-3 ISA: APLICAII REZOLVATE
Odat cu descrierea instruciunilor de control se cunosc toate tipurile
de instruciuni pentru realizarea de programe
9
. La nivelul programelor n
limbaj de asamblare implementarea buclelor de program poate fi realizat
fie prin folosirea unui contor ca
f
i) eg , 98 ie in
u l e entele supuse
iei (citit din me
(structur repetitiv cu numr necunoscut de pai).


9
Teorema Bhm-Jacoppini [Neg97] afirm c orice program de calcul poate fi realizat
folosind structuri secveniale, alternative i repetitive. Instruciunile de control (de
ramificaie) sunt elemente de baz ale structurilor alternative i repetitive. Instruciunile
peraionale i de transfer se regsesc n structurile secveniale de program.
t
(iter
o
10
Un caracter special folosit pentru a indica sfritul unei secvene este numit deseori
san inel. Utilitatea sa este foarte mare atunci cnd nu se cunoate apriori numrul de pai
aii) pe care i execut o anumit structur repetitiv.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
142 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Ap
stoc
0x3
fiec t stocate
umerele), R2 contorul de numere (indic n fiecare moment cte numere
mai sunt de nsumat), R3 elementul orie.

licaie 1: S se calculeze suma a 12 numere ntregi. Numerele sunt
ate n memorie ncepnd cu adresa 0x3100. Programul ncepe la adresa
000. Pentru simplitate, se indic folosirea regitrilor R1, R2, R3 i R4,
are avnd urmtorul rol: R1 adresa zonei de date (unde sun
n
suma, R4 curent citit din mem

ura 6.15. Schema logic aferen Fig t programului de nsumare a 12 numere ntregi

Secvena d afe

PC ifica e instruciuni Semnificaie
de co rent este urmtoarea:
Cod r
0x3000 1110 001 1 0000 0000 R1 x3100
0x3001 0101 011 011 1 00000 R3 0
0x3002 0101 010 010 1 00000 R2 0
0x3003 0001 010 010 1 01100 R2 12
0x3004 0000 01 0 000000110 Dac Z=1, sare la 0x300A
0x3005 0110 10 001 000000 ncar loare n R4 0 c urmtoarea va
0x3006
nsum itit la suma
din R
eaz valoarea c
3
0001 01 011 0 00 001 1
0x3007
Incre memorie
(indic
0001 00 001 1 00001 1
menteaz adresa de
at de R1)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 143
0x3008 0001 01 010 1 11111
Decr ntorul de
nume nt de citit din
memo
0
ementeaz co
re care mai su
rie (R2).
0x3009 0000 111 111111011
0x3004)
Sare la testul contorului (adresa

Ap
fi
car
pe d
se a
este
pro
caracterului) coincide cu unul din fiier (cu cel citit la momentul respectiv
in fiier) se incrementeaz un contor. Sfritul de fiier este indicat prin
codul ASCII special (x o t f p a v a
n tere de e ce . Pentru
b tate a codului su propus trebuie ca num ii s
f m 0.

licaia 2: S se determine numrul de apariii ale unui caracter ntr-un
ier. Programul este stocat n memorie ncepnd cu adresa 0x3000.
acterul cutat va fi citit de la tastatur. Fiierul se consider ncrcat de
iscul hard n memorie sub forma unor locaii contigue. n fiecare locaie
fl codul ASCII al unui caracter din fiier. Adresa de nceput a fiierului
stocat n prima locaie de memorie imediat dup codul surs al
gramului. Dac ceea ce s-a citit de la tastatur (codul ASCII al
d
EOT 04) end f tex . n inal, rogr mul a afi
umrul de carac
una funcionali
din fiier i
rs
ntic cu l citit de la tastatur
apari rul de
ie strict ai mic dect 1

Figura 6.16. Sc are d
fiie
ena rul (num le
carac cuta egistrul R3 pstreaz adresa
de n fiier se va citi pe rnd tot cte un
caracter). R gistrul R1 re rui caracter citit din fiier.
hema logic aferent programului c
apariii ale unui caracter ntr-un
etermin numrul de
r
n secv de program urmtoare Conto rul de apariii a
terului t) este salvat n registrul R2, r
ceput a
e
ului (adresa de baz de la care
ine codul ASCII al fiec

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
144 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Iniia ine c el c it de la tastatur)
iar codu int num ii al
carac cuta

PC odifi nificaie
l R0 re odul ASCII al caracterului cutat (c it
n final l ASCII al cifrei care reprez rul de apari
terului t n fiier.
C care instruciuni Sem
0x3000 0101 010 010 1 00000 R2 0 (contor)
0x3001 0010 011 000010001 R3 M[x3012] (Ptr)
0x3002 1111 0000 0010 0011
Codul caracterului citit de la
tastatur se afl n R0 (TRAP
x23)
0x3003 0110 001 011 000000 R1 M[R3]
0x3004 0001 100 001 1 11100 R4 R1 4 (EOT)
0x3005 0000 010 000001001
Dac Z=1, sare la adresa
0x300E
0x3006 1001 001 0 1 1 N 01 1 1111 R OT R1
0x3007 0001 001 0 1 1 R1 R1 + 1 0 00001
0x3008 0001 001 0 1 0 0 000 R1 R1 + R0 0 0
0x3009 0000 101 000000010
Dac N=1 sau P=1, sare la
adresa 0x300B
0x300A 0001 010 010 1 00001 R2 R2 + 1
0x300B 0001 011 011 1 00001 R3 R3 + 1
0x300C 0110 001 011 000000 R1 M[R3]
0x300D 0000 111 111110111
Sare necond ionat la adresa
0x3004
i
0x300E 0010 000 000000101 R0 M[x3013]
0x300F 0001 000 000 0 00 010 R0 R0 + R2
0x3010 1111 0000 0010 0001
Afieaz numrul de apariii
sub form de character al
crui cod ASCII se gsete n
R0 (TRAP x21)
0x3011 1111 0000 0010 0101
HALT (TRAP x25) ncheie
programul

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 145
0x3012 Adresa de nceput a fiierului
0x3013
Codul ASCII al caracterului
0 (0x30)
0000 0000 0011 0000
6.2. FLUXUL DE DATE LA LC-3 ISA
ile logice
care su i n nucleul unui calculator
(la nivelul procesorului). Fluxul de de calcul
urm algoritmului (software) i
este su ware. Strategia fluxului de
dat inarea modului de
fun logicii de control,
a cursu proiectarea elementelor
com
ISA. n figur se disting
ind
u s e (Finite State Machine FSM).
ie
magistrala global
mai ngroat ei pline la am la
const c el
permite unei structuri logice s transfere pn
structuri prin conectarea componentelor electronice corespunztoar la
m tral. n fiecare mom o singur surs e magistral
astfel nct s se transfere o singur valoare. n figura 6.17 se observ
tructur care genereaz o valoare pe bus termediul
tri-state (sub forma unui triunghi gol cu o latur tiat cu
lul de a controla scrierea informaiei pe magistral de ctre o singur surs
i
sem
automa agistral poate fi fcut de oricte
stru turi logice. Regitrii captureaz data de pe bus doar dac unitatea de
control activeaz semnalul Write Enable pentru destinaia corespunztoare.
Foarte sumar, calea (fluxul) de date const din toate structur
nt combinate pentru prelucrarea informaie
date aferent unui sistem
eaz o strategie (un curs) definit la nivelul
sinut printr-o serie de componente hard
e presupune luarea fiecrui element component, determ
cionare, identificarea intrrilor / ieirilor, identificarea
lui datelor ntre elementele componente,
ponente.
Figura 6.17 ilustreaz fluxul de date la LC-3
dou tipuri de sgei: pline care indic informaia care se proceseaz (de
cele mai multe ori pe 16 bii, dar i pe 1, 2, 3, 9 sau 11 bii) i goale care
ic semnalele de control, generate n majoritatea cazurilor de automatul
tri finit c
Componenta de baz a fluxului datelor la LC-3 o constitu
e date (bus) reprezentat n figura 6.17 cu linia cea d
g , cu s
din 16 fire
bele capete. Magistrala global
ircuitele
LC-3
Aceasta
aie altei
(semnale) i ectronice
la 16 bii de inform
asociate.
e
agis ent de timp exist p
c
fiecare s o face prin in
unui dispozitiv )
ro
( nu de mai multe). Structura care dorete s scrie pe bus va avea activat
nalul WE (write enable) prin intermediul unitii de control (mai precis
tul FSM). Citirea datelor de pe m
c

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
146 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Figura 6.17. Fluxul de date la LC-3 ISA
enea, important a sistemului de calcul o
prezint memoria care reine att instruciuni ct i date. Memoria este
adr semnalul READ
O component, de asem
re
accesat prin ncrcarea n registrul MAR (registrul de adres al memoriei) a
esei locaiei dorite. Apoi, unitatea de control activeaz

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 147
la LC-3 WE devine 0, iar dup scurgerea timpului de acces la memorie
data de la locaia dorit se va ncrca n registrul MDR (registrul de date al
memoriei). Pe de alt parte, scrierea datelor n memorie se realizeaz n
urmtoarele etape: se depune adresa n MAR, se depune data ce se vrea
memorat n MDR i se activeaz semnalul WRITE la LC-3 WE devine
1. Scrierea registrului MAR poate fi fcut din trei surse (instruciuni load,
store sau ntrerupere software TRAP) prin intermediul diferitelor
multiplexoare. Una din surse (ADDR1MUX din figura 6.17) este obinut
din nsumarea PC-ului cu IR[8:0] cruia i se extinde semnul pe 16 bii n
cazul instruciunilor LD / ST i LDI / STI. A doua surs (MARMUX) este
obinut din vectorul de ntrerupere (cmpul IR[7:0] care se extinde cu 0-uri
pe nc 8 poziii semnificative) pentru determinarea adresei primei
instruciuni din rutina de tratare a ntreruperii. A treia surs (obinut tot prin
intermediul multiplexorului ADDR1MUX din figura 6.17) este generat din
suma dintre un registru general i o valoare imediat pe 6 bii, extins cu 0-
uri semnificative pe 16 bii, aferent instruciunilor cu referire la memorie n
mod de adresare indexat (LDR / STR).
Unitatea aritmetico-logic (ALU), component a unitii de
procesare i evident a fluxului datelor la LC-3 ISA, accept ca i intrri fie
doi regitrii surs din setul de regitrii generali, selectai cu cmpurile
IR[8:6] i respectiv IR[2:0] (SR1 i SR2 n figura 6.17), fie un registru surs
i valoarea imediat din cmpul registrului instruciunii cruia i se extinde
semnul pn la 16 bii. Multiplexorul SR2MUX n figura 6.17 va selecta
ntre valoarea imediat i registrul surs cu ajutorul bitului 5 din registrul
instruciunii. Rezultatul generat de ctre ALU va fi scris pe magistrala
global de unde va fi transferat n setul de regitrii generali la locaia
specificat prin registrul destinaie corespunztor instruciunii procesate. De
asemenea, rezultatul va fi folosit de ctre structura LOGIC pentru a seta
regitrii booleeni de condiie (N, Z i P). Pe lng instruciunile aritmetico-
logice (ADD, AND i NOT) i instruciunile de transfer date n regitrii
(LD, LDI, LDR i LEA) seteaz codurile de condiie prin intermediul bus-
ului global.
Setul de regitrii generali, component esenial a fluxului datelor,
este o structur biport pentru citire i uniport pentru scriere. Scrierea n
registrul destinaie poate fi fcut de pe magistrala global, informaia
ajungnd aici fie de la ALU fie de la memorie prin registrul MDR.
Registrul PC furnizeaz prin intermediul magistralei globale
registrului MAR adresa instruciunii de la care se va procesa (va ncepe
urmtorul ciclu al instruciunii). PC-ul este ncrcat prin intermediul unui
multiplexor 4:1 (PCMUX) n funcie de instruciunea care se va executa

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
148 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
(salt condiionat, necondiionat, apel indirect, ntrerupere software). Una din
cele 4 intrri n PCMUX (vezi figura 6.17) este (PC+1), valoare stabilit n
faza FETC
de la
generali (mai precis din R7 n cazul instruciunii RET revenirea din
subrutina utilizator). A patra intrare se obine prin inte
globale datorit ntreruperii software sau datorit instruciunii de salt / apel
indirect (JSRR). Dei n figura 6.17 se vd doar trei intrri, n realitate sunt
cele patru anterior enunate. Problema este c multiplexorul ADDR1MUX
ral.
i pune n aplicare numele, controlnd n fiecare
moment fluxul datelor n sistemul de calcul. Dup aducerea instruciunilor
n IR
de
b)
H a instruciunii n curs de procesare. Dac instruciunea este salt
condiionat (salt care se face) atunci intrarea selectat n PCMUX va fi cea
determinat din suma dintre PC i cmpul IR[8:0] cruia i se extinde semnul
9 la16 bii. O alt intrare n PCMUX va fi obinut din setul de regitrii
rmediul magistralei
va selecta adevratul responsabil pentru generarea noului PC vechiul PC
sau un registru gene
Unitatea de control
, aceasta va fi decodificat (stabilit operaia ce se va executa,
operanzii). n fiecare ciclu main, prin intermediul automatului cu stri
finite (FSM), comandat de bii ai registrului instruciunii, sunt stabilite
semnalele de control pentru urmtoarea faz de procesare a instruciunii:
cine devine conductorul pe magistrala global (cine scrie informaia), care
regitrii vor fi scrii (WE va fi 1 pentru care structur logic), ce operaie va
efectua unitatea aritmetico-logic ?
6.3. EXERCIII I PROBLEME
1. Se consider cunoscute valorile iniiale pentru regitrii i locaiile
memorie urmtoare:

PC = 0x2081, R6 = 0x2035, LOC = 0x2044, Mem[0x2044] = 0x3456,
Mem[0x2041] = 0x12CF, Mem[0x3456] = 0x201F

S se determine care este adresa efectiv a urmtoarelor instruciuni, precum
i codificarea fiecreia dintre ele, specificnd i modurile de adresare:

a) LD R1, LOC
LDI R2, LOC
c) LDR R3, R6, #12

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 149
d) ADD R1, R3, R2
e) ADD R5, R1, #15

2. S se identifice instruciunile a cror codificare este dat mai jos.
Specificai coninutul fiecrui registru i a locaiilor de memorie afectate
dup execuia instruciunilor. Ce se poate observa ?

PC Codificare instruciuni Semnificaie
0x30F6 1110 001 000000100
0x30F7 0001 010 001 1 01110
0x30F8 0011 010 111111110
0x30F9 0101 010 010 1 00000
0x30FA 0001 010 010 1 00101
0x30FB 0111 010 001 001110
0x30FC 1010 011 011110100

3. a) Secvena de cod de mai jos calculeaz expresia (R1 R1) + 6,
punnd rezultatul n R3. Se cere pentru nceput s translatai programul
din cod main (secvena binar a instruciunilor codificate) n limbaj de
asamblare (sau eventual ntr-un limbaj codificat de tip transfer registru
numit RTL register transfer language) cunoscnd instruciunile
prezentate pe parcursul acestui capitol. De exemplu, instruciunea 1001
0000 0111 1111 este R0 NOT R1 n RTL. Dup translatarea
instruciunilor completai cu biii lips astfel nct programul s
realizeze cerina impus.

PC Codificare instruciuni Limbaj de asamblare /
codificare de tip
transfer registru
x3000 0101 0110 1110 0000
x3001 _____ _____ _____ _____
x3002 0001 0110 1100 0001


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
150 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
x3003 0001 0100 1011 1111

x3004 0000 101_ _____ _____

x3005 0001 0110 1110 0110


b) Dac R1 i R3 rein numere ntregi n complement fa de 2 pe 16
bii, pentru ce valori ale lui R1 rezultatul din R3 este corect. Justificai.

4. a) Instruciunile LC-3 urmtoare (A i B) realizeaz n principiu acelai
lucru. Explicai n cel mult 10 cuvinte ce fac ele.
Totui, ele nu pot fi interschimbate deoarece nu fac chiar acelai lucru.
n ce
b ISA sunt adunate urmtoarele dou numere ntregi n
comp i 010101011010101 i 0011100111001111
obinndu-se rezultatul 1000111100100100. Rezultatul este corect ? Este
vreo
A 0000 0001 0101 0101
B 0001 0000 0010 0000
l mult 10 cuvinte explicai care este diferena ntre cele dou
instruciuni.
) n cadrul LC-3
lement fa de 2 pe 16 bi
problem ? Dac da care este aceasta, dac nu de ce nu este nici o
problem.
c) n cadrul LC-3 ISA se dorete execuia unei instruciuni care s scad
valoarea ntreag 20 din registrul R1 i s depun rezultatul n R2. Poate fi
realizat acest lucru ? Dac da scriei mai jos codificarea instruciunii. Dac
nu explicai care este problema.

15 0


d
e LD, LDI i LDR ? Dar diferena
dintre LEA ?

e) tal a memoriei este de 1MB (2
20
octei) i
adres
) Ce specific arhitectura setului de instruciuni aferent unui procesor.
Care sunt diferenele dintre instruciunil
acestea i instruciunea
Dac dimensiunea to
abilitatea este de 32 de octei, ci bii de adres sunt necesari pentru
adresarea ntregului spaiu de memorie ?

5. Se consider urmtorul program scris n limbaj main LC-3. Registrul
R1 reprezint variabila de intrare n aceast secven de program iar R2

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 151
reprezint variabila de ieire la ncheierea buclei. Dac valoarea iniial
a lui R1 este un numr ntreg pozitiv n, exprimai ieirea R2 n funcie
de
pentru a nu apare depirea de reprezentare (overflow).
d Codificare de tip
n. Se presupune c valorile prelucrate de acest program sunt suficient
de mici

PC
Co ificare
instruciuni transfer registru (RTL)
x3001 0 0101 01 0 1010 0000 R2 <- 0
x3002 0001 0100 1010 0001 R2 <- R2 + 1
x3003 000 010 1 0 1000 0010 R3 <- R2 + R2
x3004 0001 0100 1000 0011 R2 <- R2 + R3
x3005 0001 0010 0111 1111 R1 <- R1 - 1
x3006 0000 0011 1111 1100 BRp x3003

6. toarele dou
interv ul d
poate fi specificat n cm
instruciuni de adunare AD
b) codifica a d
decrem reg l R
rmtorul tabe

PC Codifica
TL)
Rezolvai urm
a) Care este
cerine:
e numere ntregi (exprimat n zecimal) care
pul Imm (de valoare imediat) aferent unei
D ?
al
Scriei
enteaz
rea
istru
ou instruciuni n LC-3 ISA care mpreun
3 cu 31 i depune rezultatul n registrul R3.
Completai u l.
re instruciuni
Limbaj de asamblare /
codificare de tip
transfer registru (R
x3001

x3002

7. Se presupune c dorii s scriei un program ncepnd cu adresa 0x3001
i care cuprinde instruciunile cu semantica din ultima coloan a
tabelului urmtor:

PC Codificare instruc iuni
Codificare de tip
transfer registru (RTL)

x3001 R2 <- M[R1+0]


x3002 R3 <- M[R1+1]
x3003 R4 <- NOT R3
x3004 R4 <- R4 + 1
x3005 R5 <- R2 + R4
x3006 BRzp x3009

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
152 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
x3007 M[R1+2] <- R3
x3008 BRnzp x3010
x3009 M[R1+2] <- R2

a) Com e

b) Par rg
completai se execut
fiecare ins
vor fi pro loan ilustreaz operaiile propriu-zis de
e de asemenea c la adresa
e m sete valoarea 14 iar la adresa 0x3101 se
gse
pl tai tabelul cu codificarea fiecrei instruciuni.
cu ei programul pas cu pas ncepnd cu adresa 0x3001 i
coninutul urmtoarelor resurse pe msur ce
truciune. Prima coloan reprezint adresa instruciunilor ce
cesate, a doua co
executat. Urmtoarele colane redau starea iniial a regitrilor generali i
a celor de condiie din LC-3 ISA. Se presupun
d emorie 0x3100 se g
te valoarea 27.

PC Operaia R0 R1 R2 R3 R4 R5 R6 R7 CCs
Starea iniial a
regitrilor
0 x3100 0 3 4 5 6 7
x3001
R2
M[R1+0]
14 P
x3002


x3003


x3004


x3005


x3006


x3007


x3008


x3009



c) ntr-o singur propoziie ce calculeaz programul anterior ?

8. Tabelul urmtor conine un program LC-3 codificat binar i stocat n
memorie ncepnd cu adresa 0x3001.

Codificare instruciuni PC
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Codificare de tip
transfer registru
(RTL)
x3 001 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 R2 M[R1+0]
x3002 0 1 1 0 0 1 1 0 0 1 0 0 0 0 0 1
x30 03 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1
x3004 0 0 0 1 0 1 1 0 1 1 1 0 0 0 0 1

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 153
x3005 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 1
x30 1 1 0 0 0 0 0 0 0 1 0 06 0 0 0 0 0
x3007 1 0 0 1 0 1 0 0 1 0 1 1 1 1 1 1
x3008 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1
x3009 0 1 1 1 0 1 0 0 0 1 0 0 0 0 1 0

a) Pentru nceput determinai ce face fiecare instruciune. Descriei
printr
b) P
complet urmtoarelor resurse pe msur ce se execut fiecare
instru
procesat iile propriu-zis de executat
(deter
regitrilo e
asem
adresa 0 aloarea -20.

PC
-o codificare de tip transfer registru (RTL).
arcurgei programul pas cu pas ncepnd cu adresa 0x3001 i
ai coninutul
ciune. Prima coloan reprezint adresa instruciunilor ce vor fi
e, a doua coloan ilustreaz opera
minate la punctul anterior). Urmtoarele colane redau starea iniial a
r generali i a celor de condiie din LC-3 ISA. Se presupune d
enea c la adresa de memorie 0x3100 se gsete valoarea -34 iar la
x3101 se gsete v
Operaia R0 R1 R2 R3 R4 R5 R6 R7 CCs
Starea i
regi
x3100 2 3 4 5 6 7 niial a
trilor
x3001 R2
M[R1+0]
-34 N
x3002
x3003
x3004
x3005
x3006
x3007
x3008
x3009

c) ntr-o singur propoziie ce calculeaz programul anterior ?
. LC-3 f
toate , e
imple
efectu pe
R2 iar rezultatul este depu
instruciuni care lipsesc pentr


9 ISA nu urnizeaz un opcode pentru funcia logic SAU (OR). Cu
acestea se poate scri o secven scurt de instruciuni pentru
mentarea operaiei de SAU logic. Cele patru instruciuni de mai jos
eaz o raia de SAU logic avnd ca operanzi surs regitrii R1 i
s n registrul R3. Completai cele dou
u obinerea rezultatului dorit.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
154 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
(1): 1001 100 001 111111
_____
iunile ADD, AND i NOT cum poate fi
t o instruciune de scdere (descriei succesiunea de
uia unei operaii de scdere):
Reg[Src1], Reg[Src2].
b) Aceeai problem dar pentru instruciunea
stinaie:
MOVE Reg[Dst], Reg[Src1].
Cu un registru cu 0 ?

1 m l rei faze de procesare din ciclul instruciunii ific
tru i pe urm
ri

e u tru iunea de adunare al cr ode e 0001 ):
Instruc ne
Evaluare
Adres
Fetch
Oper
e
Scrie
Rezultat
(2): _____________
(3): 0101 110 100 000 101
(4): __________________

0. a) Dispunnd doar de instruc 1
implementa
instruciuni care concur la exec
SUB Reg[Dst],
XOR Reg[Dst], Reg[Src1], Reg[Src2].
c) Cum copiem un registru surs ntr-unul de
d) m iniializm
1. Pe ti
regis
pu
l PC ? Dar IR, MAR
c se mod
toarele i MDR ? Exemplifica
cazu :
a) P ntr ins c ei opc est (ADD


Fetch
iu
Decodificare
and
Execui
PC
IR
MAR
MDR

Pe u tru iunea de citire din memorie n are direct
al crei opcode este 0010 (LD):
b) ntr ins c mod de adres





U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
LC-3 Arhitectura setului de instruciuni. Calea fluxului de date. Organizarea memoriei la
LC-3 155

Fet
Instruciune
e difica
Adres
Fetc
Operand
e
Scrie
Rezultat
ch
D co re
Evaluare h
Execui
PC
IR
MAR
MDR

c) Pentru instruciunea de scriere n memorie n mod de adresare direct
al crei opcode este 0011 (ST):


Fetch
Instruciune
Decodificare
Evaluare
Adres
Fetch
Operand
Execuie
Scrie
Rezultat
PC
IR
MAR
MDR

d) Pentru instruciunea de salt condiionat al crei opcode este 0000
(BR):


Fetch
Instruciune
Decodificare
Evaluare
Adres
Fetch
Operand
Execuie
Scrie
Rezultat
PC
IR
MAR
MDR

12. P

entru urmtoarele instruciuni descriei ce operaii au loc pe perioada
fiecrei faze de procesare din ciclul instruciunii.
a) ADD R1, R2, R3
b) LD R1, LABEL
c) NOT R1, R1

13. Ce se ntmpl dac n codificarea instruciunii de salt BR x, Label,
cmpul IR[11:9] este 000 ? Dar dac este 111 ?


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
7. L U
ARHITECTURII LC-3. ASAMBLORUL. ETAPELE
NER O
IMBAJ L DE ASAMBLARE AFERENT
GE RII C DULUI MAIN. TABELA DE
SIMBOLURI
7.1 TIV U
ASAMBLARE
Limbajul de asamblare este un limbaj de programare, principala sa
deosebire fa de limbaj nt BASIC, PASCAL i
C/C++, fiind aceea c el ofer doar cteva tipuri simple de comenzi i date.
Limbajele de asamblare nu specific tipul valorilor pstrate n variabile,
lsnd programatorul s aplice asupra lor operaiile potrivite. Scopul
ifice programrii n limbaj de
asamblare: lizibilitate greoaie a codului (greu de scris, citit i neles),
depanare i ntreinere dificil, lipsa portabilitii codului, exist motive
pentr
ul funcionrii sistemului de calcul (att n
program
un timp redus de execuie din partea lor i s ocupe un ct mai puin
spai
depende
oblignd unoasc ct mai detaliat arhitectura setului de
struciuni ISA.
Un alt motiv n favoarea programrii n limbaj de asamblare l
reprezint amploarea i dinamismul existent n dezvoltarea de sisteme
. MO E PENTR A PROGRAMA N LIMBAJ DE
ele de nivel nalt, cum su
limbajului de asamblare este de a face mai prietenos procesul de programare
dect programarea direct n limbaj main.
n ciuda unor dezavantaje clare, spec
u care nc, nu s-a renunat la limbajul de asamblare. Printre acestea se
numr viteza ridicat de execuie a programelor, spaiul relativ redus
consumat de acestea dar i permiterea accesului la anumite resurse
hardware, acces care nu este disponibil n limbajele de nivel nalt [Seb].
Un motiv pentru programarea n limbaj de asamblare l reprezint
prezena rutinelor aferente sistemului de operare. ntruct acestea sunt
apelate foarte des pe parcurs
e utilizator ct i n funcii ale sistemului de operare), este necesar
u de memorie. Programarea n limbaj de asamblare este n primul rnd
nt de maina (microarhitectura hardware) pe care se proceseaz,
programatorul s c
in
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 157
dedicate. Performana se focalizeaz pe ndeplinirea cerinelor de timp real
ale aplicaiei (aplicaii cu microcontrolere, procesoare de semnal, aparate
foto i camere video, comanda aparatelor electrocasnice, telefoane mobile,
imprimante, comenzi auto, jocuri electronice, switch-uri pentru reele, etc).
Sunt caracterizate n principal de consumuri reduse de putere (deseori
sunt alimentate prin baterii i acumulatori) i memorii de capaciti relativ
reduse.
Un alt aspect care recomand studiul limbajelor de asamblare (dei
este dependent de un anumit ISA principiile sunt aceleai) l reprezint
caracterul su formativ: o cunoatere i o mai bun nelegere a modului
de lucru al procesorului, a modurilor de adresare, a organizrii memoriei, a
l
de date aferent funciilor, a recurs i a transferului de parametrii la
nivelul funciilor, conducnd n final la scrierea de programe eficiente n
limbajele de nivel nalt (independente de main) [Seb, Lun05, Mus97].
zvoltare i
i de
inserare n codul surs de nivel nalt a liniilor scrise direct n limbaj de
asam
, scrise n limbaje de
r ample, modulele
co
ca
uti
ca
pro ntr-un colectiv / proiect software care lucreaz la rutine ale
ex
sau
blare LC-3
exe
asa ntul software care realizeaz acest lucru se numete
samblor. Acesta transform fiecare instruciune scris n limbaj de
samblare (ntr-o form ct de ct prietenoas programatorului de
succesiune de 0 i 1 extrem de prietenoas procesorului i
tregului sistem de calcul 0001110010000001). Procesul de asamblare

ucrului cu stiva poate ajuta la nelegerea mecanismelor de generare a stivei
ivitii
De asemenea, medii integrate de programare-de
compilatoare de limbaje de nivel nalt (C, Pascal, etc.) prezint facilit
blare sau link-editarea ntr-un singur modul a mai multor module
obiect provenite de la compilarea unor coduri surs
programare diferite (C, asamblare). n cazul aplicaiilo
care necesit structuri de date complexe i tehnici de programare / algoritmi
mplicai de rezolvare, sunt scrise module n limbaje de nivel nalt, iar cele
re sunt critice din punct de vedere al timpului de execuie i al resurselor
lizate sunt implementate n limbaj de asamblare specific procesorului pe
re se execut aplicaia.
La toate acestea se mai pot aduga cauze externe, cum ar fi integrarea
gramatorului
sistemului de operare sau care trebuie s modifice anumite programe
istente, scrise n asamblare, sau anumite zone de cod ruleaz prea ncet
consum prea mult memorie.
Pe lng prezentarea instruciunilor din limbajul de asam
acest capitol urmrete descrierea etapelor necesare generrii imaginii
cutabile a unui program pornind de la sursa sa scris n limbaj de
mblare. Instrume
a
a
exemplu ADD R6,R2,R1) ntr-o singur instruciune scris n limbaj
main (
n

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
158 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
realizeaz o core ntre fiecare simbol (element de limbaj
asamblare) i setu iuni specificat de ISA-ul mainii hardware pe
care se execut programul. Mnem ADD, LDR, BRnz, etc.) sunt
nlocuite cu biii cmpului de opcode, etichetele nume simbolice (LOOP,
YES, NO, AGAIN, etc.) sunt nlocuite cu adresele reale ale locaiilor de
eraii de
ciuni
dintr-un limbaj de nivel nalt (ex: C, Pascal, etc.) i corespunde o secven
de ins
iiere de asamblare LC-3
ncep
la sfritul liniei este ignorat. Identificatorii sunt o secven de caractere
alfanumerice, linie de subliniere, i trebuie s nu nceap cu un numr.
Opcode-ul instruc
identificatori. Etichetele sunt declarate prin a r la nceputul unei
linii. Numerele sunt implic aza ate de simbolul #.
Dac s
numera i 0x100 semnific aceeai valoare.
iru ile sunt cadrate lim rele speciale din iruri
urm az convenia limbajului C. Astf

D int false operaii ntruct ele nu refer


ope i
translat i se aseamn cu
struciunile (caracterizate de un cod de operaie) ele sunt precedate
ntotdeauna de . (simbolul punct). Sunt utilizate de asamblor pentru a
sponden
l de instruc
onicile (
memorie. Suplimentar, datorit directivelor de asamblare se fac op
alocare de memorie i iniializare date. Trebuie adugat c unei instru
truciuni main (unul sau mai multe coduri).
7.2. SINTAXA ASAMBLOR LC-3 [Patt03]
Fiecare linie ntr-un program asamblare reprezint una din
urmtoarele:
instruciune
directiv de asamblare
comentariu
Spaiile albe dintre simboluri sunt ignorate. Limbajul de asamblare
LC-3 ariile n f nu este case senzitiv. Coment
cu simbolul ;(ca i la INTEL). Orice urmeaz acestui caracter pn
iunilor sunt cuvinte rezervate care nu pot fi folosite ca
ezarea lo
it n b 10 i sunt preced
unt precedate de caracterul 0x, ele sunt interpretate n sistemul de
ie hexazecimal. Deci, #256
r n de ghi ele . Caracte
e el:
linie nou \n
tab \t
ghilimele \
irectivele de asamblare reprez
ra i executate de programul utilizator, fapt pentru care nu sunt
ate n instruciuni ale limbajului main (LM). De
in

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 159
aloca
ezentate, cteva din directivele de asamblare
le LC-3.
, iniializa zone de memorie de date necesare n program dar i pentru a
marca nceputul i sfritului zonei de cod alocate programului surs.
n tabelul 7.1. sunt pr
a

Nume directiv Operand Semantic
.ORI address Adresa G de star og e.
adres se va ncrca n PC la lansarea n
ie a codului main.
t a pr ramului n memori
Aceast
execu
.EN sf . D Marcheaz ritul programului surs
Atenioneaz asa s e
linii n etapa d e
simboluri.
mblorul nu mai incrementez
contorul de e generare a tabelei d
.BLKW n Aloc n cuvinte d p e spaiu entru eventuale salvri.
.EXTERNAL Eticheta declarat EXTERNAL indic
asamblorului faptul c este definit n alt modul
(tabela de simboluri aferent respectivului modul
i asigneaz o adres).
.FILL val Aloc un cuvnt de memorie i l iniializeaz cu
valoarea val.
.STRINGZ n - Aloc n+1 loca
character
string
ii de memorie (cuvinte) i
salveaz n aceast zon irul de caractere
respectiv (cte un cuvnt per locaie). n locaia
n+1 este salvat caracterul x0000 terminatorul
NULL care marcheaz sfritul irului.
Tabelul 7.1. Directivele de asamblare ale LC-3
Formatul instruciunilor aferente LC-3 ISA este de lungime fix
(caracteristic a procesoarelor RISC) pe 16 bii, i dup cum poate fi
ervat i n figura 7.1 este alctuit din 4 cmpuri: OPCODE,
ERANZI, ETICHETE i COMENTARII (dintre care primele dou
obs
OP
sunt obligatorii iar ultimele dou sunt opionale).


Figura 7.1. Formatul instruciunilor n limbajul de asamblare LC-3

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
160 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Op
pos
3 I
inst
AD

Op
gistrului (n[07] la LC-3 ISA)
valori numerice reprezentate n sistemul de numeraie
zecimal folosind # sau h xazecimal (folosind 0x)
LD, ST, BR etc.
Operanzii sunt separai prin virgul. Numrul, ordinea i tipul corespund
formatului instruciunii (vezi subcapitolul 7.2.1).
Ex: ADD R1, R1, R3 R1R1+R3
ADD R1, R1, #3 R1R1+3
LD R6, NUMBER R6MEM[NUMBER]
BRz LOOP Execut salt la LOOP pe condiie
signeaz un nume
simbolic corespunztor unei linii de adres (folosit apoi de instruciunile de
salt sa
code ul reprezint cuvinte rezervate care nu trebuie s fie folosite pe
t de identificatori, etichete i care corespund instruciunilor din setul LC-
SA (n limbaj main opcode-ul este reprezentat pe 4 bii). Toate
ruciunile i implicit opcode-urile sunt ilustrate n subcapitolul 7.2.1 (ex:
D, AND, LD, LDR, ).
eranzii pot exista sub urmtoarea form:
regitrii specificai prin Rn, unde n reprezint numrul
re
e
etichete nume simbolice a unor locaii de memorie (vezi
)
egal cu zero.

Etichetele sunt plasate la nceputul fiecrei linii i a
u de instruciunile cu referire la memorie).
Ex1 LOOP ADD R1,R1,#-1
BRp LOOP

Ex2: .
.
LD R2, SIX
.
.
SIX
.FILL 6
Comentariu este orice secven de simboluri care urmeaz caracterului ;.
Este ignorat de ctre asamblor, rolul su fiind de a ajuta dezvoltatorii i
utilizatorii de programe pentru o mai bun documentare i nelegere a
secvenelor de cod. Exist ns i cteva artificii (reguli de respectat) n
cazul folosirii comentariilor:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 161
Trebuie evitat comentarea unor lucruri evidente: de ex. se
decrementeaz R1.
ris n
limba
ra pe
dou pagini de text. Enunurile lungi separai-le ntr-o manier
estetic.

asamblare LC-3 propus drept
r ntreg cu o constant (6) prin
adunri repetate.



iniializeaz R3 cu 0. n R3 se va
la produsul.
(produsul)
GAIN
R3+R2
pstreaz numrul de iteraii (de
nsumri care trebuie fcute) R1R1 - 1
Furnizai indicii suplimentare de genul n R6 se calculeaz
produsul prin acumulare nsumri repetate.
Folosii comentariile pentru a separa bucile de program cu
caracter distinct.
n continuare sunt prezentate cteva sfaturi legate de stilul de
programare pentru mbuntirea lizibilitii i nelegerii codului sc
j de asamblare, dar nu numai.
1. Realizai un antet cu numele autorului, eventuale date de contact i
scopul programului
2. Etichetele, opcode-ul, operanzii i comentariile s nceap n
aceeai coloan, exceptnd cazurile n care ntreg rndul este un
comentariu.
3. Folosii comentarii pentru a explica ce reine fiecare registru i
respectiv ce face fiecare instruciune.
4. Folosii nume simbolice edificatoare, dac este cazul mixai literele
mici cu cele mari (de ex. ASCIItoBinary, InputRoutine, SaveR1).
5. Folosii comentariile pentru a separa seciunile de program cu
caracter distinct.
6. Evitai trunchierile de instruciuni sau desfurarea acesto
Primul program scris n limbaj de
exemplu realizeaz nmulirea unui num
.ORIG x3050
LD R1, SIX
LD R2, NUMBER
AND R3, R3, #0 ; Se
calcu

; Bucla de calcul a sumei repetate

A
ADD R3, R3, R2 ; R3
R1, #-1 ; R1 ADD R1,

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
162 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
BRp AGAIN ; dac este setat bitul de condiie P (n
tiv) se execut salt la
pentru ca ogramu
la locaia NUMBER
fie nlocuit cu
7.2. AJ DE ASAMBLARE LC-3
LIMBAJ SPECIFIC LC-3 ISA
M 15 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ADD 0 0 1 DR SR1 0 0 0 SR2
urma scderii rezultatul
; este strict pozi
eticheta AGAIN i reia o
; nou iteraie
HALT
NUMBER
.BLKW 1
; pr l s execute nmulirea dintre numerele dorite trebuie ca
; s se intervin la nivelul simulatorului i s se nscrie
; o valoare numeric sau directiva de asamblare .BLKW 1 s
; una de genul .FILL numr_dorit

IX S
.FILL x0006
.END
1. CORESPONDENA LIMB
MAIN
14
0
ADD* 0 0 0 1 DR SR1 1 Imm5
AND 0 0 SR1 0 0 0 SR2 1 1 DR
AND* 0 1 0 1 DR SR1 1 Imm5
BR 0 0 0 0 n z p Pageoffset9
J 0 0 L 0 0 Pageoffset9 SR 0 1
JS 0 0 L 0 0 BaseR Index6 RR 1 1
L 1 0 DR Pageoffset9 D 0 0
L 1 0 DR Pageoffset9 DI 1 0
LDR 0 1 1 0 DR BaseR Index6
LEA 1 1 1 0 DR Pageoffset9

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 163
NOT 1 0 0 1 DR SR1 1 1 1 1 1 1
R 0 0 0 0 0 0 0 0 0 0 0 0 ET 1 1 0 1
R 0 0 0 0 0 0 0 0 0 0 0 0 0 TI 1 0 0
S SR Pageoffset9 T 0 0 1 1
S SR Pageoffset9 TI 1 0 1 1
STR 0 1 1 1 SR BaseR Index6
TRAP 1 1 1 1 0 0 0 0 Trapvect8

Legend:
loana M reprezint mnemonicele instruciunilor limbajului de asamblare
-3.
respunztor fiecrei linii (instruciuni) coloanele 150 reprezint
truciunea n limbaj main, biii 1512 reprezentnd opcode-ul (se
mintete faptul c LC-3 ISA conine 16 instruciuni distincte).
registru destinaie
Co
LC
Co
ins
rea
R
struciunile de adunare i I Logic
n regitrii ct i cu unul situat n
t creia i se va extinde semnul pe
instruciunile cu referire la memorie i
zint deplasamentul pe 6 bii.
la o adres de baz (aceasta poate
azul instruciunilor LD, ST, BR sau
t8 codificare vectorului de ntrerupere pe 8 bii fr semn,
256 d u ectura LC-3 ISA
7.2.2. APELU
l low numite apeluri sistem reprezint un
e servicii ale sistemului de operare prin instruciuni (syscall la
procesorul MIPS, ntreruperi software int 21h la Intel, TRAP la arhitectura
D
SR registru surs
valoare imediat pe 5 bii. In Imm5
pot opera att cu doi operanzi aflai
registru i al doilea fiind o valoare imedia
16 bii.
BaseR registru de baz folosit n
mod de adresare indexat iar Index6 repre
lativ Pageofset9 deplasament pe 9 bii re
fi PC-ul instruciunii urmtoare n c
JSR).
Trapvec
existnd e ntrer peri la arhit
RI SISTEM
ntreruperile software la nive
mic set d

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
164 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
LC-3). Pentru a apela un serviciu, trebuie ncrcat codul apelului sistem ntr-
unul din regit PS n $2 ($v0), la LC-3 n R0, la Intel n
AH). n tabelul 7.2 sunt prezentate cele mai uzuale apeluri sistem
implementate rii LC-3 - ISA.


Descriere
rii arhitecturali (la MI
n cadrul arhitectu
Serviciul Cod Apel Sistem
HALT rete execuia i se afieaz un mesaj
tor pe consol.
TRAP x25 Se op
corespunz
IN TRAP x23 Se afieaz
prompter,
un mesaj pe consol gen
citete (cu ecou) un caracter de la
.. Codul ASCII al caracterului respectiv
memorat n registrul R0[7:0].
tastatur
este
OUT TRAP x21 Afieaz pe consol caracterul avnd codul
0]. ASCII in R0[7:
GETC TRAP x20 Citete (fr ecou) un caracter de la tastatur..
Codul ASCII al caracterului respectiv este
memorat n registrul R0[7:0].
PUTS TRAP x22 Afieaz pe consol un ir de caractere ncheiat
cu terminatorul NULL. Adresa irului se gsete
n R0.
Tabelul 7.2. Servicii Sistem
7.3. PROCESUL DE ASAMBLARE ETAPELE
GENER MAIN
ce upune convertirea unui fiier scris n
a LC-3 i Intel, .s la MIPS) ntr-un fiier
e fa simulatorul LC-3). Codul
generat poa ulare) sau n format cod obiect
pseudo-exe .obj) care trebuie legat (link-editat) cu codul obiect al
ob
ri
RII CODULUI
Pro sul de asamblare pres
de asamblare (.asm l mnemonic
executabil pe platforma destinaie (n cazul d
irect executabil (gata de r te fi d
cutabil (
funciilor de bibliotec apelate n modulul respectiv sau cu alte fiiere
iect. Se disting dou etape:
Scanarea codului surs asamblare i generarea tabelei de
simbolu

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 165
Reanalizarea programului surs i folosind informaiile din tabela
de nereaz codul n limbaj main specific
mainii destinaie

simboluri se ge

Figura 7.2. rii codului main pornind de la limbajul de asamblare
LC-3
1. GENERAREA TABELEI DE SIMBOLURI (TS)
Reprezint rima etap a p c su ui d a b r e p n
urmtoarea secven de pai:
Se parcurge fiecare linie din fi er l r asamblare.
Pentru fiecare linie nevid din program, se determin dac aceasta
bela de simboluri
Etapele gener
7.3.
p ro e l e as m la e i pr su u e
i u su s

conine o etichet (pe prima coloan) i se calculeaz adresa
corespunztoare (vezi mai jos) adugndu-se la ta . O
linie care conine doar comentariu se consider vid din punctul de
vedere a
Se ident RIG, care stabilete adresa de start a primei
instruciu
Se pstre r local (LC) al adreselor (incrementat cu 1 la fiecare
local se iniializeaz cu valoarea adresei
specific RIG.
Procesu irea directivei .END.
Trebuie ntlnirea directivelor de asamblare .BLKW sau
al se incrementeaz cu numrul de cuvinte
(words) alocate.
l asamblorului.
ific directiva .O
ni.
az un conto
instruciune). Contorul
at prin directiva .O
l se ncheie la ntln
specificat c la
.STRINGZ contorul loc



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
166 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Revenind la exemplul din subcapitolul 7.2 tabela de simboluri arat n felul

Simbol Adres
urmtor:
AGAIN 0x3053
NUMBER 0x3057
SIX 0x3058
7.3.2 BINEREA CODULUI N LIMBAJUL MAIN . O
Reprezint cea de-a doua etap a procesului de asamblare i presupune
fol luri tocmai
enerat se translateaz fiecare instruciune n cod binar (limbaj main).
Practic fiecare opcode este nlocuit cu secvena de 4 bii corespunztoare
(vezi seciunea 7.2.1) iar cei 8 regitri sunt nlocuii cu codificarea binar pe
3 bii a ind lnirea unei etichete care face parte din corpul
rima coloan) se caut aceasta n tabela de
simboluri corespunztoare. Se verific s aparin aceast
adres n intervalul +256 / -255 linii fa de instruciunea n cauz (ntr-o
relativ la PC-ul curent). Se nlocuiete apoi n
cmpul corespunztor instruciunii curente cei 9 bii mai puini semnificativi
i adresei obinute fcnd diferena dintre adresa din TS i PC-ul
R1,#7
R1,R2
R3,R3,NUMBER
Folosir e tip imediat care depesc domeniul de
repreze
R1, R2, #1023
Utiliza sociate etichetelor) care nu se regsesc n
aceeai ie cu instruciunea curent. n acest caz nu
se poat ect de adresare (trebuie utilizate instruciuni
cu mod at).
parcurgerea de la nceput a programului asamblare, linie cu linie, i
osind(dac este cazul) informaiile din tabela de simbo
g
exului lor. La nt
unei instruciuni (nu este pe p
i se ia adresa
pagin de 9 bii cu semn
a
instruciunii urmtoare (celei cu eticheta).
Pot apare urmtoarele probleme:
Folosirea necorespunztoare a numrului sau tipului de argumente.
De exemplu:
NOT
ADD
ADD
ea argumentelor d
ntare. De exemplu:
ADD
rea adreselor (a
pagin de memor
ul dir e aplica mod
de adresare index

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 167
De ase ea erori dac se folosesc adrese nedeclarate
xtern n tabela de simboluri.
Revenind subcapitolul 7.2, innd cont i de tabela de
capitolul 7.3.1, codul n limbaj main al

Program de nmulire a unui numr cu 6
x3
x3
3053 AGAI
x3054 , R1, #-1
x3055
x3056
W 1
x3058 SIX 06




x3053 0001011011000010
x3054 0001001001111111
x3055 0000001111111101
x3056 1111 0000 0010 0101
x3057 0000000000000000
x3058 0000 0000 0000 0110

Dup cu n figura 7.3, n urma aplicrii procesului
blare (.asm), folosind opiunea de
ilitarului LC-3Edit, pe lng fiierul
bj) su arele fiiere auxiliare:
rul bi rei instruciuni n binar
corespunztoare directivei .ORIG.
ia semantic a fiierului binar cu deosebirea
iile su alori n binar ci n hexazecimal.
Fiierul (. eprezint tabela de simboluri (ilustreaz maparea
um



folosind un editor de text gen notepad.exe). Fiierul .obj urmeaz a fi
ncrcat n s i executat. Considernd un nivel suficient
menea pot apr
e i care nu se gsesc

la exemplul din
simboluri generat n sub
programului va arta astfel:
;
.ORIG x3050
x3050 LD R1, SIX
051 LD R2, NUMBER
052 AND R3, R3, #0
; Bucla de calcul

x3050 0010001000000111
x3051 0010010000000101
x3052 0101011011100000

x N ADD R3, R3, R2
ADD R1
BRp AGAIN
HALT
x3057 NUMBER .BLK
.FILL x00
.END
m se poate observa
de asamblare unui fiier surs asam
le din al ut Assemb meniul Translate
obiect (.o to nt generate urm
nine translatarea fiec Fiie nar (.bin) co
(limbaj main) inclusiv linia
rul bin op Fiie ar (.hex) este c
c lin apt nu v nt de f
sym) r
n e_eticheta Adres).
Fiierul (.lst) conine pe prima coloan adresa instruciunii care se va
procesa, pe urmtoarea codificarea hexazecimal a instruciunii, urmat
de codificarea binar a instruciunii, numrul curent al liniei (n zecimal)
i pe ultima coloan instruciunea n mnemonic asamblare.
Fiierul obiect (.obj) conine aceleai informaii ca i fiierul (.bin) cu
deosebirea c informaia (programul n limbaj main) n fiierul obiect
este scris n format binar (date n format neprintabil) n timp ce n
fiierul .bin informaia este stocat n format ASCII (poate fi vizualizat
imulatorul LC-3

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
168 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
de redus de abstractizare, formatul binar de fiier este caracterizat de o
reprezentar aiei n vederea unei analize sintactice i
semantice ng). Formatul ELF (Executable and
ormat binar implicit de reprezentare a
fiierelor n are Linux. Fiierul ELF este compus dintr-
un antet ( conine detalii despre tipul fiierului obiect
direct executabil, partajabil, relocabil, despre arhitectura int pe care
se va procesa, etc.; antetul este urmat de 0 sau mai multe segmente i 0
sau mai m mentele conin informaii necesare pentru
execuia f n timp ce seciunile conin date
importante e creare a legturilor ntre mai multe
fiiere obie entual pentru relocare (vezi n
continuare

e compact a inform
eficiente (parsi
Linking Format) reprezint un f
sistemul de oper
re ELF header) ca
ulte seciuni. Seg
iierului de aplicaie,
necesare procesului d
i ev ct (link-editare)
).

Figura 7.3. Fiierele generate de asamblorul inclus n LC-3Edit n urma asamblrii
unui cod surs





U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 169
7.3.3. CREAREA LEGTURILOR NTRE MODULE,
NCRCAREA I LANSAREA N EXECUIE
Un fii
Imaginea exec
p
r
Sim
nceperea execuiei de la o anumit adres. Un singur fiier obiect trebuie s
fie modulul principal (identic cu cazul proiectelor n mediile de programare
bazate pe limbajul C cnd exist un singur modul ce conine funcia main).
nt ncrcate
vezi harta
de memorie la arhitectura LC-3 (capitolul 10 - figura 10.4). Prin convenie,
codul utilizator (instruciunile) poate fi ncrcat n intervalul de adrese
0x300
i) care va cuta
n tab
istrul PC (program
count
(gestion
astfel n
Problema relocrii apare mai ales n situaia utilizrii mai multor fiiere
obiect scrise de programatori independeni i care folosesc adrese de start
identice sau situate ntr-o vecintate a spaiului de memorie. n aceste cazuri
trebuie reajustate target-urile instruciunilor de ramificaie i adresele datelor
solicitate de ctre instruciunile cu referire la memorie (load / store).
er obiect nu este neaprat un program complet, gata de rulare.
utabil poate fi generat din mai multe module obiect:
rograme de aplicaie asamblate, scrise de unul sau mai muli utilizatori i
espectiv funcii de bibliotec furnizate de ctre sistemul de operare.
ulatorul LC-3 permite ncrcarea mai multor fiiere obiect n memorie i
Rutinele sistem, destinate interfeei cu tastatura sau consola, su
automat n memoria sistem, la adrese inferioare valorii 0x1000
0 i 0xCFFF. Fiecare fiier obiect trebuie s includ o adres de start.
Programatorii trebuie s aib grij s nu suprapun mai multe programe
obiect n memorie iar referinele declarate prin directiva .EXTERNAL
(ncruciate ntre mai multe module) trebuie rezolvate atent la generarea
codului obiect.
Crearea legturilor Linking reprezint procesul de rezolvare a
simbolurilor partajate ntre module independente. Link-editorul reprezint
instrumentul software (de regul component al compilatorulu
ela de simboluri a tuturor modulelor obiect generate pentru a afla
adresa real a etichetelor declarate .EXTERNAL n anumite module i de
ncheia faza de generare de cod, pregtind ncrcarea i apoi execuia.
ncrcarea i nceperea execuiei Loading reprezint procesul
de copiere a imaginii executabile a unui program n memorie (se copiaz
lista de instruciuni main cu toate referinele simbolice rezolvate n
memorie, ncepnd cu adresa specificat prin directiva .ORIG). Lansarea n
execuie se face prin copierea adresei de start n reg
er). ncrctoare software mai complexe sunt capabile s reloce
eze eficient, modificnd chiar) spaiul aferent imaginii executabile
ct codul main s poat fi ncadrat n memoria disponibil.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
170 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
7.4. EX
1. Secv mai jos urmrete s deplaseze registrul R3 la
st
R2, R2, # -1
ADD R3, R3, R3
BRnzp LOOP
DONE HALT
z s citeasc dou numere (caractere) de
la tastatur, s le adune i apoi s afieze suma.

ADD



a) Ce nu
b) Dac
consol

3. C
ur
nu

.S
b. 20
c. 21
d. 22

ERCIII I PROBLEME
ena de program de
nga cu 4 bii, dar conine o eroare. Identificai eroarea i explicai cum
poate fi nlturat astfel nct programul s funcioneze corect.

.ORIG x3000
AND R2, R2, #0
ADD R2, R2, #4
LOOP BRz DONE
ADD
.END

2. Urmtorul program intenionea
THEM TRAP x23 ; IN se citete primul numr
ADD R4,R0,#0
TRAP x23 ; IN se citete al doilea numr
ADD R0,R4,R0
TRAP x21 ; OUT afiare rezultat
TRAP x25 ; HALT ncheiere program utilizator
este n regul cu acest program ?
se introduce de la tastatur 5, i apoi 3, ce rezultat se va afia pe
(ecran) ?
te locaii de memorie va aloca asamblorul LC-3 pentru stocarea
torului m m esaj? (toate numerele din soluie sunt n sistemul de
meraie zecimal).
TRINGZ "Hasta la vista, baby!"
a. 19

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 171
4. La
R R1, R2, 0x10
n plu u
Mem
b. 0xB000
e. 0xFFFF

c.
d. A
e.
(de la dreapta la stn
stnga la dreapta) Un astfel de exemplu este irul racecar.
Presupunnd c irul este stocat n memorie ncepnd cu adresa 0x4000,
i se ncheie cu valoarea 0x0, similar cu funcia directivei de asamblare
.STRINGZ. Dac irul aflat n memorie este palindrom, programul se
ncheie setnd valoarea 1 n registrul R5. n caz contrar, programul se
ncheie, n R5 introducndu-se valoarea 0. Se cere s se completeze
spaiile goale cu instruciunile lips pentru ca programul s funcioneze.

.ORIG 0x3000
; Step 1
LD R0, PTR
ADD R1, R0, #0
adresa 0xA400 se consider instruciunea:
0xA 0 4 0 LD
s c noscnd c: (R2) = 0xB000; Mem[xB000] = 0xFFFF;
[0xB010] = 0x000F;
Care este valoarea registrului R1 dup execuia instruciunii de la adresa
0xA400?
a. 0xA420
c. 0xB020
d. 0x000F
5. Care dintre urmtoarele instruciuni va seta codurile de condiie (n, z, p)
bazndu-ne doar pe valoarea coninut n registrul R1, fr a modifica
coninutul niciunui registru? Putei modifica una dintre instruciunile
date pentru a mai gsi o soluie ?
a. ADD R2, R1, #0
b. ST R1, LABEL
ADD R1, R1, R1
ND R1, R1, #0
AND R1, R1, # -1

6. Urmtorul program LC-3 program determin dac un ir de caractere este
sau nu palindrom. Un palindrom este un ir de caractere care citit invers
ga) este identic cu irul citit n sensul normal (de la

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
172 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
AG N



CO
; Step 2
LOOP

; Step 3
______

YES


NO
DONE
TR .FILL x4000
.END

7. Urmtorul progr ire, nu exist erori
depistate nici n ie. Ce se afieaz
pe ecran n urma execuiei? Presupunem c toi regitrii sunt iniializai
cu 0 nainte de nceperea execu eamintete c ntreruperea
software TR a crui adres
se afl n registrul R0, pn ntlnete terminatorul NULL.

AI LDR R2, R1, #0
BRz CONT
ADD R1, R1, #1
BRnzp AGAIN
NT ________________

LDR R3, R0, #0
________________

NOT R4, R4
ADD R4, R4, #1
ADD R3, R3, R4
BRnp NO

________________

__________

NOT R2, R0
ADD R2, R2, #1
ADD R2, R1, R2
BRnz YES
________ ________
; Step 4
AND R5, R5, #0
ADD R5, R5, #1
BRnzp DONE
AND R5, R5, #0
HALT
P
am este asamblat i executat. Din feric
faza de asamblare nici n cea de execu
iei. Se r
AP 0x22 afieaz pe ecran un ir de caractere,

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 173
.ORIG x3000
ST R0, x3007
LEA R0, LABEL
TRAP x22
TRAP x25
LABEL
.STRINGZ "FUNKY"
LABEL2
.STRINGZ "HELLO WORLD"
.END

8. Completai tabela de simboluri i asamblai instruciunile de la etichetele
D, E, i F n spaiile avute la dispoziie. Se poate considera c la adresa
A, nainte de nceperea execuiei se afl un numr pozitiv. Ce execut
programul ?

.ORIG 0x3000
AND R0, R0, #0
D



LD R1, A
AND R2, R1, #1
BRp B
E
ADD R1, R1, #-1
B
ADD R0, R0, R1
ADD R1, R1, #-2
Tabela de simboluri
Eticheta
(simbol)
Valoare



F
BRp B
ST R0,
TRAP x25
A
.BL
C
.BLKW 1
C
KW 1
.END









dr r binar a instruciuni


A esa inst uciunii Codificarea i
D
E
F

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
174 Introducere n atoarelor. Interfaa Hardware - Software tiina i ingineria calcul


9. Ce realizeaz program mtor ? Care este valoarea stocat la adresa
RESULT dup ncheierea execuiei programului ?

.ORIG 0x3000
LD R2, ZERO
LD R0, M0
LD R1, M1
LOOP BRz DONE
ADD R2, R2, R0
ADD R1, R1, # -1
DONE ST R2, RESULT
HALT
RESU
0. Scriei un mbaj de asamblare LC-3 care contorizeaz
une
rea

re e i d e
instruciune

2. u a
instruciune d

.OR
LEA R2, DATA

3
BR
TR
.EN
ul ur
BRnzp DONE

LT .FILL 0x0000
ZERO .FILL 0x0000
M0 .FILL 0x0004
M1 .FILL 0x0803
.END

1 program n li
numrul de bii de 1 din valoarea stocat n registrul R0 i dep
rezultatul n R1. De e R0 reine valoa xemplu, dac
0001001101110000, atunci dup execuia programului rezultatul stocat
n R1 va fi 0000000000000110.

11. Ca ste scopul directive e asamblare .END ? Prin ce difer d
a HALT ?
1 La execuia program lui blare LC-3, de cte ori se va proces
a de la adresa e OP ?
asam
memorie etichetat cu LO
IG 0x3005
LDR R4, R2, #0
LOOP ADD R4, R4, # -
zp LOOP
AP 0x25
DATA .FILL 0x000B
D

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Limbajul de asamblare aferent arhitecturii LC-3. Asamblorul. Etapele generrii codului
main. Tabela de simboluri 175
13. Se consider o secven de numere ntregi nenegative stocat n locaii
co
al). Secvena se ncheie cnd se ntlnete valoarea -1. Ce
realizeaz programul urmtor ?
.ORIG 0x3000

AND R3, R3,
S
LOOP LDR R1, R0, #0
NOT R2, R1
BRnzp NEXT
L1 ADD R3, R3, #1
NEXT ADD R0, R0, #1
BRnzp LOOP
NUMBERS .FILL 0x4000

14. Se consider o secven de nume cutive
de memori dresa
?

.ORIG 0x3000


1 ADD R1, R1, R1
STR R1, R0, #0
NEXT ADD R0, R0, #1
nsecutive de memorie (cte un cuvnt numr ntreg per locaie)
ncepnd cu adresa 0x4000. Fiecare numr ntreg are o valoare ntre 0 i
30000 (zecim

AND R4, R4, #0
#0
LD R0, NUMBER
BRz DONE
AND R2, R1, #1
BRz L1
ADD R4, R4, #1
DONE TRAP 0x25
.END
re ntregi stocat n locaii conse
e (cte un numr ntreg per locaie) ncepnd cu a
0x4000. Secvena se ncheie cnd se ntlnete valoarea 0x0000. Ce
realizeaz programul urmtor
LD R0, NUMBERS
LD R2, MASK
LOOP LDR R1, R0, #0
BRz DONE
AND R5, R1, R2
BRz L1
BRnzp NEXT
L

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
176 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
BRnzp LOOP
DONE TRAP 0x25
NUM
termin genernd valoarea 1 n R5. Completai cele 3 spaii libere cu
instruciuni t programul s funcioneze corect.
LD R2, SECOND
LOOP _________________
ADD R1, R1, #1
__
BRz LOOP
NEXT AND R5, R5, #0
ADD R5, R5, #1
DONE TRAP 0x25
FIRST .FILL 0x4000
SECOND
BERS .FILL 0x4000
MASK .FILL 0x8000
.END

15. Urmtorul program asamblare LC-3 compar dou iruri de
caractere de aceeai lungime. Definiia celor dou iruri (stocarea lor n
memorie) s-a realizat folosind directiva de asamblare .STRINGZ ir.
Primul ir ncepe de la locaia FIRST din memorie, iar al doilea de la
locaia SECOND. Dac cele dou iruri sunt identice, programul se
ncheie setnd valoarea 0 n R5. Dac irurile sunt diferite programul se
le lips astfel nc

.ORIG 0x3000
LD R1, FIRST
AND R0, R0, #0
LDR R4, R2, #0
BRz NEXT
ADD R2, R2, #1
____ ___________
_________________
ADD R3, R3, R4
AND R5, R5, #0
BRnzp DONE
.FILL 0x4100
.END



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s

8. NTRERUPERI SOFTWARE LA NIVEL LOW.
APELURI DE SU
INDIRECTE. R
RESTAURAREA REGI OR. STRATEGIILE
C LL AVE
BRUTINE DIRECTE I
EVENIRI. SALVAREA I
TRIIL
A RESPECTIV CALLEE S ER-SAVE
8.1. NTRERUPERI. DEFINI
ntr
l con ad
adres se afl e a ntr
ntrerupere. M alizare
/ revenire, astfel nct ultima instruc
una de revenire (return) care s facil
(cel aflat n execuie n momentul
prima instruciune de dup cea pe car
Din pun v ne
hardware i s re le
semnal extern, fiind de dou tipuri: au nedezactivabile) i
dware sunt frecvent folosite
e ultitasking (preluarea controlului de
or ice). ntreruperile software sunt de
regul implem iu iecrui
procesor. Se cunosc dou
Excepii, deoarece ntreruperea ap exist o condiie
ztoare a unei
u , depire de domeniu, etc). Un tip

IE. CLASIFICARE
Prin erupere se nelege oprirea programului n curs de execuie i
transferu trolului la o nou am [Mus97]. La aceast res de progr
rutina de tratar eruperii, dedicat soluionrii cererii de
ecanismul de re a transferului este de tipul apel funcie
iune din rutina de tratare trebuie s fie
iteze ntoarcerea n programul principal
apariiei ntreruperii), n general
11
pe
e a aprut ntreruperea.
ct de edere al ge rrii lor, ntreruperile se clasific n
oftwa . ntreruperi apar ca rspuns la un iniiate hardware
nemascabile (s
mascabile (sau dezactivabile). ntreruperile har
n calculul d timp real din sistemele m
ctre proces situaii crit n anumite
entate ca i instruc ni n setul de instruciuni al f
tipuri de ntreruperi software:
are numai dac
de eroare, care nu permite execuia corespun
instr ciuni (mprire cu zero

11
n general revenirea din rutina de tratare a ntreruperii se face pe instruciunea imediat
dup care se va exe lu orie
(Load Adresa).
urmtoare celei care a cauzat ntreruperea. Pot ns aprea instruciuni de genul Load
Adres care s cauzeze o excepie de tip Page Fault. n aceast situaie va fi tratat excepia
relua cuia programu i cu aceeai instruciune de acces la mem

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
178 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
special de excepie l reprez permite
execu iune cu instruciune (pas cu pas).
ntre re execuie a instruciunii TRAP n
(unde
Din punct de vedere al s sorului,
ntreruperile software sunt evenime
ale procesorului la anumite evenime
instruciuni, n timp ce ntreruperile
fiind generate de dispozitive externe. ntotdeauna
diii de intrare, n
ia
C P
La nivelul unui sistem de calcu ruciuni prin care un
i
care sunt cel mai bine executate de c ervizor (sistemul de
i nu ele uti
Instruciuni de Intrare / Iei esit cunotine specifice de
utiliza e
perife TDR
monitorul, etc). ntruct dispozitivele periferice sunt partajate ntre
int excepia de depanare, care
ia unui program instruc
ruperi generate la fieca
n(0255)).
incronizrii cu ceasul proce
nte sincrone, reprezentnd rspunsuri
nte detectate n timpul execuiei unei
hardware sunt evenimente asincrone,
ntreruperile software sunt
reproductibile prin reexecuia programului n aceleai con
de obicei independente de execu timp ce ntreruperile hardware sunt
procesului curent.
8.2. NTRERUPERI SOFTWARE LA NIVEL LOW
INSTRU IUNILE TRA
l exist cteva inst
anumit program poate afecta comportamentul altuia (numite privilegiate)
tre un program sup
operare) de ctre program lizator.
re care nec
re i protecie a regitrilor de interfa cu dispozitivel
rice (KBDR, KBSR tastatura i CRTSR, CR
mai multe programe i mai muli utilizatori, o greal dintr-un
program poate afecta mai muli utilizatori.
Instruciuni pentru resetarea ceasului sistemului (la acionarea
butonului Reset sau la oprirea sistemului).
Instruciuni care marcheaz ncheierea aplicaiei utilizator i
cedarea controlului sistemului de operare.
ncrcarea regitrilor afereni dispozitivelor periferice i mapai n
memoria sistemului de calcul (memory-mapped registers
12
)

12
Majoritatea proiectanilor de sisteme de calcul prefer s nu specifice un set de
instruciuni suplimentare pentru tratarea interaciunii dintre procesor i dispozitivele
periferice. Acetia folosesc aceleai instruciuni de transfer date utilizate la citirea / scrierea
datelor din / n memorie n / din regitrii procesorului (load / store). Astfel, o instruciune
Load a crui adres surs este specificat printr-un registru aferent unui dispozitiv periferic

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 179
Unitatea central de procesare (CPU) poate fi proiectat s lucreze n
dou moduri:
Mod utilizator
Mod privilegiat (numit i supervizor, nucleu, monitor).
Doar programele supervizor pot executa instruciuni privilegiate. n
plus, nu toi programatorii cunosc sau i doresc s afle aceste informaii la
un nivel foarte ridicat de detaliu.
8.2.1. RUTINELE DE TRATARE AFERENTE APELURILOR
SISTEM LA LC-3 ISA
ntrerupe nivel
ll la
procesorul MIPS, ntreruperi softwar la arhitectura
LC-3) care au sig
apela un serviciu, trebuie ncrcat
regitrii arhite li ( AH).
Protocolul de efectuare a unui apel si
1. Utilizatorul invoc un apel sistem.
2. Este predat controlul sistemului de operare care determin execuia
rii respective.
3. Retur zator.
n cazul col se numete mecanismul
TRAP. Instruc eciunile de cod critice de utilizator.
Mecanismul T toarele componente:
1. Mulimea re a diferitelor ntreruperi
rutinele TR
rile software la low numite apeluri sistem reprezint
un mic set de servicii ale sistemului de operare prin instruciuni (sysca
e int 21h la Intel, TRAP
rolul de a efectua n uran operaii privilegiate. Pentru a
codul apelului sistem ntr-unul din
ctura la MIPS n $2 ($v0), la LC-3 n R0, la Intel n
stem se realizeaz n etapele:
secvenei de cod aferent rutinei de tratare a ntrerupe
neaz controlul programului utili
LC-3 acest proto arhitecturii
iunile TRAP izoleaz s
pe urm RAP se bazeaz
rutinelor de serviciu (de trata
AP)

de intrare n sistem, se numete instruciune de intrare. Similar, o instruciune Store a crui
estinaie este specificat printr-un registru aferent unui dispozit adres d iv periferic de ieire
din sistem, se n e ie
instruciuni de ac tru
ieire trebuie identificai n mod unic n
memorie. Astfel, fiecrui registru aferent un
n spaiul de memorie descris de ISA-ul fi
ieire sunt mapai spre o zon de adre
memoriei de da
dispozitivelor per
MIPS, SPARC i Motorola, iar Intel folose use
n ISA (IN / OU t sc
periferice.
umete instruciune d ire. ntruct sunt folosite aceleai tipuri de
ces la memorie i pen periferice, regitrii dispozitivelor de intrare /
acelai fel cum sunt identificate locaiile de
ui dispozitiv periferic i este asignat o adres
ecrui procesor. Practic regitrii de intrare /
se specific dispozitivelor periferice i nu
te. Exemple de familii de procesoare care folosesc regitrii afereni
iferice mapai n memorie n combinaie cu instruciuni load / store sunt
te instruciuni speciale de intrare / ieire incl
T) pen ru citirea sau rierea datelor din / n regitrii dispozitivelor

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
180 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
Sunt parte integrant a sistem e; adresele de nceput a
fiecre tin
0x00000x2FFF sau 0xCFFF0xFFFF.
A.
Izo e
Permite scrierea codulu
apelarea de cte ori este n
Pro lui de programatorii nendemnatici.
2. Tabela ad
Adresele de start sunt mem intrri
ncepnd cu adresa 0x0000 i
vectorilor de ntrerupere T
cazul altor arhitecturi. Dei
ISA sunt implementate doa uri sistem, orice tentativ de
0x001F va genera
pentru a transfera controlul
ciunii un vector de
un index
ia de la
caia ecific tina de
tratare a ntreruperii, valoare care se C.
Trebuie s ii,
avnd e
operare la nivelul programului utilizator (n cazul procesorului
INTEL se numete IRET, iar la MIPS se numete rfe return from

ului de operar
i ru e sunt arbitrar alesen spaiul de memorie
Pot fi implementate pn la 256 de rutine la arhitectura LC-3 IS
Rutinele de serviciu asigur trei funcii speciale:
leaz programatorii d detalii specifice sistemului de operare.
i frecvent utilizat o singur dat i
evoie.
tejeaz resursele sistemu
reselor de start
orate ntr-o tabel de 256 de
pn la adresa 0x00FF, numit tabela
RAP sau blocul de control sistem n
n versiunea actual a arhitecturii LC-3
r 5 apel
folosire (scriere / citire) a zonei de adrese 0x0000
o excepie.
3. Instruciunile TRAP
Sunt folosite n programele utilizator
sistemului de operare. Codific n corpul instru
ntrerupere pe 8 bii (codul apelului sistem) care reprezint
n tabela cu adresele de start a rutinelor de serviciu. Informa
lo sp at reprezint adresa primei instruciuni din ru
ncarc n registrul P
4. Instruciunea RET
fie prezent n fiecare ntreruper
rolul de a transfera controlul de la nivelul sistemului d
rutin de tratare a
exception). Revenirea se face pe instruciunea imediat urmtoare
instruciunii TRAP.

Figura 8.1. Formatul instruciunii TRAP


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 181

Figura 8.2. Modul de lucru al instruciunii TRAP
n figura 8.1 este prezentat formatul instruciunii TRAP iar figura 8.2
eaz modul de lucru al acesteia. Primii 4 bii ai instruciunii sunt 1
i de 4 bii de 0 iar ultimii 8 bii reprezint codul apelului. n registrul
e ncarc valoarea PC-ului (care n momentul execuiei instruciunii
P pointeaz deja la instruciunea urmtoare din program, PC-ul fiind
mentat n timpul fazei FE
ilustr
urma
R7 s
TRA
incre TCH) vezi operaia 1 din figura 8.2. ntruct
adres e
tratare (valoare citit din memorie de la adresa
indica
de tratare a ntreruperii (sau a oricrei rutine). Rolul su este de a transfera
ele de nc put ale rutinelor de tratare sunt stocate n memorie de la
adresa 0x0000 la adresa 0x00FF rezult c pentru selecia adresei de nceput
a rutinei corespunztoare, n registrul MAR, cei mai semnificativi 8 bii ai
codului de apel (din registrul IR aferent instruciunii TRAP) se extind cu 0
pe 8 bii vezi operaia 1 din figura 8.2. n PC se ncarc adresa primei
instruciuni din rutina de
t de MAR i depus apoi n MDR vezi operaia 2 din figura 8.2), n
acest fel fiind predat controlul sistemului de operare vezi operaia 3 din
figura 8.2. Trebuie specificat c n cadrul arhitecturii LC-3 ISA, rolul
registrului R7 este de adres de revenire n programul apelant iar R6 are
rolul de indicator de stiv (pointer la ultima locaie cea mai recent
ocupat n stiv). Toate arhitecturile RISC dein astfel de regitrii (la MIPS
$ra i $sp).
Instruciunea RET trebuie s fie practic ultima instruciune din rutina

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
182 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
coninutul registrului R7 n registrul PC cednd astfel controlul napoi
programului apelant (utilizator) pe instruciunea imediat urmtoare
instruciunii TRAP (doar dac nu cumva a fost alterat n interiorul rutinei).
Formatul instruciunii RET este cel din figura 8.3 iar modul su de lucru
este ilustrat n figura 8.4.


Figura 8.3. Formatul instruciunii RET


Figura 8.4. Modul de lucru al instruciunii RET

Vector Simb i efe ol Operai ctuate
x20 GETC Citete un singur caracter de la
tastatur fr ecou.
Scrie codul al caracterului ASCII
citit n registrul R0
ndu-i
[7:0], biii
R0[15:8] set pe 0.
x21 OUT Afieaz pe moni
SCII s
tor c
e regsete n
[7:0].
aracterul al
crui cod A
registrul R0
x22 S Afi PUT eaz pe
caractere al
consol irul de
crui adres de nceput
se afl n registrul R0.
x23 IN Afieaz un mesaj pe consol i
citete fr ecou un caracter de la
tastatur.
nscrie codul ASCII al
caracterului citit n R0[7:0] i
reseteaz biii R0[15:8].
x25 HALT Afieaz un mesaj de atenionare pe
ecran i ntrerupe execuia
programului.

Figura 8.5. Semantica instruciunilor TRAP. Adresele de start aferente rutinelor de
tratare ale ntreruperii

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 183

Se consider urmtorul exemplu care folosete apelurile sistem de
citire / scriere caracter i ncheiere program. Problema care se rezolv
citet
ici).



AGA



TE
AS I
EXIT


Obs:
speci
alt v

aferen
(T



e un caracter de la tastatur atta timp ct este diferit de cifra 7 i la
codul su ASCII se adaug 0x20 (dac s-ar tasta doar litere mari ale
alfabetului englez atunci programul le transform n litere m
.ORIG x3000
LD R2, TERM; ncarc inversul codului ASCII al
cifrei 7 (-55)
LD R3, ASCII; ncarc diferena de cod ASCII dintre
litere mici i mari
IN: TRAP x23; Se citete un caracter de la tastatur
ADD R1, R2, R0; Se verific dac s-a tastat 7 n caz
afirmativ ncheindu-se execuia
programului
BRz EXIT ; S-a tastat 7 salt la apelul sistem de
ieire din program
ADD R0, R0, R3; Se adaug diferena de 0x20 la codul
ASCII al caracterului introdus de la
tastatur
TRAP x21 ; Se afieaz pe monitor noul caracter
obinut
BRnzp AGAIN; Se reia execuia pn se va tasta 7 de
la tastatur
RM: .FILL xFFC9 ; -7
C I: .FILL x0020 ; Diferena dintre litere mici i mari
: TRAP x25 ; Se ncheie execuia programului
.END
Codul ASCII pentru cifra 7 este 0x37=55 n zecimal. Trebuie
ficat c cifra 7 a fost aleas doar pentru test, putnd fi aleas oricare
aloare (caracter) de test.
Secvena urmtoare de cod reprezint coninutul rutinei de tratare
t apelului sistem de afiare caracter Output Service Routine
RAP 0x21).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
184 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
.ORIG x0430 ; Adresa de start a rutinei de tratare a
apelului TRAP 0x21
TryWrite LDI R1, CRTSR; Citete starea monitorului (registrul
CRTSR). Dac bitul cel mai
semnificativ este 1 atunci se nscrie
codul ASCII al caracterului de afiat n
registrul de date al monitorului.
BRzp TryWrite; Se testeaz bitul cel mai semnificativ
al registrului de stare
WriteIt STI R0, CRTDR; Se nscrie codul ASCII al caracterului
de afiat n registrul de date al
monitorului (registrul CRTDR)
; ----- Revenire din apelul sistem de afiare TRAP 0x21
Return LD R1, SaveR1; Restaureaz coninutul regi rilor R7 i
arcursul
LD R7, SaveR7

ST R7, SaveR7; Salveaz coninutul regitrilor R7 i
R1 posibil a fi modificai pe
parcursul rutinei de tratare
ST R1, SaveR1
; ----- Scrie caracter
t
R1 care au fost modificai pe p
rutinei de tratare

RET ;Transfer controlul napoi utilizatorului
CRTSR .FILL xF3FC
CRTDR .FILL xF3FF
SaveR1 .FILL 0
SaveR7 .FILL 0
.END


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 185

Figura 8.6. Etapele parcurse n urma apariiei unui apel sistem de citire caracter n
programul utilizator
Secvena urmtoare de cod reprezint coninutul rutinei de tratare
aferent apelului sistem de citire caracter cu ecou Character Input Service
Routine (TRAP 0x23). Figura 8.6 ilustreaz etapele majore parcurse din
momentul apariiei apelului i pn la revenirea din rutina de tratare. Pe
scurt, n rutina de tratare se desfoar urmtoarele subetape: se afieaz
caracterul special newline (deci implicit sunt incluse instruciunile de afiare
caracter), urmat de afiarea unui mesaj care solicit introducerea unui
caracter de la tastatur (sunt incluse instruciunile de afiare ir de
caractere). Urmeaz citirea propriu-zis de la tastatur iar apoi afiarea
ecoului i n final trecerea pe o nou linie.

.ORIG x04A0
; ----- Salveaz coninutul regitrilor care vor fi alterai la nivelul subrutinei
START S enire n
programul apelant (R7)
T R7, SaveR7 ; Salveaz adresa de rev
ST R1, SaveR1 ; Salveaz valorile regitrilor necesari
n rutina: R1, R2 i R3
ST R2, SaveR2
ST R3, SaveR3 ; trebuie restaurai naintea execuiei
instruciunii RET

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
186 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
; ----- Scrie caracter special newline
LD R2, Newline ; Se ncarc n R2 codul ASCII al
caracterului special newline
L1 LDI R3, CRTSR ; Verific starea perifericului dac
permite scrierea n registrul de date al
monitorului CRTDR este disponibil?
BRzp L1 ; CRTDR este disponibil
mnificativ al
Registrul
dac bitul cel mai se
registrului de stare (cel de semn
CRTSR
15
) este 1. Dac nu este nc
disponibil pentru afiare atunci se va
continua cu citirea strii acestuia.
STI R2, CRTDR ; Este permis afiarea caracterului
Newline la consol
; ----- Afieaz pe ecran mesajul de atenionare pentru citirea unui caracter
de la tastatur
LEA R1, Prompt ; Prompt reprezint adresa de start a
mesajului de atenionare
Loop LDR R0, R1, #0 ; ncarc n R0 caracter dup caracter
din mesajul de afiat
BRz Input ; Dac s-a ajuns la sfritul mesajului
trece la citirea caracterului de la
tastatur
L2 LDI R3, CRTSR ; Verific starea monitorului
BRzp L2
STI R0, CRTDR ; Periferic disponibil afieaz
caracterul curent al mesajului
ADD R1, R1, #1 ; Trece la urmtorul caracter din mesaj
BRnzp Loop ; Repet afiarea pn la sfritul
irului
; ----- Citire caracter de la tastatur
Input LDI R3, KBSR ; Verific starea tastaturii s-a apsat
vreo tast?
BRzp Input ; Registrul KBDR este disponibil dac
bitul cel mai semnificativ al registrului
de stare (cel de semn KBSR
15
) este
1. Dac nu este nc disponibil pentru

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 187
afiare atunci se va continua cu citirea
strii acestuia.
LDI R0, KBDR ; Preia caracterul apsat de la tastatur
n registrul R0
; ----- Afieaz pe ecran ecoul caracterului citit
L3 LDI R3, CRTSR
BRzp L3
STI R0, CRTDR ; Afieaz caracterul citit de la
tastatur pe monitor
; ----- Scrie caracter special newline trece la o nou linie
L4 LDI R3, CRTSR
BRzp L4
STI R2, CRTDR ; Mut cursorul pe ecran la o linie
nou
; ----- Reface coninutul regitrilor care au fost alterai la nivelul subrutinei
LD R1, SaveR1 ; Preluarea lui R1, R2 i R3 de la
adresele unde au fost salvai
LD R2, SaveR2
LD R3, SaveR3
LD R7, SaveR7 ; Restaurarea lui R7 la valoarea avut
la intrarea n rutina de serviciu
RET ; Revenirea din rutina de serviciu pe
prima instruciune n programul
apelant ulterioar TRAP 0x23
(echivalent cu: JMP R7)
; ----- Spaiul aferent datelor necesare rutinei de serviciu
SaveR7 .FILL 0x0000
SaveR1 .FILL
SaveR2
SaveR
0x0000
.FILL 0x0000
3 .FILL 0x0000
CRTSR .FILL 0xF3FC ; adresa de memorie a registrului de
stare al monitorului
CRTDR .FILL 0xF3FF ; adresa de memorie a registrului de
date al monitorului
KBSR .FILL 0xF400 ; adresa de memorie a registrului de
stare al tastaturii
KBDR .FILL 0xF401 ; adresa de memorie a registrului de

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
188 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
date al tastaturii
Newline .FILL 0x000A ; codul ASCII al caracterului special
newline
Prompt .STRINGZ "Input a character>" ; mesaj de atenionare
.END ; ncheierea secvenei de cod

oprirea
a semn
ura 5
aferent primelor sisteme de calcu
. U alizat
t de r este a sete
cesar pentru
efinire vent. La ora
te practic oprirea ceasului
calculator gaz t
aplicaiei care a rulat pe acesta) i s
are ru az i n
Secvena urmt od r tare
aferent apelu
de operare
toarele sub ial
elul sistem TRAP 0x21), urmat de afiarea unui
mesaj care atenioneaz asupra ncheierii aplicaiei utilizator i cedarea
registrului de control al mainii (MCR
15
) localizat n
memoria LC-3 la adresa 0xFFFF.

ul de control al mainii (MCR)

Se reamintete c oprirea sistemului de calcul presupune
unitii de control, deci anulare alului de tact care reprezint pulsul
sistemului (vezi capitolul 5, fig .8). Arhitectura setului de instruciuni
l conineau o instruciune special
(HALT) pentru oprirea sistemului lterior, proiectanii acestora au re
c ra folosit instruciune HA se iro LT i totodat, faptul c
e un cod de operaie pentru stocarea ei, care uneori poate fi n
a altor instruciuni (operaii) cu caracter mult mai frec d
actual, sistemele de calcul folosesc apeluri (rutine) sistem pentru anularea
semnalului de tact i implicit oprirea unitii de control. n cadrul LC-3 ISA,
prin ntreruperea TRAP 0x25 se urmre
sistemului, ns si , aflndu-ne ntr-un mulator (aplicaie software) i nu pe un
d, practic se opre e funcionarea simulatorului LC-3 (a
e pred controlul sistemului de operare
c le gestio eaz procesele aferente calculatorului gazd.
oare de c nutul rutinei de tra eprezint coni
lui sistem de ncheiere program i transfer control sistemului
Halt Service Routine (TRAP 0x25). Pe scurt, n rutina de
etape: se afieaz caracterul spec tratare se desfoar urm
newline (folosindu-se ap
controlului sistemului de operare (se folosete apelul sistem TRAP 0x22
pentru afiarea irului de caractere). Urmeaz apoi resetarea bitului cel mai
semnificativ al
.ORIG 0xFD70 ; Adresa de nceput a rutinei
ST R7, SaveR7 ; Salveaz adresa de revenire n
programul apelant (R7)
ST R1, SaveR1 ; R1 este folosit s stocheze temporar
registr
ST R0, SaveR0 ; R0 este folosit ca temporar n
operaiile din rutina de serviciu

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 189
; --
; -
a ceasului sistemului
caie de
aloarea modificat
a MCR
i n
rutin. Preluarea lui R0 i R1 de la
--- Afieaz pe ecran mesajul de atenionare pe linie nou
LD R0, ASCIINewLine
TRAP 0x21
LEA R0, Message
TRAP 0x22
LD R0, ASCIINewLine
TRAP 0x21
---- Resetarea bitului cel mai semnificativ al registrului de control al
mainii (MCR
15
) pentru oprire
LDI R1, MCR ; ncarc coninutul registrului de
control al mainii n R1. Registrul
fiind reprezentat de o lo
memorie este necesar accesul
indirect.
LD R0, MASK ; R0 = 0x7FFF, reprezint masca
pentru tergerea bitului 15 al MCR
AND R0, R1, R0 ; Ceilali bii ai registrului MCR rmn
nemodificai
STI R0, MCR ; Scrie n memorie v
; ----- Revenirea din rutina sistem dedicat opriri ceasului sistemului
LD R1, SaveR1 ; Restaurarea regitrilor altera
adresele unde au fost salvai
LD R0, SaveR0
LD R7, SaveR7 ; Restaurarea lui R7 la valoarea avut
la intrarea n rutina de serviciu
RET ; Revenirea din rutina de serviciu n
sistemul de operare (procesul printe
care a lansat n execuie simulatorul
LC-3).
; ----- Spaiul aferent datelor necesare rutinei de serviciu
ASCIINewLine .FILL 0x000A
SaveR0 .FILL 0x00000
SaveR1 .FILL 0x00000
SaveR7 .FILL 0x00000
Message .STRINGZ "Halting the machine."

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
190 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
MCR
itrilor care sunt distrui de ctre programul apelant
necesare ulterior. n cazul
arhitecturii LC-3 ISA, strategia caller-save impune salvarea lui R7
struciuni TRAP i de asemenea, salvarea lui R0
naintea apelului TRAP 0x23 (deoarec re a
stocarea codului ASCII al caracterulu
alt posibilitate, realist n cazul arh
regitri generali ai procesorului, pres
regitrii cu funcii speciale (adres d
registrul care pstreaz valoarea retur
uzuale (aritmetico-logice, etc).
l
acestei variante este c, rutina cunoate i va modifica,
uia
az, strategia de salvare a regitrilor se numete
rarea propriu-zis n (sub)rutin sunt
salvai toi regitrii care vor fi alterai, exceptndu-i pe cei care, chiar
dac sunt alterai, nu sunt necesari la nivelul programului apelant
(totui, acest lucru nu este ntotdeauna vizibil de la nivelul (sub)rutinei
apelate). nainte de revenirea din (sub)rutin, regitrii salvai iniial
sunt restaurai la valorile anterioare apelului. Opiunea callee-save
.FILL 0xFFFF ; Adresa de memorie a
registrului MCR
MASK .FILL 0x7FFF ; Masca necesar resetrii
bitului 15 al MCR
.END ; ncheierea secvenei de cod
8.2.2. SALVAREA I RESTAUREA REGITRILOR N CAZUL
RUTINELOR DE SERVICIU
Coninutul unui registru trebuie salvat dac registrul va fi modificat de
ctre rutina de serviciu iar valoarea acestuia va fi necesar i dup
ncheierea rutinei. Se pune ntrebarea cine salveaz valoarea registrului:
Apelantul rutinei de tratare (programul utilizator) care tie ce regitrii
sunt necesari dup ncheierea rutinei, dar nu tie ce regitrii sunt
modificai n rutin ? Salvrile efectuate la nivelul apelantului poart
numele de caller-save i presupune stocarea temporar n memorie
a coninutului reg
sau n rutinele apelate (dac este vizibil sau apriori cunoscut ceea ce se
modific n rutin) i valorile acestora sunt
naintea oricrei in
e zultatul cestuia presupune
i citit de la tastatur n R0). O
itecturilor cu numr ridicat de
upune evitarea folosirii acestor
e revenire, indicator de stiv,
nat din (sub)rutine) n operaii
sau
Rutina apelat (n acest caz cea de tratare a ntreruperii) ? Avantaju
regitrii pe care
dar nu cunoate ce regitrii vor fi necesari ulterior dup exec
rutinei. n acest c
callee-save. nainte de int

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 191
este utilizat n mod frecvent i n cazul apelurilor de subrutine (rutine
definite de programator / utilizator) nu doar n situaia rutinelor de
tratare a ntreruperilor.
cipiu
gulile de scop informeaz despre faptul c o
l, parametru al funciei etc.) este vizibil sau
c. Astfel, locul n care o entitate este vizibil este
n continuare se prezint un exemplu care dovedete necesitatea
a de revenire) de ctre programul apelant
i apel sistem (TRAP 0x23 n acest caz). Programul
tere (numerice) citite de la tastatur sub form
pcate nu se ntmpl acest lucru, mai mult,
nfinit. Greeala este provocat de faptul (ascuns
TRAP 0x23 modific valoarea lui R7 cu
R0, R0, R6 (0x3004). La revenirea din apel
ozitiv, se va executa saltul la AGAIN i se
infinit.
enire n programul apelant trebuie fcut n
at de rutin (incluzndu-l i pe cel recursiv), altfel
ul apelant i revenirea se face la infinit pe
c -una din rutinele apelate.
0
inary; n R3 se ncarc adresa de nceput a
tabloului de numere
ASCII; R6 conine valoarea -48 care trebuie
sczut din fiecare caracter (cifr) citit
determinarea
Iniializarea lui R7 cu 10
x23; Citete un caracter de la tastatur (n
II)



tatur
; Mai sunt elemente de citit ?
Salvarea i restaurarea regitrilor stau la baza unui prin
ndamental al programrii ce poart numele de reguli de scop n cadrul fu
limbajelor de nivel nalt. Re
i entitate de program (variab
ccesib o a il ntr-un anumit l
referit ca scopul entitii.
salvrii registrului R7 (adres
naintea execuiei unu
urmrete stocarea a 10 carac
ifr n de c e de la 0 la 9. Di
programul intr n bucl i
la prima vedere) c apelul sistem
adresa instruciunii ADD
R7 va avea aceast valoare, p
d, intrndu-se astfel n bucl reexecut apelul sistem, am
S rev alvarea adresei de
cazul oricrui apel imbric
tura spre program se pierde leg
aceeai instru iune ntr

.ORIG x300
LEA R3, B
LD R6,
de la tastatur pentru
valorii numerice a cifrei
LD
GAIN TRAP
R7, COUNT;
A
R0 se afl codul su ASC
ADD R0, R0, R6; Transform caracterul n numr
STR R0, R3, #0; Stocheaz numrul n tablou
ADD R3, R3, #1; Incrementeaz poziia n tablou
ADD R7, R7, -1; Decrementeaz contorul de elemente
ce mai trebuie citite de la tas
BRp AGAIN

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
192 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

ASCII .FILL xFFD0; Valoarea ASCII = -48
CO
Binary
NEXT


Ce mod stei secvene pentru ca la locaia Binary s
fie
.3
Subrutinele sunt seciuni de cod (fragmente de program) definite de
i care:
S l de memorie utilizator
R bine precizat (execut operaii bine definite de
c
at) de ctre un alt program utilizator (sau
apelant
L i instruciuni din subrutin se pred controlul
iunea succesoare apelului.
fer de rutinele de tratare a ntreruperilor prin faptul c
a sistemului de operare, nu necesit privilegii
rse hardware protejate.
E avoarea utilizrii subrutinelor:
R ie, a
c sar rescrierea lui. O consecin a acestui fapt l
rea numrului de erori care pot aprea la scrierea
ilor prin descompunerea unei probleme n
s imple i distribuirea sarcinilor ntre mai muli
p re realizeaz un anumit task, independent de
c ete lizibilitatea codului, el putnd fi mai uor de
u ectat.
BRnzp NEXT; S-au citit cele 10 elemente, salt la
ncheierea programului

UNT .FILL #10
.BLKW #10
HALT
.END
ificri trebuie aduse ace
stocate numerele (i nu codurile lor ASCII) citite de la tastatur ?
8 . SUBRUTINE
programator / utilizator
unt stocate n spaiu
ealizeaz o sarcin
tre programator)
e invocat (apel Est
subrutin) program
a ncheierea ultime
gramului apelant pe instruc pro
Subrutinele di
nu sunt parte component
speciale i nu fac uz de resu
xist cteva motive n f
eutilizarea, eficient din punct de vedere al timpului de execu
nece odului, fr a fi
e reprezint reduc
unui program.
Elaborarea algoritm
i s ubprobleme ma
rogramatori fieca
r eilali. n acest fel c
rmrit, depanat i cor

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 193
C losite funcii (subrutine) matematice, grafice, sau
rite caracteristici, sunt implementate i furnizate de
ctorii de sisteme software, sub forma funciilor de bibliotec.
Se impune ns respectarea ctorva cerine:
te, iar n caz c sunt mai muli de 4 acetia se depun pe
stiv. Rezultatul returnat de subrutine este transmis prin intermediul

mponente), revenirea fcndu-se pe instruciunea


imediat urmtoare apelului.
8.3.1. MECANISMUL DE APEL SUBRUTINE I REVENIRE
F ura 8 cuia unui program surs coninnd mai
multe seciuni de cod independente secvenele contigue din punct de
vedere al exec i W. Trebuie menionat c secvena de cod A
de cteva ori astfel nct ar fi recomandabil stocarea codului ntr-
, sc t i apelat repetat.
ele mai frecvent fo
cu dife
produ
Transmiterea parametrilor subrutinei apelate i returnarea rezultatului
de ctre aceasta subrutinei apelante (eventual programului principal)
se face prin regitrii sau memorie. De exemplu, n cazul procesorului
MIPS, n regitrii $a0, $a1, $a2, $a3 sunt transmii parametrii
subrutinei apela
regitrilor $v0 i $v1 dac este necesar.
Subrutinele trebuie s poat fi apelate din orice punct al programului
(sau subrutine co
ig .7. ilustreaz exe
uiei X, A, Y, Z
se repet
o subrutin ris o singur da


Figura 8.7. Execuia unui program surs: (a) fr subrutine prin
macroexpandarea
13
codului, acestora

(b) folosind subrutine i apelul repetat al

lui ut funciei n locul a
13
Repetarea (scrierea coninutu r inei sau pelului su).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
194 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software

Scopul principal al instruciunilor JSR/JMP este de a efectua un salt
ins
un
ad
op linking (pstrarea legturii cu programul apelant) cu
plicaii importante i asupra stivei de date aferent funciilor (vezi
capitolul 10). Diferenierea efectiv le dou i ni se face prin
bitul L (IR[11]) din atul instru ezi figu stfel dac L=0
instruciunea este lu salt n nat (se n programul
apelant).

necondiionat la o adres. Deosebirea dintre ele const n faptul c,
truciunea JSR reprezint mai mult dect un salt necondiionat, este chiar
apel de subrutin, ntruct presupune suplimentar i salvarea n R7 a
resei de revenire (PC-ul urmtoarei instruciuni) n programul apelant
eraie numit
im
ntre ce nstruciu
form ciunii (v ra 8.8). A
simp econdiio rmne

Figura 8.8. Formatul instruciunilor JS

n figura 8.8 este prezentat fo iu / JMP iar figura
8.9 ilustreaz modul de lucru al acesteia. Primii 4 i instruciunii sunt
0100 urmai de un bit L (L=1 specific automatului cu stri finite din
nitatea de control aferent arhitect instr iunea este un apel de
0. Ultimii 9 bii reprezint
egativ) la care se afl
ubrutina toarei instruc un n eg tru R7 se c
P r n o n c
struciunea urmtoare din programul apelant, PC-ul fiind
co
din
x emn a cmpului offset din formatul instruciunii de apel (PC
(PC) + S
R/JMP
rmatul instruc nii JSR
bii a
u urii LC-3 c uc
subrutin i nu un salt necondiionat) i 2 bii de
eplasamentul (adresa relativ pozitiv sau n d
s fa de adresa urm
C-u
i
ie
i. r is l n arc
valoarea
eja la
lui (ca e m me tul exe u i instruciunii JSR pointeaz
d in
incrementat n timpul fazei FETCH) vezi operaia 1 din figura 8.9. n PC
se ncarc adresa primei instruciuni din subrutina apelat, predndu-se
ntrolul acesteia vezi operaia 2 din figura 8.9. Adresa primei instruciuni
subrutina apelat se obine prin adugarea la valoarea PC-ului curent a
tensiei de s e
ext(IR[8:0])).


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 195

Figura 8.9. Mod in ul de lucru al struciunii JSR

n figura 8.10 este prezentat form iunilo
figura 8.11 ilustreaz modul de lucru al acesteia. Seman
JSRR / JMPR este similar cu cea a instruciunilor JS
deosebire constnd n faptul c adresa de apel / salt
primelor prin mod de adresare indexat, iar n cazul celor
de adresare direct. A perm
subrutinelor respectiv saltul necondi truciunile JSRR /
JMPR s nu se realizeze neaprat tate a instruciunii curente
(cazul JSR / JMP nt ap alturilor de tip NEAR la
lte zo iul de memorie utilizator
ri / salturi d
atul instruc r JSRR / JMPR iar
tica instruciunilor
R / JMP, singura
se obine n cazul
din urm prin mod
ite ca apelul ceast caracteristic important
plicat de ins ionat im
ntr-o vecin
/ s echivale elurilor
procesorul INTEL) ci i n a ne din spa
(apelu e tip . FAR)


Figura r JSRR/JMPR
P ii RR / PR s , urmai
e bitu la i rol ntre apel (L=1) i salt
necondiionat (L=0). o i doi b i IR[8:6] codific registrul
de baz folosit n adr Deplasamentul este obinut din cmpul index6
lt se obine prin
entul (lucru ilustrat
de etapa 2 din figura 8 n egistr rc valoarea PC-ului (care
8.10. Formatul instruciunilo
rimii 4 bii din formatul instruciun JS JM unt 1100
d l IR[11]=L cu ace de selecie
Urmt ri ii 0 iar bii
esare.
IR[5:0] extins cu 0 pn la 16 bii. Adresa de apel / sa
nsumarea coninutului registrului de baz cu deplasam
.11). r ul R7 se nca

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
196 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
n momentul execu struciunii JSRR indic spre instruciunea
l fazei
primei
struc se controlul acesteia vezi
peraia 3 din figura 8.11. Revenirea din subrutin n cazul instruciunilor
z cu ajutorul instruciunii RET, care restaureaz n
7 (adresa primei instruciuni din subrutina apelant,
succesoare a m similar cu ce n cazul instruciunilor
TRAP. ntruct n c ul instruciunilor JMP / JMPR nu se face apel ci doar
salt necondiionat rezult c nu se va face uz d instruciunea RET, n caz
contrar s-ar modifica n mod eronat semantica programului (pasul 1 din
figura 8.11 nu apare n cazul instruciunii JMPR .
Instruciunile JSRR / JMPR poart numele de instruciuni de apel /
salt cu mod de adresare indirect prin registru. Ele, ca de altfel toate
instruciunile de salt condiionat / necondiio at, apel direct / indirect
cauzeaz hazarduri de ramificaie n procesarea pipeline a instruciunilor.
etodele de soluionare implementate n pro ele actuale sunt fie
de dificil (ntruct adresele int se
fap
n
ge
pro
de
ce
co
Languages directe de funcii
prin se, prezena funciilor de bibliotec,
inclu dinamice de tip DLL, legarea dinamic realizat prin
pol ic superior pot fi
utilizate cu succes n predicia adreselor salturilor / apelurilor indirecte care,
actualmente, utili informaii de nivel semantic mai
sczut, precum codul obiect, etc. Practic, pierderea semanticii
e niv dup devine inacceptabil pentru noua
generaie de micr soare

iei in
urmtoare din programul apelant, PC-ul fiind incrementat n timpu
PC se ncarc adresa FETCH) vezi operaia 1 din figura 8.11. n
in iuni din subrutina apelat, predndu-
o
JSR / JSRR se realizea
PC valoarea aflat n R
pelului), mecanis l ntlnit
az
e
)
n
M cesoar
software bazate pe reorganizarea codului surs, dar mai ales hardware
bazate pe predicia dinamic a adreselor destinaie aferente instruciunilor de
salt. Dup cum se tie, predicia adreselor destinaie ale salturilor / apelurilor
directe este o problem extrem in
modific n mod dinamic) i actual iar soluiile propuse nu sunt nc
mulumitoare. n cadrul unei lucrri anterioare, autorul acestei cri a sesizat
tul c, nainte de a aborda efectiv problema prediciei ar trebui s
eleag n profunzime modurile n care aceste apeluri indirecte sunt
nerate prin compilare. Pentru aceasta, el dezvolt programe de test
prii, att procedurale ct i obiectuale, care conin corpuri suspectate
a genera apeluri i salturi indirecte n urma compilrii. Pe baza acestei
rcetri se extrag concluzii valoroase i deosebit de utile cu privire la
nstruciile din programele (limbajele) de nivel nalt (High Level
lturi (apeluri in ) generatoare ale unor astfel de sa
pointeri, construcii switch/ca
siv biblioteci
imorfism etc.). Toate aceste informaii de nivel semant
zeaz n majoritatea lor
adrese binare
codului d el nalt compilare,
oproce .

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 197

Figura 8. odul de lucru al 11. M instruciunii JSRR
n contin rezi emplu de folosire a unei subrutine
determin
u prin registrul
lta lui R0. Programul
urm tre regitrii R1 i R3. ntruct
cdere unui pre
peran ul tra n complement fa de 2), n cazul de fa, registrul
de
R3
reg
omp.

; Calculul com valorii stocate n registrul R0
; inverseaz fiecare bit al registrului
(se determin complementul fa de 1
a valorii stocate iniial n R0)
se adun 1 pentru a determina
complementul fa de 2
; revenirea din subrutin
uare se p nt un ex
mp definite de utilizator. Subrutina de la adresa 2sCo
etr complementul fa de 2 al unui numr transmis ca param
zu ntermediul registru R0, iar re tul este returnat tot prin i
rincipal lare renei din p rete calcu a dife
re zint de fapt o adunare cu negatul acestuia s a operand
d nsformat (o
R3 avnd rolul de scztor, nu va fi sczut ci va fi transmis ca argument
(parametru efectiv) subrutinei 2sComp. La revenirea din subrutin la
sczut (R1) se adaug rezultatul returnat de subrutina 2sComp (valoarea
). Evident c, pentru o funcionare corect a programului, dac valoarea
istrului R0 va fi necesar n continuare, atunci programul apelant trebuie
salveze coninutul lui R0 naintea apelului subrutinei 2sC s
plementului fa de 2 a
2sComp NOT R0, R0
ADD R0, R0, #1 ;
RET


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
198 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
; Apelul subrutinei din programul principal trebuie fcut din aceeai pagin
cu subrutina (mod de adresare direct)
; Se dorete ca = R1 - R3
; valoarea lui R3 este transmis ca
ent subrutinei 2sComp; se
R3 n R0
0
0 ; scderea se realizeaz prin adunarea
negatului scztorului la desczut
...
ETRILOR CTRE I DE LA
Transferul de informaie de la programul (subrutina) apelant() la
subrutina apelat i invers se realizeaz prin intermediul argumentelor i
respectiv al valorii returnate.
Argumentele reprezint una sau mai multe valori, transmise subrutinei
apelate prin intermediul regitrilor, necesare acesteia pentru a-i ndeplini
task-ul. Exemple de argumente la LC-3 ISA:
n subrutina 2sComp, R0 reprezint numrul ce trebuie negat (valoarea
care trebuie transformat n complement fa de 2).
n rutina de serviciu aferent apelului sistem OUT, R0 reprezint codul
ASCII al caracterului ce va fi afiat.
n rutina de serviciu aferent apelului sistem PUTS, R0 reprezint
adresa irului de caractere ce va fi afiat.
Valoarea returnat constituie rezultatul calculat de subrutin (un
numr sau o adres a unui tablou de numere sau de caractere). Exemple:
n subrutina 2sComp, valoarea negat (complementul fa de 2 a
valorii primite ca parametru) este transmis prin registrul R0.
n rutina de serviciu GETC, codul ASCII al caracterului citit de la
tastatur este returnat prin R0.
Pentru a putea folosi o subrutin, programatorul trebuie s cunoasc:
Adresa acesteia (valoare numeric sau simbolic etichet, care
identific prima instruciune din subrutin).
Ce realizeaz subrutina (scopul, funcia, rezultatul acesteia).
Aa cum s-a amintit anterior referitor la avantajul utilizrii
subrutinelor i distribuirea sarcinilor ntre programatori, un programator nu
lcularea valorii R4
ADD R0, R3, #0
argum
copiaz
JSR 2sComp ; apelul subrutinei pentru negarea
valorii din R
ADD R4, R1, R
8.3.2. TRANSFERUL PARAM
SUBRUTINE

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 199
trebuie s cunoasc neaprat cum funcioneaz subrutina (n interiorul su),
ci doar ce modificri sunt vizibile la nivelul strii arhitecturale a mainii
(procesorului), dup execuia subrutinei. De asemenea, trebuie tiut
argumentele i respectiv, dac exist, valoarea returnat.
8.3.3. SALVAREA I RESTAUREA REGITRILOR N CAZUL
SUBRUTINELOR. RUTINE (FUNCII) DE BIBLIOTEC
La fel ca i n cazul utilizrii rutinelor de serviciu aferente
ntreruperilor software, regitrii trebuie salvai i restaurai la valorile
anterioare apelului. n aproape toate cazurile de utilizare a subrutinelor este
folosit strategia callee-save, excepie fcnd salvarea regitrilor care
reprezint valoarea returnat. Sunt salvai toi regitrii care vor fi alterai pe
parcursul execuiei subrutinei, acest lucru nefiind vizibil la nivelul
apelantului. Restaurarea argumentelor de intrare n subrutin la valoarea
anterioar apelului este o practic uzual. Dac argumentele sunt transmise
ns subrutinei prin referin (adres) atunci valorile acestora pot fi
modificate n interiorul acesteia i s rmn aa la revenirea din subrutin
(pentru mai multe detalii vezi capitolul 12). Atenie ns, naintea apelului
oricrei subrutine folosind instruciunile JSR sau JSRR, sau naintea oricrui
apel sistem (instruciune TRAP) valoarea registrului R7 trebuie salvat, n
caz contrar revenirea nu se va mai face la nivelul apelantului.
Pe lng subrutinele definite de utilizator n programele de calcul se
ntlnesc biblioteci de rutine cu funcii specifice: formule matematice,
dedicate aplicaiilor grafice, aferente dispozitivelor periferice, anumitor
componente ale sistemului de calcul sau sistemului de operare. Rutinele de
bibliotec sunt definite n afara programului utilizator (independent de
acesta) i sunt apelate n programele utilizator. Pentru aceasta, n LC-3 ISA,
declararea n programul utilizator a adresei de start (de regul simbolice) a
unei rutine de bibliotec se face folosind directiva .EXTERNAL. Fiecare
rutin de bibliotec este caracterizat de propria tabel de simboluri. Link-
editorul este utilitarul (aplicaia) responsabil() cu rezolvarea (identificarea
corect) a fiecrei adrese declarat .EXTERNAL naintea crerii imaginii
executabile a aplicaiei. Comercianii de aplicaii software (sisteme de
operare, compilatoare, aplicaii dedicate, drivere pentru diferite componente
ale sistemului de calcul, etc.) pun la dispoziia utilizatorilor fiiere obiect
(precompilate) coninnd diverse rutine de bibliotec. Din motive de
proprietate intelectual nu se asigur codul surs al acestora. De asemenea,
trebuie ca n programul apelant s se realizeze apelul (cel mai probabil) prin

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
200 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
instruciuni JSRR, iar asamblorul i link-editorul s suporte declaraii de
etichete .EXTERNAL.
n conti
...
.EXTERNAL SQRT ; rutina matematic de
extragere a radicalului este
definit n alt modul, probabil
ment mai mare de
(cresctor sau
descresctor relativ la PC-ul
curent)
LD R2, SQAddr ; ncarc adresa de nceput a
AND R2, R2, x0
ADD R2, R2, x2


ADD R3,R3,-1
nuare este prezentat un exemplu care utilizeaz rutina de
bibliotec matematic de extragere a radicalului.

la un deplasa
256 adrese
...
subrutinei SQRT
JSRR R2, #0 ; realizeaz apelul indirect
...
SQAddr .FILL SQRT
8.4. EXERCIII I PROBLEME
1. Se consider urmtorul program scris n limbaj de asamblare LC-3:

.ORIG x3000
L1 LEA R1, L1
LD R3, P1
JSR L2
BRnzp NEXT
L2 LDR R0, R1, x16
ST R7, SAVER7
OUT
LD R7, SAVER7


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 201
BRz GLUE
ADD R1, R
BRnzp
ul sistemului ?

3. Se consider urmtorul program scris n limbaj de asamblare LC-3:


1, R2
L2
GLUE RET
NEXT LEA R1, L1
ADD R1, R1, #1
LD R3, P1
ADD R3, R3, #-7
JSR L2
HALT
P1 .FILL x12
.STRINGZ "SLaArMbUaLtToIrAiNFIe!rriCcaizt!ea!"
SAVER7 .BLKW 1
.END

a) Generai tabela de simboluri aferent acestui program.
b) Scriei codificarea binar a instruciunilor aflate la urmtoarele
adrese: x3000, x3004, x3008, x300B, x300E, x3012.
c) Ce afieaz programul ? De ce sunt necesare cele dou instruciuni
care l salveaz i restaureaz temporar pe R7 ?

2. Rspundei la ntrebrile:
a) Cte rutine de serviciu pot fi implementate prin intermediul
instruciunilor de apel sistem TRAP n cadrul arhitecturii LC-3 ? De
ce ?
b) De ce este necesar utilizarea unei instruciuni RET pentru revenirea
dintr-o rutin TRAP (de tratare a unei ntreruperi)? De ce nu poate fi
folosit n schimb o instruciune de salt necondiionat BRnzp ?
c) Cte accese la memorie se fac n timpul procesrii unei instruciuni
TRAP, presupunnd c ea a fost adus deja n registrul IR (s-a
efectuat faza FETCH) ?
d) Poate o rutin de tratare (nu doar cele implementate la LC-3 ISA ci
n cazul general) s apeleze o alt rutin de tratare ? n caz afirmativ,
exist vreo aciune special care trebuie realizat la nivelul rutinei
apelante ? Justificai.
e) Exist vreun apel sistem care s reporneasc ceas

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
202 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
.ORIG x3000
LEA R0, DATA
AND R1, R1, #0
ADD R1, R1, #9
LOOP1
ADD R2, R0, #0
ADD R3, R1, #0
LOOP2
JSR SUB
ADD R2, R2, #1
ADD R3, R3, #-1


SUB LDR R5, R2, #0
NOT R4, R5
ADD R4
LDR R6, R2, #1

ONT RET
.END

dresa de la eticheta
DATA conin 10 numere ntregi n complement fa de 2. Aceste numere
trebu

4. In
OUT
BRnzp DONE
BRP LOOP2
ADD R1, R1, #-1
BRP LOOP1
HALT
DATA .BLKW #10
, R4, #1
ADD R4, R4, R6
BRZP CONT
STR R5, R2, #1
STR R6, R2, #0
C
Presupunem c locaiile de memorie ncepnd cu a
ie setate de utilizatorul programului nainte de execuie. Ce realizeaz
programul ? Care este relaia dintre valorile iniiale i cele finale de la
adrese r le espective ?
tenia urmtorului program este de a afia valoarea 5 pe consol
(ecran). Din nefericire nu se ntmpl acest lucru. De ce ? Rspundei n
cel mult 10 cuvinte.

.ORIG x3000
JSR A

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 203
A
DON
AS
B
tre
JSR i JSRR ?
Exist vreo instruciune care face acelai lucru ca i instruciunea
c) Care este scopul apelur
d) na din
salvarea i restaurarea elul i revenirea din subrutine.
Ce anume (dac exist ceva) este greit n urmtoarea subrutin ?

DO



Id
su
ins

AND R0, R0, #0
ADD R0, R0, #5
JSR B
RET
E HALT
CII .FILL 0x0030
LD R1, ASCII
ADD R0, R0, R1
RET
.END

5. Rspundei la ntrebrile:
a) Care sunt diferenele dintre instruciunile TRAP i JSRR ? Dar din
b)
JMP ?
ilor sistem ?
Care este difere tre strategiile caller-save i callee-save n
regitrilor la ap
e)
JSR DOTHIS
JSR DOTHAT
RET
6. n tabelul de mai jos sunt ilustrate coninuturile regitrilor arhitecturii
LC-3 nainte i dup execuia instruciunii de la adresa 0x3010.
entificai instruciunea memorat la adresa 0x3010. De notat c, exist
ficient informaie n tabelul specificat care s personalizeze
truciunea.
nainte Dup
R0 xFF1D xFF1D
R1 x321C x321C
R2 x2F11 x2F11
R3 x5321 x5321
R4 x331F x331F
R5 x1F22 x1F22
R6 x01FF x01FF
R7 x341F x3011
PC x3010 x3220

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
204 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
N 0 0
Z 1 1
P 0 0

Completai instruciunea lips n csuele libere:

15 0
x3010:

7. Cele dou secvene de mai jos sunt asamblate separat. n urma acestui
proces sunt detectate dou erori: una n faza de asamblare i una n faza
de link-editare. ncercuii fiecare greeal i stabilii n ce faz a fost
detectat.

.EXTERNAL
SQRT
.ORIG 0x3000
LD R0, VALUE
JSR SQRT
ST R0, DEST
HALT
VALUE .FILL 0x30000
DEST .FILL 0x0025
.END


.ORIG 0x3200
SQRT ADD R0, R0, #0
;codul necesar
implementrii funciei de
extragere a rdcinii
ptrate
;returneaz rezultatul n R0
RET
.END


8.
a) Completai tabe .

LEA R6, STACKBASE
ADD R6, R6, #-1
; IN
TRAP x21
la de simboluri pentru urmtorul program

.ORIG x3000
LEA R0, PROMPT
TRAP x22 ; PUTS
AND R1, R1, #0
LOOP TRAP x20

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 205
ADD R3, R0, x-A ; negai (valoarea
n complement
a
fa de 2) a
SCII
tasta
nter"

JSR

INPUTDONE ADD
BRz DONE
OOP2

ADD
BRp LOOP2
NE x25 ; HALT
.BLKW #50
.END
Tabela de S
codului A
pentru
"E
BRz INPUTDONE
PUSH
ADD R1, R1, #1
BRnzp LOOP
R1, R1, #0
L JSR POP
TRAP x21
R1, R1, #-1
DO TRAP

PUSH ADD R6, R6, #1
STR R0, R6, #0
RET

POP LDR R0, R6, #0
ADD R6, R6, #-1
RET

PROMPT .STRINGZ "Please enter a sentence: "
STACKBASE

imboluri
Eticheta (label) Adresa










U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
206 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware - Software
b) Ce realizeaz programul anterior ? Explicai rolul fiecrui registru folosit:
R0, R1, R3 i R6. Mai exist i ali regitrii care i modific valoarea pe
parcu
25 de caractere. De
ex
BRz CONT
nzp AGAIN2
CON


rsul execuiei programului ?

9. n secvena de program de mai jos lipsesc cteva instruciuni. Semantica
programului este urmtoarea: utilizatorului i este cerut s i introduc
numele. Programul memoreaz mesajul Hello, urmat de numele
introdus, ca un ir de caractere ncepnd de la adresa indicat de simbolul
HELLO i-l afieaz pe consol. Se presupune c utilizatorul a ncheiat
introducerea numelui su de la tastatur prin Enter, al crui cod ASCII
este 0x0A. Numele este restricionat la maximum
emplu, presupunnd c utilizatorul a introdus de la tastatur numele
John, atunci pe consol va aprea mesajul:
Please enter your name: John
Hello, John
Se cere s se introduc n secven instruciunile lips.

.ORIG x3000
LEA R1, HELLO
AGAIN LDR R2, R1, #0
BRz NEXT
ADD R1, R1, #1
BRnzp AGAIN
NEXT LEA R0, PROMPT
TRAP 0x22 ; PUTS
__________________
AGAIN2 TRAP 0x20 ; GETC
TRAP 0x21 ; OUT
ADD R2, R0, R3
__________________
__________________
BR
T AND R2, R2, #0
__________________
LEA R0, HELLO
TRAP 0x22 ; PUTS

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
ntreruperi software la nivel low. Apeluri de subrutine directe i indirecte. Reveniri.
Salvarea i restaurarea regitriilor. Strategiile caller-save respectiv callee save 207

NEGENT ; -0x0A
PROM T
HELLO

i sunt corecte.

BAC
;
NEX
BAC
;
NEX
;
SUB_
K
CRTS
CRTD
TEST
TRAP 0x25 ; HALT
ER .FILL 0xFFF6
P .STRINGZ Please enter your name:
.STRINGZ Hello,
.BLKW #25
.END

10. Programului de mai jos i lipsesc cteva instruciuni importante! Dac
sunt completate corect atunci programul va afia pe ecran mesajul:
ABCFGH. Completai instruciunile lips astfel nct programul original
s realizeze ceea ce i-a propus. n fiecare spaiu lipsete exact o
instruciune iar toate celelalte instruciun
.ORIG x3000
LEA R1, TESTOUT
K_1 LDR R0, R1, #0
BRz NEXT_1
TRAP x21
__________________
BRnzp BACK_1
T_1 LEA R1, TESTOUT
K_2 LDR R0, R1, #0
BRz NEXT_2
JSR SUB_1
ADD R1, R1, #1
BRnzp BACK_2
T_2 __________________
1 __________________
LDI R2, CRTSR
__________________
STI R0, CRTDR
RET
R .FILL xF3FC
R .FILL xF3FF
OUT .STRINGZ "ABC"
.END

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s

9. STIVA STRUCTUR. PRINCIPIU DE
FUNCIONARE. OPERAII AFERENTE (PUSH &
POP)
9.1. STRUCTURA DE DATE DE TIP STIV
9.1.1
de hardware (de ISA aferent unui
proce
urii sau mai bine, un resort care reine monede una
peste ll
. PRINCIPIU DE FUNCIONARE
Conceptul de stiv vine s ncheie partea de introducere n tiina i
ingineria calculatoarelor strict legat
sor). Din punct de vedere fizic, stiva reprezint o important structur
de memorare folosit pentru implementarea la nivel hardware a concepte
software (mecanisme) fundamentale: apelul funciilor, recursivitate.
Definitoriu pentru stiv reprezint modul de acces la elementele sale i nu
modul specific de implementare. Din punct de vedere software stiva este o
structur de date abstract definit prin regulile de inserare i extragere a
datelor n / din ea, ambele operaii fiind efectuate la acelai capt. Principiul
de memorare este de tip LIFO (last-in first-out), adic ultimul inserat va fi
primul extras din stiv, elementele extrase aprnd practic n ordine invers
fa de cum au fost introduse.. Analiznd stiva pe o perioad ndelungat se
poate spune, chiar dac nu este tot timpul adevrat, i c primul introdus n
stiv este ultimul care va fi scos.
9.1.2. IMPLEMENTARE HARDWARE I SOFTWARE.
Din punct de vedere fizic, cel mai intuitiv mod de a nelege stiva l
reprezint o stiv de farf
cealalt. i ntr-un caz i n ce alt accesul se face doar la elementul
(farfuria / moneda) din vrf. Dac se dorete accesul la oricare alt element
trebuie extrase din stiv elementele din vrf pn la cel solicitat.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 209

Figura 9.1. Exemplu de stiv. Model fizic
n figura 9.1 sunt prezentate operaiile cu stiva din perspectiva unui
ode
tragerea
monedei din vrful stivei (a monedei etichetate 1996). Noul vrf al stivei are
eticheta 1998.
n continuare (vezi figura 9.2) este descris implementarea n
alctuit dintr-un num aflai n poziii bine
determ
din punct de vedere al procesrii informaiei ca fiecare scriere n
memorie depunere n stiv s implice transferul tuturor informaiilor
existente la acel moment ntre locaii succesive de memorie).
n figura 9.2 sunt prezentate operaiile cu stiva din perspectiva unui
model hardware (stiva compus din regitrii). Ordinea operaiilor este de la
stnga la dreapta. Iniial stiva este vid (Funcia Empty ilustreaz dac
exist elemente n stiv. n acest caz ea va returna Da). Prima operaie o
reprezint inserarea n stiv a valorii 18 (Funcia Empty va genera Nu).
Urmeaz trei depuneri succesive n stiv (fcnd referire la figura 9.1 se
poate spune c resortul se comprim). Se depun n stiv pe rnd valorile: 31,
5 i apoi 12 (evident c funcia Empty returneaz Nu). Colul din dreapta al
figurii ilustreaz coninutul stivei dup dou operaii succesive de extragere
m l fizic (un resort cu monede). Ordinea operaiilor este de la stnga la
dreapta. n faza iniial stiva fiind vid resortul este relaxat (necomprimat).
Prima depunere n stiv este cea a monedei de etichet 1995. Urmeaz alte
trei depuneri: nti moneda etichetat 1982, apoi cea 1998 i ultima 1996.
Imaginea cea mai din dreapta reprezint configuraia stivei dup ex
hardware a stivei de monede, folosind regitrii. n acest caz, stiva este
r de regitrii hardware
inate (fixe). La depunerea a cte unui element n stiv dac stiva nu
este goal atunci informaia este translatat (n jos) spre baza stivei (copiat
dintr-un registru n altul), iar n vrful stivei se copiaz noua valoare
inserat. Se observ c implementarea stivei de monede n hardware
folosind regitrii implic deplasarea informaiei ntre regitrii
inacceptabil din punct de vedere al memoriei implementat fizic (este
ineficient

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
210 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
din stiv (a elementelor din vrful stivei nti 12 i apoi 5). Trebuie
observat c vrful stivei (TOP top of the stack) indicator la ultima
locaie ocupat din stiv, rmne tot timpul n acelai loc. ntruct n stiv
mai rmn valorile 31 i 5 funcia Empty va genera Nu.


F
gur registru.

igura 9.2. Implementarea stivei de monede n hardware folosind regitrii
Implementarea software a stivei are la baz ideea de a nu permite
deplasarea informaiei n memorie la fiecare acces la stiv. Doar vrful
stivei poate s-i modifice poziia, el fiind reinut ntr-un sin

Figura 9.3. Implementarea software a stivei
Prin convenie la LC-3 ISA [Patt03] registrul R6 reine adresa vrfului
stivei (reprezint un indicator spre ultima locaie ocupat din stiv). La alte
arhitecturi (Intel, MIPS) acest registru se numete SP (stack pointer vezi
capitolul 12 pentru clarificarea noiunii de pointer).


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 211
9.1.3. OPERAII AFERENTE (PUSH & POP)
Asupra unei stive se definesc cteva operaii, dintre care cele mai
importante sunt:
1. Depune un element pe stiv (PUSH);
2. Extrage un element din stiv (POP);
Cele dou operaii se realizeaz n vrful stivei. Astfel, dac se scoate
un element din stiv, atunci acesta este cel din vrful stivei i n continuare,
cel pus anterior lui pe stiva ajunge n vrful stivei. Dac un element se pune
pe stiv, atunci acesta se pune n vrful stivei i n continuare el ajunge n
vrful stivei. La eliminarea tuturor elementelor din stiv aceasta devine vid.
Din punct de vedere software implementarea unei stive poate fi fcut
pri ei
cu ajutorul capetele listei simplu n Exista dou posibiliti:
a. Nodul spre care indic (pointeaz) variabila prim este baza stivei, iar
Procesoarele RISC ns (denumite i
ini load/store) implementeaz operaiile cu stiva prin instruciuni de
scriere

ush
rementeaz indicatorul de stiv (se
modific TOS).

Obs: De remarcat c, dei n cazul unei stive fizice (de farfurii de
exemplu), la extragerea din stiv elementul dispare, n urma operaiei
de POP din stiv data se preia din memorie ntr-un registru destinaie,
dar informaia rmne la adresa respectiv. Actualizarea vrfului stivei

ntr-o list simplu nlnuit. Trebuie ns identificate baza i vrful stiv
lnuite.
nodul spre care indic variabila ultim este vrful stivei;
b. Nodul spre care pointeaz variabila prim este vrful stivei, iar nodul
spre care pointeaz variabila ultim este baza stivei.
n continuare este descris implementarea n LC-3 ISA a codului
aferent operaiilor de baz de depunere n stiv (Push) i de extragere din
stiv (Pop). De menionat c, procesoarele Intel au definite instruciuni cu
celai nume PUSH reg i POP reg. a
ma
i citire din memorie (store pentru Push) i (load pentru Pop).
P
ADD R6, R6, #1 ; incrementeaz valoarea indicatorului de stiv
(se modific TOS).
STR R0, R6, #0 ; memoreaz (depune n stiv) data aflat n
registrul R0.
Pop
LDR R0, R6, #0 ; citete din memorie data de la adresa
specificat de TOS
ADD R6, R6, #-1 ; dec

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
212 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
este operaia ce marcheaz extragerea unui element din stiv
permindu-se n continuare ncrcarea altuia la locaia recent
eliberat.
Condiiile de eroare ce pot s apar sunt:
Underflow (ncercarea de a extrage un element dintr-o stiv vid).
Overflow (ncercarea de a depune pe stiv plin un element).
Pentru evitarea apariiei acestor condiii de eroare trebuie monitorizat
adresa vrfului stivei (top of stack TOS). n cadrul LC-3 ISA, vrful stivei
reine tot timpul adresa ultimei locaii ocupate din stiv (fiecare operaie
Push incrementeaz TOS iar fiecare operaie Pop l decrementeaz). Astfel
naintea fiecrei operaii de depunere n stiv trebuie nti actualizat vrful
stivei i apoi scris informaia la noua adres (noul TOS) iar la fiecare
extragere din e actualizeze
TOS. Stiva cre

stiv trebuie, dup citirea datei din stiv, s s
te n capacitate (n locaii utilizate) n jos. La anumite
procesoare (MIPS pe platform Linux) stiva crete n capacitate de la adrese
mari spre adrese mici (deci registrul SP va fi decrementat la fiecare operaie
Push i incrementat la fiecare Pop).
Practic naintea operaiei de depunere n stiv trebuie testat condiia
de overflow iar la extragere trebuie testat condiia de underflow. Schema
logic de mai jos verific dac naintea unei extrageri stiva este vid i
marcheaz n registrul R5 rezultatul (1 dac apare underflow i 0 dac se
poate face extragerea, iar n R0 se depune valoarea din vrful stivei).


Figura 9.4 Testarea condiiei de underflow

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 213
Astfel prin introducerea instruciunilor care testeaz condiiile de
eroare codul echivalent instruciunilor PUSH i POP se complic. n
continuare sunt descrise dou subrutine care implementeaz cele dou
operaii cu stiva.

Codul aferent operaiei POP cu verificarea condiiei de Underflow
;
in
se consider implementarea software a stivei din figura 9.3 n care valoarea
dicatorului de stiv (R6) pentru stiva vid este 0x3FFF.

e stiv n cazul n care
stiva vid)
ADD R2, R6, R1 ; Se verific dac stiva este vid
BRz FAIL ; n caz afirmativ se trece la setarea
valoarea din vrful acesteia
i pot fi depuse alte elemente) i marcheaz n
regist

PUSH
ADD R2, R6, R1 ; Compar stack pointer-ul cu x3FFF
BRz FAIL
POP LD R1, EMPTY ; EMPTY = -0x3FFF (inversul
indicatorului d
condiiei pentru eroare
LDR R0, R6, #0 ; Stiva nefiind vid se ncarc n R0
ADD R6, R6, #-1 ; Se decrementeaz indicatorul de stiv
AND R5, R5, #0 ; Se indic SUCCESS prin resetarea
registrului R5
RET
FAIL AND R5, R5, #0 ; FAIL: R5 = 1
ADD R5, R5, #1 ; Se ncarc n R5 valoarea 1 pentru a
marca eroare la descrcare din stiv
RET
EMPTY .FILL xC001

Codul aferent operaiei PUSH cu verificarea condiiei de Overflow
; Se consider implementarea software a stivei din figura 9.3 cu 5 valori care
pot fi depuse n stiv. Indicatorul de stiv (R6) pentru stiva vid este
0x3FFF. Secvena de mai jos verific dac naintea unei depuneri pe stiv
aceasta este plin (nu ma
rul R5 rezultatul (1 dac apare overflow i 0 dac se poate face
depunerea, valoarea care va fi scris n vrful stivei fiind cea aflat n
registrul R0).
LD R1, MAX ; MAX = -x4004

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
214 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
ADD R6, R6, #1 ; Vrful stivei va fi incrementat, stiva
crescnd n capacitate
STR R0, R6, #0
AND R5, R5, #0 ; SUCCESS: R5 = 0
RET
FAIL AN #0 ; FAIL: R5 = 1
AD #1
RE
MAX FFC
9.1.4. MODUL DE LUCRU PRIN NTRERUPERI HARDWARE.
apel
se va vedea n continuare al tratrii ntreruperilor imbricate (apariia unei
ntr ri n c (tratare) a altei ntreruperi, atunci cnd
este permis). D s-a mai specificat i n capitolul 8, o ntrerupere
hardware poate fi considerat un apel de subrutin (spre necunoscut din
punct de vedere al programatorului dar nu i al procesorului i al sistemului
de operare) de cron de un eveniment extern.
Modul de lucru prin ntreruperi hardware urmrete tratarea eficient
din punct de vedere al performanei de procesare a interaciunilor dintre
dispozitivele periferice i procesor. De cte ori dorete un serviciu de la
rocesor, dispozitivul extern, prin interfaa sa, lanseaz un semnal de
ntrer
mul principal urmnd s
int
servic tware instruciunilor TRAP la LC-3
IS
multe lul
pro LC-3 ISA, IRET la
Intel
imediat u
n care, ere
din p e
ntr-un ex
D R5, R5,
D R5, R5,
T
.FILL 0xB
Una din facilitile mecanismului de stiv o reprezint posibilitatea
rii funciilor imbricate (recursivitate direct sau indirect) i dup cum
erupe hiar rutina de serviciu
up cum
clanat asin
p
upere (de exemplu, cnd se introduce un caracter de la tastatur sau
cnd monitorul / imprimanta sunt gata pentru a afia un nou caracter). n
urma recepionrii semnalului de ntrerupere, procesorul ncheie ciclul
instruciunii aflate n execuie i prsete progra
re n rutina de serviciu a ntreruperii respective (similar rutinelor de
iu aferente ntreruperilor sof
A) pentru satisfacerea cererii respectivului dispozitiv extern. n cele mai
cazuri, la ncheierea rutinei de tratare a ntreruperii se pred contro
gramului utilizator (cu ajutorul instruciunii RTI la
sau JR $31 la MIPS), reluarea procesrii fcndu-se cu instruciunea
rmtoare celei pe care a aprut ntreruperea. Pot aprea ns cazuri
n timpul tratrii unei ntreruperi apare o nou cerere de ntrerup
art a altui dispozitiv periferic. Dac este permis ntreruperea (vezi
emplu ulterior) atunci se intr n rutina de tratare a noii ntreruperi.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 215
La nche
se va pro programului
princ l
v
c proce
fiecare d
(instruci
ente rare dar critice: incendii sau alte calamiti, situaii n
sistemelor de calcul.
Fi i un dispozitiv
xtern. Cnd respectivul periferic vrea s ntrerup activitatea procesorului
i s
in momentul apariiei semnalului de ntrerupere INT pn
n mo
itul protocol hardware de acceptare a ntreruperii
desf
le verific activarea ntreruperilor la finele
ultimului ciclu aferent instruciunii n curs de execuie [Mus97,
(n cazul LC-3 ISA [Patt03] ntre faza STORE RESULT a
za FETCH instruciune a celei care
reruperea INT de ctre procesor acesta i
ecuie dup care, dac nu exist
ere de magistral mai prioritare, nu va
RAP, vectorul de ntrerupere reprezint un index n
ierea acesteia se revine n rutina de tratare a primei ntreruperi care
cesa pn la terminare, n final cedndu-se controlul
ipa .
A antajul modului de lucru prin ntreruperi hardware const n faptul
sorul nu mai trebuie s interogheze la anumite intervale de timp
ispozitiv periferic, putnd executa alte sarcini n acest timp
uni utile).
Dintre cauzele apariiei ntreruperilor hardware se disting urmtoarele:
Evenimentele externe sunt nesigure i au o apariie neregulat (de
exemplu, sosirea pachetelor de date din reea, apsarea tastelor).
Operaiile cu dispozitivele externe dureaz foarte mult (de
exemplu, transferul datelor pe/de pe disc n/din memorie) iar
procesorul poate face altceva pe perioada transferului (cazul
transferurilor cu acces direct la memorie).
Evenim
care este necesar oprirea
gura 9.5 prezint interaciunea dintre procesor
e
i cear acestuia un serviciu, prin intermediul interfeei sale (controller)
va seta semnalul de ntrerupere extern (INT=1). Toate aciunilor executate
de ctre procesor d
mentul procesrii primei instruciuni din rutina de tratare a ntreruperii
formeaz aa num
urat n urmtoarele etape succesive:
1. n general, procesoare
Lun05]
instruciunii aflate n execuie i fa
urmeaz). Odat sesizat nt
va termina instruciunea in curs de ex
activat o cer ntrerupere sau de
face faza FETCH a urmtoarei instruciuni ci va trece la pasul 2.
2. Identificarea ntreruperii: procesorul va iniializa aa numitul ciclu de
achitare a ntreruperii. Pe parcursul acestui ciclu extern va genera
un semnal de rspuns (achitare) a ntreruperii INTA (interrupt
acknowledge) spre toate interfeele de intrare - ieire. Ca urmare a
recepionrii INTA interfaa care a ntrerupt va furniza procesorului
prin intermediul bus-ului de date o succesiune de 8 bii reprezentnd
vectorul de ntrerupere (vector). Acest vector difer pentru fiecare
periferic n parte, identificndu-l ntr-un mod unic. Similar cu cazul
instruciunilor T

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
216 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
tabela cu adresele de start a rutinelor de serviciu. Informaia de la
locaia sp
tratare a ntr
ecificat reprezint adresa primei instruciuni din rutina de
eruperii, valoare care se ncarc n registrul PC. Vectorilor
de ntrerupere diferii i vor corespunde adrese de rutine diferite.
3.
motiv cade
sarcina celui care scrie rutina de serviciu s salveze (folosind accese
in stiva PUS
tragere
4. rutinei de
ile de cond
ra practic o a

Procesorul va salva pe stiv PC-ul aferent instruciunii imediat
urmtoare instruciunii executate de ctre procesor din programul
principal (adresa de revenire), pentru a putea ti la finele rutinei de
tratare a ntreruperii unde s revin exact n programul principal. De
asemenea, sunt salvate pe stiv codurile de condiie (N, Z, P) vezi
exemplul din figurile 9.79.10. Acest fapt se poate dovedi insuficient
avnd n vedere c in cadrul rutinei de serviciu pot fi alterai anumii
regitri interni ai procesorului alterare care poate fi chiar
dezastruoas la revenirea n programul principal. Din acest
in
de depunere H) respectiv s returneze corespunztor
(folosind accese de ex din stiva POP) aceti regitrii.
Dup ncheierea tratare a ntreruperii, instruciunea RTI
restaureaz codur iie i vechiul PC (adresa de revenire).
t Este necesa l instruciune de revenire deoarece
instruciunea RET preia doar adresa de revenire din registrul R7 i o
depune in PC, nu si codurile de condiie.

Figura 9.5. Modul de lucru prin ntreruperi hardware
n cazul n care mai mult de un dispozitiv extern dorete s ntrerup
activitatea procesorului n acelai timp, procesorul trebuie s asigure un
mecanism de prioritizare a cererilor de ntrerupere (deservirea perifericelor
respective).
n continuare, se exemplific folosind registrul de stare al tastaturii
semnalul INT de
rea unei taste de ctre
utilizator. La majoritatea dispozitivelor de intrare / ieire registrul de stare
conin
(KBSR keyboard status register) cum se genereaz
ntrerupere a activitii procesorului prin apsa
e pe lng bitul Ready (care marcheaz disponibilitatea perifericului
n generarea unei ntreruperi) i un bit de validare a ntreruperii de ctre
procesor (Interrupt Enable) vezi figura 9.6. Practic la apsarea unei taste
bitul Ready al KBSR este setat (devine 1). La fel, n cazul n care circuitele

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 217
electronice asociate monitorului au ncheiat cu succes afiarea ultimului
caracter, bitul Ready al CRTSR (registrul de stare al monitorului) devine 1.
Cu toate c ntreruperea este solicitat de ctre dispozitivul periferic, n
rea
KBSR
dispo e a fi ntrerupt de ctre respectivul periferic. Unele
pro
ntrer nu deine un astfel de registru.
Da
Read
activi
suficient ca
uti
litate, procesorul nu poate fi ntrerupt, fr acceptul acestuia. Bitul 14 al
(IE) poate fi setat sau ters de ctre procesor, n funcie de
nibilitatea acestuia d
cesoare dein un registru de validare a ntreruperilor numit masc de
uperi (Interrupt Mask). LC-3 ISA
c procesorul accept s fie ntrerupt atunci, n momentul n care bitul
y este setat se genereaz semnalul INT (cerere de ntrerupere a
tii procesorului).
Se observ c: INT = IE AND Ready. Practic, nu e
lizatorul s apese o tast dac procesorul nu accept s fie ntrerupt (fiind
de exemplu, ntr-o rutin de serviciu neinteruptibil, mai prioritar), dar de
asemenea, nu e suficient ca procesorul s valideze ntreruperile ci trebuie ca
i ceva s se ntmple (se apas o tast, se introduce un CD n unitatea
CD-ROM spre citire, trebuie imprimat un text pe ecran sau imprimant,
etc.).


F 9.6. Gene cererii periferi igu rarea cului de ntrerupere a activitii procesorului
n continuare sunt prezentate o secven de ipostaze care justific
n cazul tratrii ntreruperilor hardware imbricate. In
gura 9.7 programul principal A execut instruciunea de adunare ADD de la
adres
ra

necesitatea stivei
fi
a 0x3006, moment n care este ntrerupt de ctre perifericul B.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
218 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

Figura 9.7. incipal A execut i tr 006
cnd perifericul B
La a nalului INT, pr es de
adunare ADD, salveaz pe stiv ad arei instruciuni din
programul principal (PC=0x3007) i co ri e de
rezultatul adunrii i ncarc n PC valoa i de ntrerupere, citete
din memorie de la adresa respectiv adresa primei instruciuni din rutina de
controlul rutinei de
Programul pr ns uciunea ADD de la adresa 0x3
l ntrerupe
pariia sem oc orul ncheie instruciunea
resa urmto
du le de condiie tocmai setat
rea vectorulu
tratare (0x6200) pe care o ncarc n PC, prednd
serviciu.


Figura 9.8. Protocolul de achitare a ntreruperii paii 2 i 3

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 219

Rutina de serviciu aferent ntrer
conine 17 instruciuni de la adresa 0x
execuiei instruciunii AND (vezi figura 9.9) de la adresa 0x6202
dispozitivul C trim

uperii provocate de dispozitivul B
6200 la adresa 0x6210. n timpul
ite procesorului o cerere de ntrerupere.

ciunii AND din rutina de serviciu a
lui B
Figura 9.9. Instantaneu cu execuia instru
perifericu

nainte de lui d t
perifericului C (vezi figura 9.10), sunt salvate n stiv adresa instruciunii
din rutina perife rea
(PC=0x6203) i c e
serviciu aferent pe pla
de instruciuni.

preluarea controlu e ctre rutina de serviciu aferen
ricului B, urmtoare celei pe care a aprut ntrerupe
odurile de condiie (regitrii booleeni N, Z i P). Rutina d
sat la adresa 0x6 rifericului C este 300 i conine 22

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
220 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

Figura 9.10. Instantaneu cu stiva, progra
315
C,
presupune extragerea din stiv att a codurilor de condiie ct i a adresei
perifericul C. n continuare sunt
serviciu aferent perifericului B.
mul principal i cele dou rutine de
serviciu

Execuia instruciunii RTI (return from interupt) de la adresa 0x6
(vezi figura 9.11), ultima din rutina de tratare aferent perifericului
instruciunii succesoare AND-ului pe care a aprut ntreruperea de la
executate instruciunile din rutina de


Figura 9.11. Revenirea din rutina de serviciu aferent perifericului C

Execuia instruciunii RTI (return from interupt) de la adresa 0x6210
(vezi figura 9.12), ultima din rutina de tratare aferent perifericului B,
presupune extragerea din stiv att a codurilor de condiie ct i a adresei

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 221
instruciunii succesoare ADD-ului pe care a aprut ntreruperea de la
perifericul B. n continuare sunt executate instruciunile din programul
principal. n acest moment se observ cum indicatorul de vrf al stivei
revine pe poziia iniial (dinaintea apariiei ntreruperii provocate de
perifericul B) cnd stiva era liber.


Figura 9.1
n figura 9.
apariia ntreruper de cele
fost detaliate prin intermediul figurilor
este liber, programul principal A exec
adresa 0x3006, re de
ntrerupere. La finele fazei de re R
(procesorul acce efect
acesteia), sunt salvate n a in
programul A condi ei
instruciuni din rutina de tr e a ntre l B
cu adresa
ta perifericului B, dispozitivu ite
procesorului o c t
aferente instruciunii A orul e
protocolul de achitare a acesteia), sunt iun
urmtoare AND-ului din rutina de servi
condiie, cedndu-se controlul primei i
ntreruperii provocate de perifericul C
instruciunii RTI de la adresa 0x6315, u
perifericului C, presupune extragerea din stiv ie
ct i a adresei i rut
2. Efectul instruciunii RTI asupra stivei
13 se prezint sintetic un instantaneu cu etapele parcurse la
ilor provocate dou periferice (B i C), i care au
9.7-9.12. La momentul iniial stiva
ut instruciunea de adunare de la
moment n care perifericul B lanseaz o cere
Scrie ezultat aferente instruciunii ADD
pt ntreruperea, undu-se protocolul de achitare a
stiv adres struciunii urmtoare ADD-ului din
i codurile de ie, cedndu-se controlul prim
atar ruperii provocate de perifericu
(etapa marcata cu 1). n timpul exe iei instruciunii AND de la
0x6202 din rutina de serviciu aferen l C trim
erere de ntrerupere. La finele fazei de Scriere Rezulta
ND (proces accepta ntreruperea, efectundu-s
lva sa te n stiv adresa instruc ii
ciu a perifericului B i codurile de
nstruciuni din rutina de tratare a
(etapa marcata cu 2). Execuia
ltima din rutina de tratare aferent
att a codurilor de condi
nstruciunii succesoare AND-ului pe care a ap

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
222 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
ntrerupere marcheaz practic etapa cu numru
unile din rutina de serviciu
a de la perifericul C. Aceasta l
3). n continuare sunt executate instruci aferent
perifericului B. Execuia instruciunii RTI de la adresa 0x6210, ultima din
rutina de tratare a t
a codurilor de condiie ct i a adresei in DD-ului pe
erife
numrul 4. n continuare sunt execu
principal ca si cum nimic nu s-ar fi nt lat, cu o oarecare ntrziere din
punct de vedere a execuie
se observ cum indicatorul de vrf a
(dinaintea apariiei ntreruperii provoca B) cnd stiva era
liber. Totui anu v au fo
figureaz ca libere.

ferent perifericului B, presupune extragerea din stiv at
struciunii succesoare A
care a aprut ntreruperea de la p ricul B, marcnd practic etapa cu
tate instruciunile din programul
mp
l timpului de al programului A. n acest moment
l stivei revine pe poziia iniial
te de perifericul
mite locaii n sti st afectate, chiar dac acum ele

Figura 9.13. Instantaneu care sintetizeaz et r

9.2. OPERAII ARITMETICE F


O aplicabilitate important a m
implementarea mainilor virtuale. De re itecturi folosesc n
locul regitrilor o i numesc
ddres
caz sunt simple: ADD, MUL. Execuia l
ultimelor dou locaii ocupate, execuia p unrii sau nmulirii
apele parcurse la apariia ntreruperilo
periferice de la cele dou
OLOSIND STIVA
ecanismului stivei o reprezint
gul, aceste arh
stiv pentru operanzii surs i destinaie (se ma
arhitecturi fr operanzi zero-a s machine). Instruciunile n acest
or presupune extragerea din stiv a
ropriu-zis a ad

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 223
cu cei doi operan ulta
Instruciunile PUSH, POP, ADD, MUL,
dar nu arhitecturii gazd pe care ruleaz
ISA). Codul aferent operaiilor implica ciuni sunt
scrise prin intermediul unor rutine formate din instruciuni ale arhitecturii
gazd. Aceste rut m e
reprezint de fapt semnale de contro icroarhitecturale)
folosite de ctre a
la nivelul mainii virtuale.
Pentru exem ider
= (A+B)(C+D). Dac A reine valoarea ste
egal cu 3 i D este egal cu 2, s se memo

a) Evaluarea siei p o arhi
nn c L ire
ss
valuar ) este
urmtorul:
LD R1, B
ADD R0, R0, R1
LD R2, C
LD R3, D
ADD R2, R2, R3

ADD
POP E

zi aflai n stiv, rez tul fiind apoi depus napoi n stiv.
NEG, etc. aparin mainii virtuale
aceasta (n cazul de fa LC-3
te de respectivele instru
de
ine nu pot fi alterate ( odificate) de ctre programator. El
l (componente m
rhitectura gazd pentru declanarea operaiilor care au loc
plificare se cons urmtoarea expresie de calculat: E
25, B conine valoarea 17, C e
reze rezultatul n E.
expre e tectur cu trei operanzi:

Presupu d C-3 ISA pune la dispoziie o instruciune de nmul
(notat cu MUL), atunci ntr-o arhitectur cum este LC-3 (three-addre
machine) codul surs pentru e ea expresiei E = (A+B)(C+D

LD R0, A
MUL R0, R0, R2
ST R0, E
b) Evaluarea expresiei pe o arhitectur cu zero operanzi (bazat pe
stiv):

PUSH A
PUSH B
PUSH C
PUSH D
ADD
MUL

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
224 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Un exemplu foarte des folosit n sistemele de calcul moderne l
stituie maina virtual Java (JVM). Aceasta reprezint un model
tract de arhitectur de calcul destinat exec
con
abs uiei unui program scris ntr-
un limbaj independent de main (bytecode Java).
-
- asigur
-
include un program counter (PC) i trei ali regitri
(instruciune) din zona de cod care va fi

evaluare
sintactice ].
form
parantezele rotunde. Ordinea de evaluare a expresiilor compuse este
det
r
- precedena op

n care o ntr-
o ex
n ie are forma: operand
perator operand
e

Interacioneaz att cu sistemul de operare ct i cu arhitectura
hardware a sistemului gazd
Unul din avantajele majore l constituie faptul c
portabilitatea aplicaiilor Java (implementarea browser-elor JVM).
Componentele de baz ale mainii virtuale Java:
o Regitri
folosii pentru a administra stiva. ntruct JVM este o arhitectur
bazat pe stiv rezult necesitatea unui numr redus de regitri.
o Bytecodul este stocat n zona de cod. Registrul PC indic spre
urmtorul bytecod
executat de JVM. Parametrii pentru instruciunile bytecod
(metode), ca i rezultatele executrii instruciunilor bytecod
(rezultatele returnate de metode) sunt stocate pe stiv.
o Stiva este folosit i pentru a menine contextul fiecrei metode
invocate, numit stack frame. Pentru a administra stack frame-ul
(contextul), se folosesc regitrii optop, frame i vars. Parametrii
instruciunilor bytecod precum i rezultatele execuiei acestor
instruciuni sunt memorate n stiv.
O alt aplicabilitate important a mecanismului stivei se regsete n
a expresiilor (aritmetice, simbolice, relaionale) din cadrul analizei
component a compilatoarelor [Gol97
Pentru evaluarea unei expresii aritmetice compilatorul o aduce la o
bazat pe forma polonez postfixat n care au fost desfiinate
erminat de:
- utilizarea parantezelo
eratorilor
Notaia polonez (sau postfixat) este un mod de scriere a expresiilor,
rdinea operatorilor i a operanzilor este schimbat fa de cea di
presie uzual.
notaia uzual (numit i infix) o expres
o
n notaia postfixat (polonez) expresia este scris sub forma:
op rand operand operator.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 225
De
a +
(a
a -

eva iilor fr a utiliza paranteze. Astfel, o expresie polonez
poa rin ur parcurgere a sa. Pentru evaluarea unei
exp po de valori reale. Ori de
cte ori ntlnim n expresie un operand, valoarea lui este introdus n stiv.
Daca ntlnim un operator atunci se extrag dou valori din vrful stivei, care
sunt, de fapt, cei doi operanzi, se aplic operatorul asupra valorilor extrase i
rez momentul n care s-a terminat parcurgerea
exp presiei este n vrful stivei (i stiva conine
9.3. CONVERSIA INFORM EI DIN FORMAT ASCII N
ZECIMAL
Conversia informaiei n sistemele de calcul este necesar pentru a
facilita transmiterea acesteia dintr-o form prietenoas pentru utilizator spre
procesare ntr-o form prietenoas pentru calculator. Conversia informaiei
din format ASCII n format decimal trebuie fcut ntruct rutinele de
intrare a informaiei n calculator (citirea de la tastatur sau din fiiere)
preiau datele n format ASCII (caractere, nu valori numerice). De asemenea,
ieirea informaiei din sistem se face n acelai format. Spre exemplificare se
consider urmtorul program scris n limbaj de asamblare LC-3.

TRAP 0x23 ; ntrerupere software pentru citirea de la
tastatur
ADD R1, R0, #0 ; transfer codul ASCII al caracterului
citit n R1
TRAP 0x23 ; ntrerupere software pentru citirea de
la tastatur
ADD R0, R1, R0 ; adun cele dou informaii citite
(codurile ASCII)
exemplu:
b devine n notaie polonez a b +
- b) * c devine a b - c *
b * (c + d) devine a b c d + * -
Avantajul notaiei poloneze este acela c indic ordinea corect a
lurii opera
te fi evaluat p tr-o sing
se poate folosi o stiv resii n notaie lonez
ultatul este depus n stiv. n
resiei, rezultatul final al ex
valoare). doar aceast
AI

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
226 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
TRAP 0x21 ; afieaz caracterul al crui cod ASCII
se afl n R0
TRAP 0x25 ; HALT ntrerupere care marcheaz
ncheierea programului

Dac utilizatorul introduce succesiv valorile 2 i apoi 3 rezultatul
afiat pe ecran va fi caracterul e. Explicaia este urmtoarea: codul ASCII
al caracterului 2 este 0x32, cel al caracterului 3 este 0x33 rezultnd n
registrul R0 valoarea (0x32 + 0x33) = 0x65, iar caracterul cu acest cod
ASCII este e.
9.3.1. CONVERSIA DIN ASCII N BINAR
Exemplul din paragraful anterior este ns valabil doar dac se citesc
de la tastatur numere alctuite dintr-o cifr. n continuare va fi prezentat o
secven de program care permite conversia unui ir de caractere ntr-un
numr alctuit din mai muli digii. Se consider astfel c, de la tastatur se
citete irul de caractere "259" i se stocheaz ntr-o zon de memorie, de
unde va fi luat fiecare caracter n parte, transformat n digit i prelucrat
pentru generarea numrului final. Etapele conversiei sunt urmtoarele:
Se convertete primul caracter al irului (cel mai semnificativ n
acest caz 2) n digitul corespunztor (se scade valoarea 0x30) i se
nmulete cu 100.
Se convertete al doilea caracter al irului (n acest caz 5) n digitul
corespunztor i se nmulete cu 10.
Se convertete al treilea caracter al irului (n acest caz 9) n digitul
corespunztor. Dac numrul ar fi avut mai muli digii trebuia iniial
identificat lungimea irului, iar aflarea fiecrei cifre continua pn la
cifra unitilor.
Se adaug toate cele trei numere obinute la fiecare pas.
Una din operaiile amintite anterior i necesar n procesul de
conversie o reprezint nmulirea. ntruct arhitectura LC-3 ISA nu dispune
de o instruciune de nmulire trebuie gsit o alternativ prin care s se
poat realiza nmulirea unui digit cu 100 i apoi nmulirea unui digit cu 10.
O abordare simplist ar consta n adunri repetate (se adun digitul respectiv
de 100 de ori), variant ineficient totui. O a doua variant o reprezint
adunarea numrului 100 cu el nsui de valoarea digitului respectiv ori (mai
eficient dect varianta anterioar ntruct se fac mai puine adunri
digitul fiind n mod clar <10). Chiar i aceast a doua variant se poate

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 227
realiza printr-un artificiu. Dect s se efectueze un numr necunoscut de
adunri se apeleaz la o tabel de cutare folosit n cazul nmulirii. Astfel,
fiecare intrare n aceast tabel va conine un numr (multiplu de 100) ntre
0 i 900 inclusiv, digitul reprezentnd indexul n intervalul (0-9) n tabel.

Entry 0: 0 x 100 = 0
Entry 1: 1 x 100 = 100
Entry 2: 2 x 100 = 200
etc.

Secvena de cod asamblare LC-3 pentru cutarea n tabel este
urmtorul:

; se nmulete coninutul lui R0 cu 100, folosind tabela de cutare;
LEA R1, Lookup100 ;R1 = adresa de baz a tabelei
ADD R1, R1, R0 ;se adaug la adresa de baz
indexul aflat n R0
LDR R0, R1, #0 ; se citete locaia de memorie
de la adresa calculat n R1
...
Lookup100 .FILL 0 ; intrarea 0 reine valoarea
0*100=0
.FILL 100 ; intrarea 1 reine valoarea
1*100=100
.FILL 200 ; intrarea 2 reine valoarea
2*100=200
.FILL 300 ; intrarea 3 reine valoarea
3*100=300
.FILL 400 ; intrarea 4 reine valoarea
4*100=400
.FILL 500 ; intrarea 5 reine valoarea
5*100=500
.FILL 600 ; intrarea 6 reine valoarea
6*100=600
.FILL 700 ; intrarea 7 reine valoarea
7*100=700
.FILL 800 ; intrarea 8 reine valoarea
8*100=800
.FILL 900 ; intrarea 9 reine valoarea
9*100=900


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
228 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Rutina de conversie complet din ASCII n decimal
; Buffer-ul de trei digii se numete ASCIIBUF.
; R1 indic numrul de digii care trebuie convertii. Conversia se va face de
la cifra unitilor spre sute de la cel mai puin semnificativ spre cel
semnificativ.
; Rezultatul sub forma unui numr zecimal este depus n R0.

ASCIItoBinary AND R0, R0, #0 ; iniializare rezultat
ADD R1, R1, #0 ; testeaz numrul de digii
rmai pentru conversie
; dei pare s nu fac nimic,
instruciunea anterioar seteaz
bitul de condiie
BRz DoneAtoB ; se sare la eticheta care
marcheaz ultima instruciune din
rutin dac nu mai sunt digii de
convertit (bitul Z a fost setat pe 1
de adunarea anterioar)
;
LD R3, NegZero ; R3 = -0x30 se pregtete
decrementarea codului ASCII al
caracterului cu inversul codului
cifrei 0
LEA R2, ASCIIBUF ; R2=adresa de baz a primului
element din ir (ASCIIBUF)
ADD R2, R2, R1 ; R2 indic dup caracterul de
convertit (n prima faz chiar
ultimul)
ADD R2, R2, #-1 ; R2 indic n faa caracterului
de convertit
LDR R4, R2, #0 ; citete din tabel caracterul de
convertit
ADD R4, R4, R3 ; convertete caracterul n digit
ADD R0, R0, R4 ; adaug digitul (cifra
unitilor) la numrul final
;
ADD R1, R1, #-1 ; decrementeaz numrul de
digii care mai trebuie convertii,
cu implicaii implicite i asupra
citirii din buffer-ul de caractere

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 229
BRz DoneAtoB ; se sare la eticheta care marcheaz
ultima instruciune din rutin dac
nu mai sunt digii de convertit
ADD R2, R2, #-1 ; R2 indic spre digitul zecilor
LDR R4, R2, #0 ; citete din tabel caracterul de
convertit
ADD R4, R4, R3 ; convertete caracterul n digit
LEA R5, Lookup10 ; R5 reine adresa tabelei cu zeci
(multiplii de 10)
ADD R5, R5, R4 ; se determin ofsetul n tabela
zecilor -> R5
LDR R4, R5, #0 ; n R4 se depune multiplul de 10
respectiv
ADD R0, R0, R4 ; se adaug la uniti i zecile
aferente numrului de convertit
;
ADD R1, R1, #-1 ; decrementeaz cu 1 numrul de
digii care mai trebuie convertii
BRz DoneAtoB ; se sare la eticheta care marcheaz
ultima instruciune din rutin dac
nu mai sunt digii de convertit
ADD R2, R2, #-1 ; R2 indic spre digitul sutelor
LDR R4, R2, #0 ; citete din tabel caracterul de
convertit
ADD R4, R4, R3 ; convertete caracterul n digit
LEA R5, Lookup100 ; R5 reine adresa tabelei cu sutele
(multiplii de 100);
ADD R5, R5, R4 ; se determin ofsetul n tabela
sutelor -> R5
LDR R4, R5, #0 ; n R4 se depune multiplul de 100
respectiv
ADD R0, R0, R4 ; se adaug la numrul deja format
i contribuia sutelor
;
DoneAtoB RET ; revenirea din rutina de conversie
NegZero .FILL 0xFFD0 ; -0x30 inversul codului ASCII al
caracterului 0.
ASCIIBUF .BLKW 4 ; se aloc 4 spaii pentru irul de
caractere de trei digii i pentru
terminatorul NULL
Lookup10 .FILL 0

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
230 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
.FILL 10
.FILL 20
...
Lookup100 .FILL 0
.FILL 100
...
9.3.2. CONVERSIA DIN ZECIMAL N ASCII
ntruct rezultatul oricrui program numeric va fi una sau mai multe
valori care se doresc a fi afiate, este absolut necesar i conversia invers
din zecimal n ir de caractere. Afiarea n LC-3 se poate face apoi folosind
ntreruperea software PUTS TRAP 0x22 (pentru ntreg irul) sau OUT
TRAP 0x21 (pentru un singur caracter). Se consider spre exemplificare un
rezultat pe trei digii. n acest caz, operaiile aritmetice ce trebuie efectuate
sunt cele de mprire cu 100 pentru obinerea fiecrui digit n parte i
adunarea la acesta codul ASCII al caracterului 0 0x30. mprirea n
acest caz se realizeaz prin scderi repetate a valorii 100 din numrul
respectiv pn devine strict mai mic dect 100. Numrul de scderi
reprezint de fapt digitul cutat corespunztor sutelor. n continuare se
scade 10 din numrul rmas pn se ajunge la o valoare strict mai mic
dect 10. Numrul de scderi reprezint digitul cutat corespunztor
zecilor. Numrul rmas reprezint chiar cifra unitilor.
Primul pas l reprezint verificarea semnului numrului. Semnul este
scris n buffer urmnd ca, dac numrul este negativ s fie transformat ntr-
unul pozitiv.

Rutina de conversie din decimal n ASCII
; R0 reprezint un numr ntreg de trei cifre din intervalul -999 i +999.
; n buffer-ul ASCIIBUF se nscrie pe prima poziie semnul urmat de trei
digii n format ASCII.

BinaryToASCII
LEA R1, ASCIIBUF ; R1 adresa irului de caractere
care reine rezultatul
ADD R0, R0, #0 ; se testeaz semnul numrului
BRn NegSign ; dac este numr negativ se sare la
secvena care scrie semnul n

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 231
buffer i transform numrul ntr-
unul pozitiv.
LD R2, ASCIIplus ; preia n R2 codul ASCII al
simbolului +
STR R2, R1, #0 ; scrie + pe prima poziie n buffer-
ul cu rezultatul
BR Begin100 ; numrul fiind pozitiv se trece
direct la conversie
NegSign LD R2, ASCIIneg ; preia n R2 codul ASCII al
simbolului -
STR R2, R1, #0 ; scrie - pe prima poziie n buffer-
ul cu rezultatul
NOT R0, R0 ; instruciunea curent i
urmtoarea determin
complementul fa de 2 al
numrului aflat n R0 (transform
numrul din negativ n pozitiv)
ADD R0, R0, #1
Begin100 LD R2, ASCIIoffset ; n R2
se adaug codul ASCII al
caracterului 0
LD R3, Neg100 ; n R3 se ncarc inversul lui 100
pentru scderi repetate
Loop100 ADD R0, R0, R3 ; scad 100 din numrul original
pn obin un numr mai mic dect
0
BRn End100 ; dac rezultatul este mai mic dect
0 nseamn c am sczut prea mult
(o dat n plus)
ADD R2, R2, #1 ; n R2 se calculeaz digitul de
pe poziia sutelor incrementat la
fiecare scdere
BR Loop100 ; continui i mai scad 100
End100 STR R2, R1, #1 ; memorez digitul sutelor n buffer
pe poziia a doua dup semn.
LD R3, Pos100
ADD R0, R0, R3 ; restabilesc valoarea corect mai
mic dect 100 n R0 prin
adunarea valorii 100 la rezultatul
scderii care s-a fcut o dat n
plus

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
232 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
;
LD R2, ASCIIoffset ; n R2 se adaug codul ASCII al
caracterului 0
LD R3, Neg10 ; n R3 se ncarc inversul lui 10
pentru scderi repetate
Loop10 ADD R0, R0, R3 ; scad 10 din numrul format doar
din zeci i uniti pn obin un
numr mai mic dect 0
BRn End10 ; dac rezultatul este mai mic dect
0 nseamn c am sczut prea mult
(o dat n plus)
ADD R2, R2, #1 ; n R2 se calculeaz digitul de pe
poziia zecilor incrementat la
fiecare scdere
BR Loop10 ; continui i mai scad 10
End10 STR R2, R1, #2 ; memorez digitul zecilor n buffer
pe poziia a treia dup semn i
digitul sutelor
ADD R0, R0, #10 ; restabilesc valoarea corect mai
mic dect 10 n R0 prin adunarea
valorii 10 la rezultatul scderii care
s-a fcut o dat n plus
;
LD R2, ASCIIoffset ; n R2 se adaug codul ASCII al
caracterului 0
ADD R2, R2, R0 ; se convertete digitul unitilor n
caracter
STR R2, R1, #3 ; memorez digitul zecilor n buffer
pe poziia a patra dup semn,
digitul sutelor i dup digitul
zecilor
RET ; revenirea din rutina de conversie
ASCIIplus .FILL 0x2B ; codul ASCII al simbolului +
ASCIIneg .FILL 0x2D ; codul ASCII al simbolului -
ASCIIoffset .FILL 0x30 ; codul ASCII al simbolului 0
Neg100 .FILL 0xFF9C ; inversul valorii 100 (pentru
scderi repetate ale sutelor)
Pos100 .FILL 100
Neg10 .FILL 0xFFF6 ; inversul valorii 10 (pentru scderi
repetate ale zecilor)


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 233
9.4. EXERCIII I PROBLEME
1. Care sunt caracteristicile definitorii ale stivei? Care este rolul
indicatorului spre vrful stivei (stack pointer)? Ce operaii cu stiva
cunoatei i cum sunt ele implementate din punct de vedere al accesului
la memorie? Exist anumite condiii (cazuri speciale) care trebuie
tratate?

2. Se consider un ir de intrare pe stiv o list de elemente care sunt
ncrcate pe stiv n ordinea stabilit de program (programator). De
exemplu, pentru urmtoarele operaii efectuate la nivelul stivei:

PUSH A, PUSH B, POP, PUSH C, PUSH D, POP, PUSH E, POP, POP,
PUSH F, PUSH G, PUSH H, PUSH I, PUSH J, POP, PUSH K, POP,
POP, POP, PUSH L, POP, POP, PUSH M

irul de intrare este urmtorul: ABCDEFGHIJKLM. irul de ieire
reprezint totalitatea elementelor care se extrag din stiv n ordinea
stabilit de program (programator).
a) Care este irul de ieire pentru irul de intrare specificat anterior?
Indicaie: BD...

b) Dac irul de intrare este ZYXWVUTSR, creai o secven de
operaii cu stiva (push i respectiv pop) astfel nct irul de ieire s fie
YXVUWZSRT.

3. Se reamintete c o arhitectur fr operanzi (zero-address machine)
reprezint o arhitectur bazat pe stiv n care toate operaiile aritmetico-
logice sunt realizate folosind valorile din vrful stivei. Pentru aceast
problem, se presupune c ISA proprie permite urmtoarele operaii:
PUSH M depune n vrful stivei valoarea stocat la adresa de
memorie M.
POP M extrage valoarea aflat n vrful stivei i o depune n
memorie la adresa M.
OP Extrage primele dou valori aflate n vrful stivei i execut
operaia aritmetico-logic specificat asupra celor dou valori.
Rezultatul este ncrcat napoi pe stiv.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
234 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Pentru aceast problem opcode-urile (OP) necesare sunt: ADD i
MUL.
a) Scriei n limbaj de asamblare secvena de cod care calculeaz
expresia:
x = (A * ( ( B * C ) + D ) )
- ntr-o arhitectur fr operanzi de genul celei anterior specificate
- ntr-o arhitectur cu trei operanzi de genul LC-3 ISA, dar care
ncorporeaz suplimentar i instruciunea de nmulire MUL.
b) Specificai cte un avantaj i respectiv un dezavantaj al fiecrui tip de
main din cele anterior descrise.

4. Se consider cele dou operaii de depunere n stiv Push i respectiv
de extragere din stiv Pop. Operaia Push Rn depune n vrful stivei
valoarea coninut n registrul specificat (Rn). Operaia Pop Rn extrage
valoarea din vrful stivei i o depune n registrul specificat Rn. Mai jos
este descris un instantaneu cu cei opt regitrii ai arhitecturii LC-3 nainte
i dup execuia a ase operaii cu stiva. Trebuie menionat c patru din
ase operaii nu sunt complet specificate. Completai n locul celor patru
linii goale cu numele regitrilor corespunztori pentru ca instantaneul s
fie corect.

PUSH R4
PUSH __
POP __
PUSH __
POP R2
POP __

NAINTE de
execuie
DUP de
execuie
R0 0x0000 0x1111
R1 0x1111 0x1111
R2 0x2222 0x3333
R3 0x3333 0x3333
R4 0x4444 0x4444
R5 0x5555 0x5555
R6 0x6666 0x6666
R7 0x7777 0x4444


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Stiva structur. Principiu de funcionare. Operaii aferente (PUSH & POP) 235
5. Se consider urmtoarele operaii realizate la nivelul stivei:

PUSH A, PUSH B, POP, PUSH C, PUSH D, POP, PUSH E, POP,
POP, PUSH F

a. Care este coninutul stivei dup ultima depunere PUSH F?
b. n care moment de timp stiva conine numrul maxim de elemente?
c. Fr a elimina vreunul din elementele rmase pe stiv de pe urma
operaiilor anterioare, care va fi coninutul stivei dup execuia
urmtoarelor operaii?

PUSH G, PUSH H, PUSH I, PUSH J, POP, PUSH K, POP, POP,
POP, PUSH L, POP, POP, PUSH M

6. Rspundei la ntrebrile:

a) Care sunt cele mai uzuale operaii cu stiva i care este modul lor de
lucru ? Restricii ce pot s apar.
b) Cum este utilizat stiva n mecanismul de ntreruperi hardware ?

7. Cu ajutorul structurilor de date dinamice implementai urmtoarele
operaii asupra unei stive de date avnd elemente numere ntregi:

o Creare_stiva(); - creeaz o stiv nou (vid).
o Empty(stiva); testeaz dac stiva primit ca parametru este vid,
returnnd 1 n caz afirmativ i 0 dac stiva nu este
vid.
o Push(stiva, element); depune elementul specificat ca al doilea
parametru pe stiva specificat de ctre
primul parametru.
o Pop(stiva); extrage i returneaz elementul din vrful stivei primit
ca parametru.
o Top(stiva); permite accesul la elementul din vrful stivei fr ns
a-l elimina din stiv. Returneaz respectivul element.
o Full(stiva); testeaz dac stiva este plin returnnd 1 n caz
afirmativ i 0 n caz contrar.
Att funciile Pop ct i Top necesit testarea condiiei ca stiva primit ca
parametru s nu fie vid.

8. Implementai o main virtual bazat pe stiv (zero-address machine),
folosind ca i arhitectur de baz (gazd) LC-3 ISA: instruciuni,

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
236 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
regitrii cu nume i funciile stabilite (R6 stack pointer, etc.).
Instruciunile mainii virtuale vor fi: OpAdd, OpMult, OpNeg, Push M,
Pop M. Implementai toate aceste instruciuni i rulai programele din
subcapitolul 9.2 i evaluai timpul de execuie (eventual numr de
instruciuni aferente arhitecturii gazd executate) n ambele situaii.

9. Implementai ntr-un program de nivel nalt (C, C++, Java) urmtoarea
cerin: Se citete dintr-un fiier o expresie aritmetic n care operanzii
sunt simbolizai prin litere mici (de la a la z) iar operatorii sunt
+,-,*,/ cu semnificaia cunoscut. Se pot folosi i parantezele
rotunde: ( i ). Programul trebuie s verifice dac expresia este
corect din punct de vedere sintactic (parantezele trebuie s se nchid
corect, s nu existe doi operatori sau operanzi unul dup cellalt,
expresia s nu se ncheie cu un operator). Se va ine cont de urmtoarele
indicaii: o expresie (S) este alctuit din termeni (T), separai prin +
sau -; un termen este alctuit din factori (F) separai prin * sau /;
un factor este sau o liter mic sau o expresie cuprins ntre paranteze.

10. Implementai ntr-un program de nivel nalt (C, C++, Java) urmtoarea
problem: Se citete dintr-un fiier o expresie aritmetic n care
operanzii sunt simbolizai prin litere mici (de la a la z) iar operatorii
sunt +,-,*,/,( i ) cu semnificaia cunoscut. Se cere s se
converteasc aceast expresie ntr-o expresie n forma polonez
(postfixat) vezi subcapitolul 9.2.

11. Implementai ntr-un program de nivel nalt (C, C++, Java) urmtoarea
problem: Dndu-se o expresie n forma polonez (postfixat), realizai
programul care calculeaz expresia utiliznd numai instruciuni de
atribuire cu un singur operator. Se vor introduce variabilele auxiliare x
1
,
x
2
, , x
n
, unde n reprezint numrul operaiilor care apar n expresie. S
se verifice aplicaia pentru diverse expresii i pentru diverse valori
aferente fiecrui operand (simbol).


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s

10. FACILITI ALE MAINII PENTRU
IMPLEMENTAREA N HARDWARE A
FUNCIILOR DIN PROGRAMELE DE NIVEL
NALT. STIVA DE DATE AFERENT
FUNCIILOR
10.1. OBINEREA CODULUI OBIECT PENTRU O
ARHITECTUR DAT
Limbajele de programare de nivel nalt sunt independente de maina
(microarhitectura hardware) pe care se proceseaz. Nivelul hardware este
abstractizat din punct de vedere al limbajului (operaiile nu depind de
arhitectura setului de instruciuni ISA) [Patt03, Zah04]. C este primul
limbaj de nivel mediu (considerat de nivel nalt de ctre ali cercettori)
destinat crerii de sisteme de operare (anterior acestuia sistemele de operare
erau scrise n limbaje de asamblare). De asemenea, n C este permis
manipularea structurilor hardware ale calculatoarelor (regitrii, memorie,
porturi). C este un limbaj de programare standardizat, compilat, implementat
pe marea majoritate a platformelor de calcul existente azi. Este apreciat
pentru eficiena codului obiect pe care l poate genera, i pentru
portabilitatea sa. A fost dezvoltat la nceputul anilor 1970 de Brian
Kernighan i Dennis Ritchie, care aveau nevoie de un limbaj simplu i
portabil pentru scrierea nucleului sistemului de operare UNIX. Sintaxa
limbajului C a stat la baza multor limbaje create ulterior i nc populare azi:
C++, Java, JavaScript, C#. C este un limbaj case sensitive
14
.
Instruciunile din C care rezolv o problem sunt mult mai puine
dect cele ale limbajului asamblare aferent calculatorului LC-3 care rezolv
aceeai problem [Patt03]. De asemenea, LC-3 nu asigur instruciuni de
nmulire i mprire. Limbajele de nivel nalt sunt mai expresive dect cele
de nivel mediu sau jos (asamblare). Sunt folosite simboluri pentru variabile

14
Case sensitive literele mari sunt diferite de cele mici n cadrul tuturor construciilor
sintactice: variabile, expresii, etc.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
238 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
i expresii simple pentru structuri de control (if-else, switch-case) sau
repetitive (for, while, do-while). Permite compilarea condiionat. Dei
limbajul C ofer o libertate foarte mare n scrierea codului, acceptnd multe
forme de scriere care n alte limbaje nu sunt permise, acest lucru poate fi i
un dezavantaj, n special pentru programatorii fr experien.

Compilare vs. Interpretare
Programele de nivel nalt (High Level Languages HLL) pot fi
translatate n instruciuni main (ISA corespunztoare arhitecturii hardware
pe care se va procesa) prin dou metode [Aho86, Gol97]:
- Interpretare:
Codul surs HLL este interpretat de o main virtual (cele mai
cunoscute sunt mainile virtuale Java JVM) care translateaz
seciuni din codul surs n limbaj main i l execut direct pe
arhitectura gazd, trecnd apoi la urmtoarea seciune de cod surs.
Dintre avantajele interpretrii fa de metodele tradiionale de
compilare s-ar meniona simplitatea implementrii hardware dar i
faptul c nu necesit o zon mare de memorie pentru stocarea
programului compilat. Principalul dezavantaj l reprezint viteza
sczut de execuie a aplicaiei, dar i necesitatea existenei n
momentul interpretrii att a codului surs HLL ct i a mainii
virtuale care realizeaz interpretarea.
- Compilare:
Compilarea direct translateaz codul surs (poate fi Java, C, C++,
Fortran, Pascal) n instruciuni main, direct executabile pe un
procesor int, dar nu le execut ca n cazul interpretoarelor. Orice
modificare a codului surs necesit recompilare. Procesul este realizat
static i poate ngloba tehnici de optimizare de tip analiza
dependenelor de date dintre instruciuni, analiz interprocedural. Se
caracterizeaz printr-o lips de portabilitate.
10.1.1. DESCRIEREA COMPONENTELOR UNUI
COMPILATOR
Compilatorul translateaz un program surs scris ntr-un limbaj de
nivel nalt (C, Pascal) n acelai program - obiect, de regul scris n limbaj
de asamblare. n literatura de specialitate [Aho86, Gol97], este denumit
faz a unui compilator o succesiune de operaiuni prin care un program de la

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 239
intrare sufer anumite modificri. Prin trecere aparinnd unui compilator se
nelege o citire a programului dintr-un fiier, transformarea lui conform
unor faze i scrierea rezultatului n alt fiier(de ieire).


Figura 10.1. Fazele procesului de compilare
Figura anterioar (10.1) ilustreaz cele dou faze majore ale
procesului de compilare propriu-zis:
analiza (de tip front end) - n care se identific prile constituente
fundamentale ale programului (variabile, expresii, declaraii, definiii,
apeluri de funcii) i se construiete o reprezentare intern a
programului original, numit cod intermediar (analiza lexical
produce un -> ir de atomi lexicali -> analiza sintactic genereaz ->
arborele sintactic -> analiz semantic construiete o reprezentare a
programului surs n-> cod intermediar). Este dependent de limbajul
de nivel nalt i nu de maina pe care se va procesa.
sinteza (de tip back end) - genereaz cod main eventual optimizat.
Se disting dou etape:
optimizare cod intermediar (scheduling) pentru o anumit main;
generare de cod main (generare cod ntr-o gam variat de
formate: limbaj main absolut, limbaj main relocabil sau

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
240 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
limbaj de asamblare urmat de alocare de resurse). Aceast faz
este puternic dependent de maina pe care se va executa codul
obiect generat.
naintea primei faze din cadrul procesului de compilare trebuie
realizat de cele mai multe ori o preprocesare. Preprocesorul translateaz
un program al crui limbaj surs este de nivel nalt (C, Pascal) ntr-un
program destinaie (obiect) scris tot ntr-un limbaj de nivel nalt C. Practic
are loc interpretarea directivelor de preprocesare (ncep cu # - include,
define, if !defined()endif). De exemplu, preprocesorul trebuie s
introduc coninutul fiierului <stdio.h> n codul surs al aplicaiei create
acolo unde apare respectiva directiv de preprocesare, sau, s nlocuiasc
anumite valori constante declarate ca iruri de caractere cu valorile numerice
aferente, dac acest lucru se specific printr-o directiv de tip #define n
cadrul programului.
Analiza lexical reprezint prima faz a procesului de compilare, i
care este responsabil de transformarea programului surs vzut ca o
succesiune de caractere (text) ntr-o succesiune de atomi lexicali i de
atribute ale lor. Conform definiiei din [Gol97], un atom lexical este o
entitate indivizibil a unui program - identificatori de variabile/funcii,
constante de diverse tipuri, operatori, cuvinte cheie (if, else, switch/case),
delimitatori. Atributele atomilor lexicali sunt: clas, tip, lungime, loc n
tabela de simboluri, dac a fost definit sau nu, etc. Clasa atributului se refer
la faptul c este cuvnt-cheie, identificator de variabil, constant de tip
ntreg sau real etc.
n continuare sunt descrise cteva considerente care demonstreaz
utilitatea analizei lexicale ca faz separat a compilatorului:
1. Asigur o proiectare mai uoar a compilatorului.
2. Faza necesit operaii de nivel fizic: citiri de fiiere disc(programul
surs), comparri de iruri de caractere, acces la nivel de bit , cautri n
tabele consumnd mult timp n raport cu celelalte faze. Este eficient
scrierea n limbaj de asamblare sau limbaj C a acestei faze urmnd ca
fazele urmtoare s poat fi scrise n orice limbaj de nivel nalt.
3. Procesul de analiz sintactic i semantic este simplificat textul fiind
curat de spaii (blank-uri) i comentarii.
4. Asigurarea portabilitii algoritmului de compilare pentru diverse
versiuni ale aceluiai limbaj de programare.
Analizorul lexical (AL) constituie interfaa dintre programul surs i
compilator (analizorul sintactic). Relaia analizorului lexical (AL) fa de
analizorul sintactic (AS - cel care determin faptul c atomii lexicali aparin
sau nu limbajului de programare) este de dou feluri:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 241
a) independent - AL este independent de AS. Analizorul lexical
primete la intrare textul cu programul surs i furnizeaz la ieire
un fiier sau o zon de memorie cu succesiunea de atomi lexicali ce
vor fi dai spre prelucrare analizorului sintactic (vezi 10.2).


Figura 10.2. Analizorul Lexical independent de Analizorul Sintactic (1)
b) comandat - AL este lansat de ctre AS de cte ori are nevoie de un
nou atom lexical (n compilatoare sub sistemul de operare DOS)
sau AS i AL sunt corutine (dou procese independente care se
lanseaz reciproc - n sisteme multitasking UNIX, Windows).


Figura 10.3. Analizorul Lexical comandat de Analizorul Sintactic
Analiza sintactic grupeaz atomii lexicali generai de AL n structuri
sintactice precum: expresii, liste, instruciuni, proceduri. Toate acestea le
plaseaz ntr-un arbore sintactic-cu ajutorul cruia sunt descrise relaiile de
incluziune ale structurilor sintactice, furniznd n final informaii privitoare
la corectitudinea acestora.
Analiza semantic - (componenta compilatoarelor cel mai puin
dezvoltat teoretic), face delimitrile din punct de vedere semantic (al
nelesului programului). Extrage informaiile privind apariiile obiectelor
purttoare de date din program (variabile, tipuri de date, funcii, etc) pentru
verificarea consistenei utilizrii lor. Pe msura parcurgerii arborelui, analiza
semantic construiete o reprezentare a programului surs n cod
intermediar (ir de instruciuni simple cu format fix, foloseau operanzi
variabile de program i nu regitri), reflectnd structura programului surs i
nglobnd toate informaiile necesare fazelor urmtoare : optimizarea i
generarea de cod obiect. Generarea codului intermediar fiind legat de
structura semantic se poate trata n cadrul analizei semantice.
Rezolvarea sarcinilor analizei semantice necesit de obicei mai multe
treceri prin arborele de derivare ceea ce lungete corespunztor durata

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
242 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

compilrii. Numrul acestor treceri poate fi fix ori, n cazul unor limbaje
mai complexe sau a celor defectuos proiectate, variabil n funcie de
structura programului analizat.
Toate fazele unui compilator dispun de rutine de tratare a erorilor i
lucreaz n comun cu una sau mai multe tabele de simboluri n care se
pstreaz informaii despre cuvintele cheie ale limbajului, identificatorii de
variabile (tip, lungime, adres stocare n memorie etc.), etichete de
instruciuni, identificatori de proceduri i funcii i alte informaii utile
despre programul n curs de compilare. Tabela de simboluri este creat n
faza de analiz a programului surs i folosit n scopul validrii numelor
simbolice facilitnd generarea de cod [Gol97]. Tabela de simboluri
realizeaz o asociere simbolic ntre numele (identificatorul) unei variabile
i caracteristicile acesteia (tip, domeniu de vizibilitate, deplasament fa de
nceputul zonei de date statice sau dinamice, stiv). Compilatorul folosete
tabela de simboluri pentru a urmri domeniul de utilizare i valabilitate a
unui nume i de a aduga informaii despre un nume. Tabela de simboluri
este cercetat de fiecare dat cnd un nume este ntlnit n textul surs.
Mecanismul asociat tabelei de simboluri trebuie s permit adugarea a noi
intrri i gsirea informaiilor existente n mod eficient. Tabela de simboluri
este similar celei generate de asamblor ns cuprinde mai multe informaii
dect aceasta. n asamblare, toi identificatorii (variabilele) erau etichete
(labels) i informaiile reprezentate de acestea erau adrese. Tabela de
simboluri conine informaii legate de toate variabilele din program.
Optimizarea de cod intermediar (scheduling) [Vin00, Gol97], dei
opional, este extrem de important din punct de vedere al creterii
performanei n domeniul paralelismului la nivelul instruciunilor.
Optimizarea poate fi tratat din dou perspective: local (n cadrul unitilor
secveniale de program basic-block-uri) i respectiv global (a ntregului
program). Noiunea de optimizare este oarecum forat ntruct nu exist
garan acel cod rezultat este optim, msurat cu vreo metric (formul)
matematic.
Optimizarea local a basic-block-urilor se realizeaz folosind
algoritmi cvasioptimali ntr-o singur trecere, de tip "List Scheduling".
Deoarece majoritatea programelor HLL sunt scrise n limbaje imperative i
pentru maini secveniale cu un numr limitat de registre n vederea stocrii
temporare a variabilelor, este de ateptat ca gradul de dependene ntre
instruciunile adiacente s fie ridicat (paralelism relativ sczut (2-3
instruciuni) la nivelul basic-block-urilor). Aadar pentru creterea nivelului
de paralelism este necesar suprapunerea execuiei unor instruciuni situate
n basic-block-uri diferite (software pipelining, loop unrolling), ceea ce
conduce la ideea optimizrii globale.
ia c
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 243
Optimizarea global a programului, de natur NP - complet, i care la
ora actual constituie nc o problem deschis, se bazeaz pe algoritmi
determiniti de tip "Trace Scheduling" sau pe algoritmi euristici de tip
"Enhanced Percolation", "inlining" selectiv aplicat procedurilor [Vin00].
Dependenele cauzate de variabilele aflate n memorie reprezint de
asemenea o frn n calea creterii performanei arhitecturilor de calcul.
Procesarea Out of Order a instruciunilor cu referire la memorie ntr-un
program este dificil datorit accesrii aceleiai adrese de memorie de ctre
o instruciune care citete respectiv una care scrie. Exist motive ns, ca o
instruciune Load amplasat dup o instruciune Store s se execute naintea
acesteia din motive de eficien a execuiei (mascare laten, reducerea
necesarului de lrgime de band a memoriei prin bypassing). Acest lucru
este posibil numai dac cele 2 adrese de memorie sunt ntotdeauna diferite.
Este evident c dac la un anumit moment ele sunt identice, semantica
secvenei se modific inacceptabil. Atunci cnd acest lucru este posibil,
problema se rezolv static, de ctre compilator. Rutina de analiz anti-alias
(disambiguisation routine) [Vin00], component a compilatorului, compar
cele 2 adrese de memorie i returneaz una dintre urmtoarele 3 posibiliti:
adrese ntotdeauna distincte;
adrese ntotdeauna identice;
cel puin 2 adrese identice sau nu se poate determina.
Doar n primul caz putem fi siguri c execuia anterioar a
instruciunii Load fa de instruciunea Store (sau simultan n cazul
procesoarelor cu execuie multipl) mbuntete performana fr a cauza
alterarea semantic a programului. Din pcate, nu se poate decide
ntotdeauna acest lucru n momentul compilrii.
Analiza anti-alias static d rezultate bune n cazul unor adresri
liniare i predictibile ale memoriei (accesri de tablouri uni sau bi-
dimensionale). Prin urmare un reorganizator de program bazat pe analiza
anti-alias static va fi deosebit de conservativ n aciunile sale. Cnd
compararea adreselor de memorie se face pe parcursul procesrii
programului prin hardware, se realizeaz o dezambiguizare dinamic.
Aceasta este mai performant dect cea static dar necesit resurse hardware
suplimentare i implicit costuri sporite.
Pe lng dezambiguizarea static mai exist i alte transformri de cod
n vederea optimizrii [Gol97]:
Eliminarea instruciunilor redundante sau a celor de neatins (unreachable
code) din program. De exemplu, o instruciune neetichetat care urmeaz
imediat dup un salt necondiionat poate fi eliminat.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
244 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Optimizri ale fluxului de control. De exemplu, cazul instruciunilor de
salt condiionate sau nu, care au ca destinaie tot o instruciune de salt,
sau salt condiionat.
Simplificri algebrice.
Reduceri n for. De exemplu, nmulirea sau mprirea ntregilor (n
virgul fix) printr-o putere a lui 2 este mai ieftin de implementat ca o
deplasare (shift) de bii. mprirea n virgul flotant printr-o constant
poate fi implementat (aproximat) ca i multiplicare a constantei, ceea
ce poate fi ieftin.
Generatorul de cod constituie faza final a unui compilator. Primete
la intrare reprezentarea intermediar a programului surs mpreun cu
informaia din tabela de simboluri - folosit la determinarea run-time a
adresei obiectelor de date, desemnate de nume n reprezentarea
intermediar, i produce la ieire un program obiect echivalent. Codul de
ieire trebuie s fie corect i de nalt calitate, aceasta nsemnnd c el
trebuie s foloseasc eficient resursele mainii pentru a putea fi procesat ct
mai rapid.
Ieirile generatorului de cod se gsesc ntr-o gam variat de forme:
limbaj de asamblare, limbaj main relocabil sau limbaj main absolut.
Producnd un program ntr-un limbaj de asamblare, caracterizat de o mai
mare lizibilitate, generarea codului se realizeaz mult mai uor. Pot fi
generate instruciuni simbolice precum i utilizate facilitile de macro-
asamblare ajuttoare la generarea de cod. Producnd un program n limbaj
main absolut, exist avantajul c programul poate fi plasat ntr-o locaie
fix a memoriei i poate fi imediat executat. Producnd un program n
limbaj main relocabil, acesta permite subprogramelor sa fie compilate
separat (similar cu fiierul Makefile din cadrul setului de instrumente
SimpleScalar 3.0 [Flo05]). O mulime de module-obiect relocate pot fi
legate (linked) mpreun i apoi ncrcate pentru execuie de ctre un loader.
Ctigul de flexibilitate care d posibilitatea compilrii separate a
subrutinelor i apelarea altor programe compilate anterior dintr-un modul
obiect este tributar costurilor suplimentare pentru legare i ncrcare.
Dintre problemele inerente care apar la generatoarele de cod se
amintesc: managementul de memorie (mai ales n cazul instruciunilor de
salt condiionat), selecia instruciunilor main, alocarea registrelor i
ordinea de evaluare.
Natura setului de instruciuni al mainii destinaie (viteza
instruciunilor i limbajul mainii) determin dificultatea n selectarea
instruciunilor ce vor fi folosite pentru generarea de cod obiect.
Uniformitatea i completitudinea setului de instruciuni constituie de
asemenea, factori importani. Dac maina destinaie nu suport toate

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 245
tipurile de date ntr-o maniera uniform, atunci fiecare excepie are nevoie
de o tratare deosebit.
Este cunoscut faptul c instruciunile cu operanzii registru (la nivelul
procesorului) sunt de obicei mai scurte i mai rapide dect cele cu operanzii
n memorie. Astfel, utilizarea eficient a registrelor este important n
generarea de cod corect. Utilizarea registrelor este adesea subdivizat n
dou subprobleme [Pat05, Gol97]:
1. n timpul generrii de cod, ntr-un anumit punct al programului, sunt
alocate registrele, adic selectat mulimea de variabile care va fi
rezident n regitrii.
2. Din acel punct, n timpul urmtoarei faze de asignare a regitrilor(la
variabile) se va selecta registrul specific ce conine variabila rezident
n el.
Gsirea unei asignri optime a regitrilor la variabile este dificil,
hardware-ul i software-ul mainii destinaie putnd solicita anumite
convenii n utilizarea anumitor regitrii - folosirea specializat a unora
dintre acetia. De exemplu, registrul $29 reprezint stack pointer-ul, $31 -
constituie adresa de revenire, sau regitrii flotani dubl precizie sunt
alctuii din regitrii par:impar flotani simpl precizie, n cazul procesorului
MIPS.
De asemenea, ordinea n care sunt efectuate calculele poate afecta
eficiena codului generat, unele calcule necesitnd mai puine registre pentru
rezultate intermediare, fa de altele. Cu toate aceste probleme,
compilatoarele sunt astfel proiectate nct s respecte principiile de calitate
(corectitudine) i eficien.
n finalul acestui paragraf este exemplificat modul de alocare al
spaiului de memorie (pentru variabile) de ctre compilator n cazul
calculatorului LC-3. Zona de memorie utilizator (vezi figura 10.4) este
compus din trei mari regiuni:
Instruciunile (zona de cod) la care registrul PC (program counter)
indic spre adresa urmtoarei instruciuni de executat la fiecare
moment de timp.
Zona de date global unde sunt stocate toate variabilele declarate
global n codul surs. R5 (similar cu registrul $gp de la procesorul
MIPS) va indica spre nceputul acestei zone, cunoscut i sub numele
de zon de date statice. Aceast zon se caracterizeaz prin faptul c,
n momentul compilrii, se cunoate numele, adresa i spaiul ocupat
de fiecare variabil declarat aici (static).
Stiva de date (aferent fiecrei funcii din programul surs HLL). Aici
sunt stocate variabilele locale, parametrii funciilor. R6 (similar cu

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
246 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
registrul $sp de la MIPS) indic spre vrful stivei. Este o zon de date
dinamic, alocat la fiecare apel de funcie i care este dealocat n
momentul ieirii din respectiva funcie. n subcapitolul 10.2 se
prezint cum este implementat n hardware mecanismul de gestiune a
stivelor de date asociate funciilor din programele C.
Un singur lucru ar mai fi de menionat aici i anume c variabilele
globale sunt salvate n zona de date statice ncepnd cu deplasamentul
(offset) 0, iar n stiva de date aferent fiecrei funcii variabilele i ceilali
parametrii (dac exist) sunt salvai ncepnd cu offset-ul 3. Preluarea
coninutului variabilelor stocate poate fi fcut cu instruciunile de citire din
memorie de tip LDR, ca n exemplul de mai jos.
Pentru prima variabil global din program: LDR R1, R5, #0
Pentru primul parametru al unei funcii: LDR R2, R6, #3


Figura 10.4. Organizarea memoriei la calculatorul LC-3
10.1.2. ETAPELE PARCURSE PENTRU RECOMPILAREA
INSTRUMENTELOR SIMPLESCALAR 3.0 [Flo05]
Creterea n performan i complexitate a microprocesoarelor
moderne datorate tehnicilor avansate gen pipelining, execuie out-of-order ,
predicie i execuie speculativ, presupune un efort suplimentar de

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 247
proiectare i verificare pentru dezvoltarea i implementarea de produse
viabile. Pentru depirea acestor probleme, proiectanii de microarhitecturi
au explorat diverse modaliti de transfer de funcionalitate la nivelul
compilatorului. ncepnd cu procesoarele RISC
15
VLIW
16
i continund cu
cele EPIC
17
versiunile 1 i 2 de procesoare Intel Itanium, compilatorul a
jucat un rol important n simplificarea arhitecturii la nivel hardware
meninnd totodat tendinele curente de cretere a performanei. n acest
paragraf sunt prezentate fazele principale care trebuie parcurse pentru
compilarea i execuia programelor de test scrise n C (sau C++) sub
sistemul de operare Linux folosind utilitarele GNU. Etapele parcurse
pornind de la sursa HLL a programelor de test i pn la simularea de tip
execution driven sunt evideniate n figura urmtoare.

f2c
SimpleScalar
GCC
SimpleScalar
GAS
SimpleScalar
GLD
Surse FORTRAN
benchmark
Surse C
benchmark
SS libF77.a
SS libc.a
SS libm.a
Compilator C
Surse simulator
(ex. sim-fast.c)
Simulator
Rezultate
Cod asamblare
Cod obiect
Cod obiect
(SPEC95)
Executabile
SimpleSim

Figura 10.5. Interaciunea instrumentelor n cadrul setului SimpleScalar

15
RISC calculatoare cu set redus (optimizat) de instruciuni
16
VLIW procesoare cu execuie multipl (Very Long Instruction Word). Din punct de
vedere hardware un procesor VLIW este foarte simplu i const dintr-o colecie de uniti
funcionale de execuie (sumatoare, circuite multiplicative, uniti de execuia branch-
urilor, etc) conectate printr-o magistral, plus regitrii i memorii cache. n cazul
procesoarelor VLIW compilatorul are un rol decisiv n gruparea mai multor instruciuni
independente ntr-o singur instruciune multipl astfel nct s poat fi folosite eficient
toate unitile de execuie pe perioada fiecrui impuls de tact.
17
EPIC calculatoare care exploateaz paralelismul n mod explicit. Procesorul nu trebuie
s asigure paralelismul instruciunilor. Compilatorul este responsabil pentru determinarea
instruciunilor care pot fi executate n paralel i codific aceste informaii direct n codul
obiect obinut dup compilare).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
248 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Sursele FORTRAN ale programelor de test proprii (benchmark-uri)
sunt convertite n C folosind translatorul f2c. Att benchmark-urile C ct i
cele convertite din FORTRAN sunt compilate cu ajutorul compilatorului
GNU gcc (dedicat arhitecturii SimpleScalar) rezultnd cod n format de
asamblare pentru respectiva arhitectur. Arhitectura SimpleScalar este
derivat din arhitectura procesorului MIPS-IV ISA. Organizarea memoriei
n sistemele bazate pe arhitectura SimpleScalar este convenional. Spaiul
de adrese utilizator (pe 31 de bii) este compus din trei pri: cod, date i
stiv program. Instruciunile sunt pe 64 de bii iar setul de regitrii generali
pentru numere ntregi conine 32 de regitrii pe 32 de bii fiecare.
Codul (n format asamblare) rezultat este trecut prin asamblorul
SimpleScalar as care genereaz un format foarte asemntor cu codul obiect
dar nu identic (cuprinde simboluri + cod obiect; nu este generat codul obiect
pentru funciile de bibliotec i directivele de asamblare). Formatul final de
cod obiect se obine cu ajutorul utilitarului SimpleScalar ld care link-
editeaz codul rezultat la pasul anterior (pseudo-obiect) cu bibliotecile
proprii arhitecturii SimpleScalar (SS libc.a, SS libm.a, SS libF77.a). Codul
obiect se constituie ca parametru de intrare pentru simulatoarele arhitecturii
SimpleScalar. Setul standardizat de instrumente destinat cercettorilor n
microarhitecturi SimpleScalar (o colecie de compilatoare, asambloare,
link-editoare, simulatoare), disponibil gratuit [Flo05], pune la dispoziie i
cteva din benchmark-urile SPEC '95 n acelai format cod obiect
(precompilate pentru arhitectura SimpleScalar).

Compilarea i Link-editarea programelor
La ora actual exist pe pia o varietate de compilatoare disponibile,
att pentru platform Windows ct i pentru platform Linux. Cele mai
utilizate sunt: bcc (Borland C Compiler sub Windows), gcc (GNU C
Compiler sub Linux), xgcc (gcc recompilat pentru a genera cod main
specific arhitecturii SimpleScalar). Pe lng compilator, furnizorul acestuia
ofer i uneltele suplimentare necesare: preprocesoare, asambloare i link-
editoare. Compilatoarele ofer o mulime de opiuni de compilare,
preprocesare, link-editare cu biblioteci (matematice, grafice, etc) i inclusiv
faciliti de depanare (gdb GNU debugger). Pentru compilarea
programelor se recomand specificarea opiunilor Wall pentru afiarea
tuturor avertismentelor generate de compilator. Prin opiunea -c este evitat
link-editarea iar -g invoc opiunea de depanare, impunnd
compilatorului generarea unei tabele de simboluri.
Ex: gcc c g O nume_fis1.c nume_fis2.c => Sunt generate doar codurile
pseudo-obiect ale tuturor

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 249
fiierelor surs respective
fr a efectua legturile cu
bibliotecile funciilor
apelate.
Link-editarea se poate realiza ulterior cu comanda:
gcc nume_fis1.o nume_fis2.o ...... -o nume_fis_executabil =>
determin codul main
(.exe pentru Intel, .ss
pentru SimpleScalar) care
poate fi executat pe
arhitectura gazd (pentru
care s-a generat).
Se reamintete c opiunea de compilare S realizeaz preprocesarea
i compilarea codului surs, iar opiunea s genereaz doar codul asamblare
fr faza de preprocesare. De asemenea, n cazul n care fiierele surs c i
cpp nu exist n directorul unde se gsete compilatorul gcc, xgcc, etc atunci
se va tasta odat cu numele i calea spre acest fiier.

./xgcc nume_fisier.c S => fiier asamblare MIPS (s-a folosit xgcc)
./xgcc nume_fisier_sursa.c o nume_fisier_destinatie.ss => fiier
executabil MIPS
10.2. IMPLEMENTAREA GESTIUNII STIVELOR DE
DATE ASOCIATE FUNCIILOR C
10.2.1. SUBPROGRAME. GENERALITI. FUNCII C
Prin definiie un subprogram (ex. funcie C, funcie sau procedur n
Pascal) reprezint un ansamblu de date, variabile i instruciuni scrise n
vederea unor prelucrri (calcule, citiri, scrieri) i care poate fi utilizat (rulat)
doar dac este apelat de un program sau de alt subprogram. Cu alte cuvinte,
reprezint un program mai mic, mai simplu dect cel principal, creat cu
scopul apelrii lui cel puin o dat. Prin realizarea de subprograme se
stabilesc premisele programrii structurate conform ecuaiei programrii
structurate enunat de Niklaus Wirth: Structuri de date + Algoritmi =
Program. Caracterul generic (se opereaz asupra unei varieti de date de

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
250 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
intrare) i concis (subprograme, structurile repetitive i cele de tip recursiv)
de scriere a programelor conduce la unele avantaje:
Reutilizarea codului: - o dat scris un subprogram poate fi utilizat de
mai multe programe i chiar de acelai program de mai multe ori.
Noiunea de subprogram st la baza mecanismului de recursivitate i a
tehnicii de divide et impera.
Faciliteaz elaborarea algoritmilor prin descompunerea problemei de
rezolvat n altele mai simple, fluxul de execuie al programului putnd
fi urmrit cu o mai mare uurin.
Permite dezvoltarea modular a codului (separat i independent) de
ctre programatori independeni.
Reducerea numrului de erori care pot apare la scrierea programelor.

FUNCII C [Zah04, Neg97, Sto98]
Funcia este un concept important n matematic i n programare. n
limbajul C prelucrrile sunt organizate ca o ierarhie de apeluri de funcii.
Orice program trebuie s conin cel puin o funcie, funcia main. Funciile
ncapsuleaz prelucrri bine precizate i pot fi reutilizate in mai multe
programe.
n esen, o funcie este alctuit din:
Antet conine numele funciei, lista parametrilor formali, tipul
rezultatului.
Tip_returnat nume_funcie (lista_parametrilor formali)
Identic ca i n matematic o funcie nu poate ntoarce mai mult de un
rezultat. Exist situaii (efectuarea unor aciuni, etc) cnd o funcie nu
ntoarce nimic (n aceste cazuri tip_returnat este void). Funciile care nu
returneaz nimic se numesc n alte limbaje de programare proceduri.
Tipul returnat de funcie poate fi orice tip de dat cu excepia masivelor.
Dac se dorete ca o funcie s returneze un masiv atunci acesta trebuie
nglobat n structuri de date declarate ca struct. Rezultatul funciei este
returnat la ntlnirea instruciunii return din corpul funciei (return
expresie). Trebuie ca tipul expresiei s coincid cu tipul funciei. La
ntlnirea instruciunii return, dup atribuirea valorii, execuia funciei se
ncheie i se revine la funcia care a apelat-o. n absena instruciunii
return, execuia funciei se ncheie dup execuia ultimei instruciuni. n
acest caz funcia nu ntoarce nici o valoare.
Cu toate c uneori poate fi vid, de cele mai multe ori lista
parametrilor formali (Parameters n englez) are urmtoarea form:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 251
Tip_1 Parametru
1
, Tip_2 Parametru
2
, , Tip_n Parametru
n
O instruciune compus aceasta cuprinde declaraiile variabilelor
locale i instruciunile propriu-zise.

Transmiterea parametrilor
Parametrii care se gsesc n antetul funciei se numesc formali
(declarai n funcia apelat), iar cei care se gsesc n instruciunea de apel se
numesc efectivi (Arguments n englez) i sunt declarai n (sub)programul
apelant. ntre parametrii formali i cei efectivi trebuie s existe o anumit
concordan, descris prin regulile urmtoare:
Numrul parametrilor formali (i ordinea acestora) trebuie s coincid cu
numrul (i ordinea) parametrilor efectivi. Exist i excepii ns: funcii
cu numr variabil de parametrii. n cazul acestora este obligatoriu ca cel
puin primul parametru s apar n lista parametrilor formali. Pentru
parametrii variabili antetul funciei va conine dup primul
parametru formal.
Tipul parametrilor formali trebuie s coincid cu tipul parametrilor
efectivi sau tipul parametrilor efectivi s poat fi convertit implicit ctre
tipul parametrilor formali, la fel ca n cazul atribuirii.
Exist dou mecanisme de transmitere a parametrilor: prin valoare i prin
referin. Transmiterea parametrilor prin valoare se utilizeaz atunci cnd
nu ne intereseaz ca, la ntoarcerea din subprogram (funcie), parametrul
efectiv s rein valoarea modificat acolo (n subprogram). n cazul
transmiterii prin valoare parametrii efectivi trebuie s fie valori reinute de
variabile sau expresii. Transmiterea parametrilor prin referin se utilizeaz
atunci cnd se dorete ca, la ntoarcerea din subprogram, variabila transmis
s rein valoarea stabilit n timpul execuiei subprogramului. n cazul
transmiterii prin referin parametrii efectivi trebuie s fie referine la
variabile. Dac n cazul transmiterii parametrilor prin valoare n stiv este
reinut valoarea parametrilor efectivi, n cazul transmiterii prin referin, n
stiv este salvat adresa variabilelor.

Funcia main()
Un program C este compus dintr-o ierarhie de funcii, orice program
trebuind s conin cel puin funcia main(), prima care se execut la
lansarea programului C. Codul funciei se gsete ntre acolade.



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
252 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
void main(void){
/* programul principal aferent fiecrui program C */
}

Definirea i declararea unei funcii
Pentru a putea fi utilizat ntr-un program, o funcie trebuie s fie
definit (sau declarat) i apelat. A defini un subprogram, nseamn a scrie
efectiv corpul funciei. Trebuie avut grij de alegerea locului unde se
definete subprogramul (dac el nu a fost anterior declarat atunci definiia
trebuie s aib loc nainte de apelul acestuia). A declara un subprogram
nseamn a-l anuna. Un subprogram nedeclarat nu poate fi folosit. Definiia
unui subprogram ine loc i de declaraie.

Definiia unei funcii are urmtoarea form:
tip_rezultat_returnat nume_funcie (lista_parametri_formali){//antetul
funciei
definirea variabilelor locale
prelucrri // instruciuni
ntoarcere rezultat
} // intre { } este implementat corpul funciei

Funciile nu pot fi definite imbricat (ca n Pascal). Definiia unei
funcii trebuie s corespund declaraiei funciei. Fiecare argument al
funciei (matematice) capt un nume, devine un parametru formal, chiar
dac n declaraia funciei fcut naintea (i distinct de) definiiei funciei
numrul acestora a fost declarat variabil (prin construcia sintactic ).
Dac funcia nu returneaz nici un rezultat (se mai numete funcie
void) i nu primete parametri, definitia va fi:

void nume_funcie (void){//antetul funciei
definirea variabilelor locale
prelucrri // instruciuni
} // intre { } este implementat corpul funciei

O funcie void fr parametri poate prelucra variabilele globale i cele
locale. Dac mai multe funcii void fr parametrii trebuie s aiba acces la
aceleai date, acestea trebuie s fie variabile globale.
Exemplul urmtor conine definiia funciei Factorial care calculeaz iterativ
factorialul unui numr.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 253
long Factorial(int n)
{
int i;
long result = 1;
for (i = 1; i <= n; i++)
result *= i;
return result;
}

Declaraia unei funcii se face prin precizarea prototipului funciei
(antetul acesteia): tip_rezultat_returnat nume_funcie
(lista_parametri_formali);

Prototipul (declaraia funciei) implicit este:
int nume_functie(void);
Prototipul unei funcii f trebuie s apar n afara tuturor funciilor i naintea
oricrui apel al su. Prin intermediul prototipului compilatorul tie cum
trebuie apelat funcia. Compilatorul afl detalii referitoare la tipul returnat
de funcie, numrul i tipul parametriilor de intrare (efectivi), numele
funciei folosite ca i parametru (n cazul apelurilor indirecte de funcii prin
pointer). Informaiile sunt extrem de utile mai ales atunci cnd compilatorul
trebuie s genereze cod pentru o funcie care a fost apelat naintea definirii
sale n codul surs. De asemenea, se poate ntmpla ca, n cazul proiectelor
de aplicaii care conin mai multe fiiere surs i biblioteci (fiiere header i
surs C), o funcie s fie apelat ntr-un fiier surs (scris de un
programator) i s fie definit ntr-altul (scris de alt programator). n aceste
situaii, fiierul n care este fcut apelul funciei trebuie s includ fiierul
header cu declaraia funciei i este compilat separat de fiierul care conine
definiia funciei, n final dup faza de link-editare rezultnd fiierul
executabil ca un tot unitar.

Apelul unei funcii:
nume_functie(lista_parametri_efectivi) /*poate apare ca operand ntr-o
expresie, dac funcia returneaz
un rezultat*/
La apelul unei funcii (subprogram), se realizeaz transferul controlului din
(sub)programul apelant ctre subprogramul apelat i se execut corpul
acestuia, dup care se revine n funcia apelant, la instructiunea urmtoare
apelului. O funcie poate fi apelat, dac n faa apelului exist definiia sau
cel puin declaraia funciei. Pentru a realiza acest lucru, compilatorul

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
254 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
pstreaz pe stiva de date aferent funciei apelate adresa de revenire n
(sub)programul apelant (vezi subcapitolul 10.2.2). n cazul funciilor void
fr parametri, apelul se face prin:
nume_funcie(); //instruciune care efectueaz o aciune


Figura 10.6. Exemplu de declaraie i apel a funciei Factorial
n continuare este prezentat un exemplu de program C care efectueaz
operaii aritmetico-logice asupra unor variabile locale i globale i afieaz
pe ecran rezultatul. Acest program C este translatat n cod asamblare LC-3,
artndu-se i tabela de simboluri generat de compilator [Patt03].

Codul surs C
#include <stdio.h>
int inGlobal;

main()
{
int inLocal; /* variabile locale funciei main */
int outLocalA;
int outLocalB;

/* iniializare */
inLocal = 5;
inGlobal = 3;


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 255
/* efectuarea operaiilor */
outLocalA = inLocal++ & ~inGlobal;
outLocalB = (inLocal + inGlobal) - (inLocal - inGlobal);

/* afiare rezultate */
printf("The results are: outLocalA = %d outLocalB = %d \n",
outLocalA, outLocalB);
}

Tabela de simboluri
Name Type Offset Scope
inGlobal int 0 global
inLocal int 3 main
outLocalA int 4 main
outLocalB int 5 main
Variabilele globale starteaz la offset 0
Variabilele locale starteaz la offset 3
Generarea codului asamblare (C -> LC-3)
; funcia main i iniializarea variabilelor
AND R0, R0, #0
ADD R0, R0, #5 ; inLocal = 5
STR R0, R6, #3 ; (offset = 3)

AND R0, R0, #0
ADD R0, R0, #3 ; inGlobal = 3
STR R0, R5, #0 ; (offset = 0)

; calculul primei expresii
; outLocalA = inLocal++ & ~inGlobal;
LDR R0, R6, #3 ; get inLocal
ADD R1, R0, #1 ; increment
STR R1, R6, #3 ; store

LDR R1, R5, #0 ; get inGlobal
NOT R1, R1 ; ~inGlobal
AND R2, R0, R1 ; inLocal & ~inGlobal
STR R2, R6, #4 ; store in outLocalA ; (offset = 4)



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
256 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
; calculul celei de-a doua expresii
; outLocalB = (inLocal + inGlobal) ;- (inLocal - inGlobal);
LDR R0, R6, #3 ; inLocal
LDR R1, R5, #0 ; inGlobal
ADD R0, R0, R1 ; R0 este suma
LDR R2, R6, #3 ; inLocal
LDR R3, R5, #0 ; inGlobal
NOT R3, R3
ADD R3, R3, #1
ADD R2, R2, R3 ; R2 este diferena (calculat
ca o adunare n complement
fa de 2)
NOT R2, R2 ; negaie
ADD R2, R2, #1
ADD R0, R0, R2 ; R0 = R0 - R2
STR R0, R6, #5 ; outLocalB (offset = 5)
10.2.2. STIVA DE DATE AFERENT FUNCIILOR [Patt03,
Vin03]
Dup cum se tie, stiva de date asociat unei funcii scrise n limbajul
C reprezint o zon de memorie unde sunt stocate toate variabilele locale i
parametrii afereni respectivei funcii (activation record). Fiecare funcie
C are propriul context pstrat n aceast structur de date special. Stiva de
date se asociaz n mod dinamic fiecrei funcii n curs. Aadar, o funcie
poate avea la un moment dat mai multe stive (instane), doar una fiind ns
activ. Spre exemplu, recursivitatea se poate implementa facil n C tocmai
datorit acestei caracteristici.
Structura stivei de date asociate unei funcii C este prezentat n figura
urmtoare, corespunztor secvenei de program de mai jos.
int NoName (int a, int b){
int w,x,z;
/* Corpul funciei */
.
.
return y;
}

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 257


Figura. 10.7. Structura stivei de date asociate funciei NoName
RETURN VALUE: aici se plaseaz valoarea variabilei y, chiar
nainte de revenirea din funcie. Acest cmp exist i dac funcia nu ar
returna practic nici o valoare.
RETURN ADDRESS (PC): reprezint PC-ul de revenire n funcia
apelant.
DYNAMIC LINK: memoreaz adresa de nceput a stivei de date
aferente funciei apelante. n continuare, se va considera c registrul R6 va
conine adresa de nceput a stivei de date asociat funciei respective.
Aadar funcia NoName proceseaz asupra parametrilor trimii de
ctre funcia apelant (a,b) respectiv asupra variabilelor locale ale acesteia
(w,x,y). Firete, ea trimite rezultatele (y) ctre funcia apelant prin stiva de
date curent. n continuare se consider c atunci cnd funcia NoName este
apelat, pointerul la stivele de date (R6, aici) va pointa la nceputul stivei de
date aferente funciei.
Pentru a nelege implementarea apelurilor/revenirilor funciilor, se
consider urmtorul exemplu de program:

main()
{
int a;
int b;
.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
258 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
.
b=NoName(a,10);
.
.
}
int NoName(int a, int b)
{
int w,x,y;
/* Corpul funciei */
.
.
.
return y;
}

Stiva de date ncepe la o locaie de memorie determinat de ctre
proiectanii sistemului de operare i crete nspre adrese cresctoare.
Execuia programului ncepe cu un apel al sistemului de operare ctre
funcia main. n acest punct, stiva datelor funciei main se structureaz
n memorie, iar registrul R6 pointeaz la nceputul ei. n translatarea
apelului unei funcii, compilatorul genereaz automat cod main pentru a
nscrie o stiv de date n memorie. n translatarea revenirii dintr-o funcie
apelat n funcia apelant, compilatorul genereaz automat cod pentru
preluarea stivei de date din memorie.
Apelul i revenirea se fac n 4 pai, aa cum se prezint n continuare :

1) Apelul funciei NoName

Se face prin asignarea b=NoName(a,10); Stiva de date a funciei
main() respectiv a funciei NoName(a,10) sunt prezentate n figura
urmtoare.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 259

Figura 10.8. Stivele de date asociate funciilor main() i NoName(a,10)
Secvena compilat a apelului funciei NoName este urmtoarea:

ld R8, (R6)3; R8 a
st R8, (R6)8; a Stiva NoName
and R8, (R8), #0 ;R8 0
add R8, R8, #10; R8 10
st R8, (R6)9; (b=10) Stiva NoName
st R6, (R6)7; (R6)main Stiva NoName (Dynamic
Link)
add R6, R6, #5; R6 (R6) +5, actualizare nou nceput
al stivei de date
jsr NoName; apel funcie, R7PCnext i
PC(NoName)
PCnext: ld R8, (R6)5
st R8, (R6)4

2) Startarea funciei apelate (NoName)

ncepe cu instruciunea care salveaz n stiva de date a funciei
NoName adresa de revenire n funcia principal main(). Adresa de revenire

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
260 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

se afl stocat n registrul R7 (conine adresa urmtoare a instruciunii JSR
NoName)
st R7, (R6)1

3) Sfritul funciei apelate (NoName)

ld R8, (R6)7
st R8, (R6)0; Se memoreaz valoarea lui y n RET VALUE
din stiva de date
ld R7, (R6)1; R7 RET ADDRESS
ld R6, (R6)2; R6 adresa de nceput a stivei de date
aferente funciei main ().
RET; PC adresa de revenire n funcia main().

4) Revenirea n funcia apelant (main)

JSR NoName; pe aceast instruciune se face revenirea (la
finele execuiei acesteia)
PCnext: ld R8, (R6)5; R8valoarea lui y din funcia NoName
st R8, (R6)4; se face asignarea : b=NoName(a,10).

Obs.: Stivele de date asociate funciilor C sunt structuri de tip tablou, avnd
o adres de baz stocat n registrul R6 i un numr (variabil) de elemente.
Avnd n vedere frecvena deosebit a accesrii acestor structuri de date,
modul de adresare indexat (R
baz
+ offset) este esenial n facilitarea
manipulrii datelor prin aceste structuri de tip tablou [Vin06].
10.3. EXERCIII I PROBLEME
1. Completai cu instruciunile C corespunztoare n tabelele din partea
dreapt astfel nct din punct de vedere logic s se realizeze acelai lucru ca
i n stnga (cel descris de secvena asamblare LC-3).





U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 261
a)


LDR R0, R6, #3
LDR R1, R6, #4
STR R0, R6, #4
STR R1, R6, #3


main()
{
int v1;
int v2;
int temp;





}

b)


LDR R0, R6, #3
NOT R0, R0
LDR R1, R6, #4
NOT R1, R1
AND R2, R0, R1
NOT R2, R2
STR R2, R6, #5


main()
{
int v3;
int v4;
int v5;





}

c)

AND R0, R0, #0
ADD R0, R0, #15
STR R0, R6, #4
FL1 AND R0, R0, #0
STR R0, R6, #3
FL1_2 LDR R0, R6, #3
main()
{
int i;
int j;
int k;





U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
262 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

LDR R1, R6, #4
NOT R1, R1
ADD R1, R1, #1
ADD R0, R0, R1
BRzp DONE
F LDR R0, R6, #5
ADD R0, R0, #1
STR R0, R6, #5

LDR R0, R6, #3
ADD R0, R0, #2
STR R0, R6, #3
BRnzp FL1_2
DONE



















}

2. Referitor la sintaxa limbajului C rspundei la urmtoarele ntrebri legate
de funcii:
a) Ce reprezint declaraia unei funcii? Care este scopul declarrii?
b) Ce este prototipul unei funcii?
c) Ce reprezint definiia unei funcii?
d) Ce sunt parametrii efectivi ai unei funcii? Dar parametrii formali ai
funciei?

3. Ce valori sunt afiate pe ecran n urma execuiei programului de mai jos?
Ce modificri trebuie aduse codului surs pentru a afia pe ecran valorile: 2
3?

#include <stdio.h>
void MyFunc(int z);
main()
{
int z=2;
MyFunc(z);
MyFunc(z);
}

void MyFunc(int z)
{
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Faciliti ale mainii pentru implementarea n hardware a funciilor din programele de nivel
nalt. Stiva de date aferent funciilor 263
printf("%d ",z);
z++;
}

4. Cele dou seciuni de cod de mai jos (una n C, cealalt n asamblare LC-
2) trebuie s realizeze acelai lucru. Completai cele trei spaii goale cu cte
o instruciune fiecare.

int x;
int *y;
int z;

x = 0;
LD R0, X
AND R0, R0, #0
ST R0, X
.
.
.
.
x++;
LD R0, X
ADD R0, R0, #1
__________________
____________
LEA R0, X
ST R0, Y
z = (*y) + 1;
__________________
ADD R0, R0, #1
ST R0, Z

5. Se consider urmtorul program care citete de la tastatur dou caractere
i afieaz maximul dintre ele prin intermediul funciei Max.

#include <stdio.h>
char Max ( char, char ); /* prototype */
int main ( ) /* main returns an int */
{
char ch1,ch2,answer;

printf ("Welcome to Max of 2 Chars!\n");
printf ( "Enter 2 characters:\n" );
scanf ( "%c%c", &ch1, &ch2);
answer = Max(ch1, ch2);
printf ("Max is : %c", answer);
return 0;
} /* end of main function */

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
264 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software


char Max (char ch1, char ch2)
{
char higher;
if ( ch1 > ch2 )
higher = ch1;
else
higher = ch2;
return higher;
}

a) Realizai tabela de simboluri generat de compilator pentru programul
dat.
b) Presupunnd c de la tastatur se introduc caracterele A i Q i c
valoarea iniial a registrului R6 (stack pointer) este 0x4000, descriei
stiva de date aferent funciilor main() i Max() n cteva momente
importante: (iniial cnd doar funcia main este activ, dup citirea celor
dou caractere de la tastatur cnd i funcia Max devine activ la apel,
cnd funcia Max este activ nainte de revenire cnd exist rezultatul
disponibil, dup predarea rezultatului de ctre Max cnd doar funcia
main a mai rmas activ, nainte de terminarea programului).
c) Realizai translatarea n cod asamblare LC-3 a funciei Max din C.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s

11. INTRODUCERE N RECURSIVITATE.
COMPARAIA DINTRE RECURSIV I ITERATIV
N ALEGEREA ALGORITMULUI DE
REZOLVARE A PROBLEMELOR. AVANTAJE /
DEZAVANTAJE
11.1. SCOP I COMPETENE NECESARE
Capitolul de fa i propune o introducere n mecanismul
recursivitii, bazndu-se pe noiunile anterioare de funcie (subprogram,
subrutin, etc) i stiv de date aferent funciei. Competenele generale care
trebuiesc dovedite de ctre cei care citesc acest curs se refer la capacitatea
de a descompune o problem n subprobleme, de prelucrare a datelor
utiliznd subprograme i respectiv de a aplica anumii algoritmi n
prelucrarea structurilor de date. Scopul lucrrii este de cunoatere i
nelegere a mecanismului recursivitii (dup unii autori recursivitatea pare
magic, dincolo de nelegere). Se va analiza comparativ modul de
rezolvare recursiv i iterativ al unor probleme. Se va lmuri folosind diferite
exemple necesitatea aplicrii condiiei de consisten i n ce situaii este
util rezolvarea recursiv a unor probleme.
11.2. RECURSIVITATEA
Reprezint o noiune fundamental a informaticii i face parte din
domeniul general al algoritmilor i structurilor de date. Constituie o tehnic
de programare care permite o exprimare extrem de concis i clar a
algoritmilor de rezolvare a unor probleme complexe. Recursivitatea din
programare este derivat n mod natural (din necesiti practice) din
noiunea matematic [Cor90, Sto98]. Astfel, n matematic o noiune este

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
266 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
definit recurent (recursiv) dac n cadrul definiiei apare nsi
noiunea care se definete. La scrierea unui algoritm recursiv este suficient
s gndim ce se ntmpl la un anumit nivel, pentru c la orice nivel se
ntmpl exact acelai lucru. Recursivitatea n programare a aprut dup
anii 80 odat cu limbajele de nivel nalt moderne Algol, Pascal, C. Fortran
i Cobol nu permiteau scrierea programelor recursive. Un motiv poate fi de
natur istoric. Capacitatea redus a memoriei sistemelor din anii 70
80 a condus la constrngeri privind execuia programelor procedurale ntr-
un spaiu mic de adrese (de memorie) i alocri reduse pe stiv sau n
heap. Recursivitatea reprezint un mecanism general de elaborare a
programelor constnd n posibilitatea ca un subprogram s se
autoapeleze. Exist dou tipuri de recursivitate:
direct: dac apelul subprogramului apare chiar n corpul su. Ex:
factorial, fibonacci, fractali precum i alte probleme din medicin
informaia genetic coninut n nucleul unei celule se repet la
diferite scri.
indirect: dac apelul subprogramului recursiv apare n
instruciunea (compus) a unui alt subprogram care se apeleaz
direct sau indirect din subprogramul recursiv. Ex: evaluarea unei
expresii, forma polonez prefixat a unei expresii.
11.2.1. STIVA DE DATE ASOCIAT UNEI FUNCII [Patt03]
U St la baza recursivitii.
U Zon a memorie de date care funcioneaz dup principiul LIFO.
U Este gestionat implicit de ctre compilator.
Stiva de date ncepe la o locaie de memorie determinat de ctre
proiectanii sistemului de operare i crete nspre adrese
descresctoare. n limbajul C, execuia programului ncepe cu un
apel al sistemului de operare ctre funcia main. n acest punct,
stiva datelor funciei main se structureaz n memorie, iar un
registru pointeaz la nceputul ei.
n translatarea apelului unei funcii, compilatorul genereaz
automat cod main pentru a nscrie o stiv de date n memorie. n
translatarea revenirii dintr-o funcie apelat n funcia apelant,
compilatorul genereaz automat cod pentru preluarea stivei de date
din memorie.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 267
Pentru fiecare (auto)apel se creeaz un alt nivel pe stiva de date, n
care se depun noile valori parametrii noului apel.
U La fiecare apel de funcie (procedur) sunt salvate automat n stiv (nu
neaprat n aceast ordine, n funcie de ISA-ul fiecrui procesor):
Valorile parametrilor de tip valoare;
Adresele parametrilor de tip referin;
Variabilele locale ale subprogramului;
Adresa de revenire n (sub)programul apelant;
Exemplu:
Structura stivei de date asociate unei funcii C este prezentat n figura
urmtoare, corespunztor secvenei de program de mai jos.
int NoName (int a, int b){
int w,x,y;
/* Corpul funciei */
.
return w;
}

Figura 11.1. Structura stivei de date
asociate funciei NoName n cadrul
arhitecturii LC-3
RETURN VALUE: aici se plaseaz valoarea variabilei w, chiar nainte de
revenirea din funcie. Acest cmp exist i dac funcia
nu ar returna practic nici o valoare.
RETURN ADDRESS (PC): reprezint PC-ul de revenire n funcia
apelant.
DYNAMIC LINK: memoreaz adresa de nceput a stivei de date aferente
funciei apelante.

U Orice subprogram recursiv trebuie s satisfac o condiie de consisten
(procesul de autoapelare trebuie s se opreasc dup un numr finit de
pai. Altfel va aprea eroarea Stack Overflow!).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
268 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
U Exemplu de funcie inconsistent:


ntruct nu pot fi calculate valorile funciei pentru n>0.
Pentru a nelege implementarea apelurilor / revenirilor funciilor, se
consider cel mai simplu i reprezentativ exemplu de subprogram recursiv
factorialul unui numr natural n.
fact(n)=n!=n(n-1)!

Implementare iterativ
long factorial(int n){
int i;
long f=1;

for(i=1;i<=n;i++)
f=f*i;
return f;
}
Implementare recursiv
long fact(int n){
if(n<=1)
return 1;
else
return n*fact(n-1);
}



Figura 11.2. Imaginea stivei pentru calculul valorii fact(4) n implementarea
recursiv

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 269
n continuare sunt ilustrate dou exemple n care se impune rezolvarea
recursiv a problemei (algoritmul de cutare binar i respectiv problema
turnurilor din Hanoi). Avantajul, n cazul primului exemplu l reprezint i
timpul logaritmic de execuie fa de cel polinomial (liniar) dac rezolvarea
problemei ar fi fost iterativ (cutare direct parcurgere tablou i
comparare cu fiecare element).

Cutare Binar
Considerndu-se o grup de studeni ordonat alfabetic se cere ca printr-un
numr ct mai mic de cutri s se determine dac un anumit student se afl
n list sau nu. Algoritmul de rezolvare presupune urmtorii pai:
0. Dac lista are cel puin 2 studeni atunci se execut paii, altfel
nseamn c nu s-a gsit studentul cutat n list:
1. Se verific dac studentul cutat este cel din mijlocul listei.
2. Dac rezultatul cutrii este cu succes algoritmul se ncheie, dac
nu atunci urmeaz:
3a. Dac numele studentului cutat este mai mare (alfabetic) dect al
studentului din mijlocul listei atunci algoritmul de cutare se
reaplic pe jumtatea superioar a listei (de la mijloc spre
sfritul alfabetului).
3b. Dac numele studentului cutat este mai mic (alfabetic) dect al
studentului din mijlocul listei atunci algoritmul de cutare se
reaplic pe jumtatea inferioar a listei (de la nceputul
alfabetului spre mijloc).

Cutare Binar - Pseudocod

FindExam(studentName, start, end){
halfwayPoint = (end + start)/2;
if (end < start)
ExamNotFound(); /* nu mai am dect cel mult un
student n list */
else if (studentName == NameOfExam(halfwayPoint))
ExamFound(halfwayPoint); /* Student gsit! */
else if (studentName < NameOfExam(halfwayPoint))
/*caut n jumtatea
inferioar*/
FindExam(studentName, start, halfwayPoint - 1);
else /* caut n jumtatea superioar */
FindExam(studentName, halfwayPoint + 1, end);
}

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
270 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

Turnurile din Hanoi
Se dau trei tije simbolizate prin A (surs), C (destinaie) i B
(manevr). Pe tija A se gsesc n discuri de diametre diferite, aezate n
ordine descresctoare a diametrelor privite de jos n sus (discul 1 se afl n
vrf iar n este la baz). Se cere s se mute discurile de pe tija A pe tija C,
folosind tija B ca tij de manevr, respectndu-se urmtoarele reguli:
+ La fiecare pas se mut un singur disc.
+ Nu este permis s se aeze un disc cu diametrul mai mare peste un disc
cu diametrul mai mic.


Figura 11.3. Turnurile din Hanoi Configuraia iniial

Figura 11.4. Turnurile din Hanoi Descompunerea problemei n subprobleme

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 271

De fapt, prima subproblem este identic cu problema iniial, cu deosebirea
c sunt mai puine discuri de mutat i tijele i-au schimbat ordinea (A este
surs, B este destinaie i C manevr).
"Mut primele n-1 discuri de pe A pe B."
A doua subproblem, i ea coincide n mare parte cu problema iniial,
deosebirea reprezentnd-o numrul mai mic de discuri de mutat i ordinea
tijelor (B este surs, C este destinaie i A manevr).
" Mut cele n-1 discuri de pe B pe C."
Se observ astfel caracterul recursiv al problemei. Condiia de ieire din
recursivitate este atunci cnd n=1 (un singur disc care se va muta de pe
surs pe destinaie). Pentru aceast operaie nu este nevoie de tij de
manevr.
" Mut discul cu diametrul cel mai mare de pe A pe C."

MoveDisk(diskNumber, startPost, endPost, midPost){
if (diskNumber > 1) {
/* Mut primele n-1 discuri de pe startPost pe midPost */
MoveDisk(diskNumber-1, startPost, midPost, endPost);
printf("Muta discul %d de pe %d pe %d.\n", diskNumber,
startPost, endPost);
/* Mut cele n-1 discuri de pe midPost pe endPost.*/
MoveDisk(diskNumber-1, midPost, endPost, startPost);
}
else
printf("Muta discul 1 de pe %d pe %d.\n", startPost, endPost);
}


Observaii:
Pentru orice algoritm recursiv exist unul iterativ care rezolv
aceeai problem.
Rezolvarea recursiv a problemelor simplific munca
programatorului dar complic lucrurile la nivelul codului obiect
deoarece operaiile cu stiva presupun un consum suplimentar de
timp i memorie, timpul necesar de calcul pentru algoritmul iterativ
fiind mult mai mic.
Consecin: Nu ntotdeauna alegerea unui algoritm recursiv
reprezint un avantaj.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
272 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Exemplificare: irul lui Fibonacci ir recurent de ordinul 2.


O implementare C recursiv a calcului elementului fib(n) din cadrul
acestui ir recurent este prezentat mai jos (stnga):


#include<stdio.h>
int fib(int n);
main (){
int in;
int numar;
printf(Care termen din ir?);
scanf(%d, &in);
numar = fib(in);
printf(Termenul are valoarea
%d\n, numar);
}

int fib(int n)
{
if (n = = 0 || n = = 1)
return 1;
else
return (fib(n-1) + fib(n-2));
}

Implementare iterativ
#include<iostream.h>
main (){
int n, f0=0,f1=1,f2;
cout<<n=;cin>>n;
if(!n)
cout<<f0;
else
if(n==1)
cout<<f1;
else{
for(i=2;i<=n;i++){
f2=f0+f1;
f0=f1;
f1=f2;
}
cout<<f2;
}
}

Avantaje:
- irul Fibonacci este utilizat n probleme de sortare, cutare i
strategii de joc (IA).
- A fost folosit n matematic de Edmond Lucas pentru a arta c 2
127
-
1 este numr prim [Cor90].

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 273

Figura 11.5. Ineficiena recursivitii n cascad calculul unor termeni de foarte
multe ori
Dezavantaje (recursivitate n cascad):
- Pentru calculul lui fib(n) este necesar s se cunoasc fib(n-1) i fib(n-
2). Parametrii acestor funcii sunt depui n stiv. Procedeul continu
pn este calculat fib(n-1), apoi se reia calculul lui fib(n-2). Acest
lucru este extrem de ineficient pentru valori mari ale lui n (n>100).
n figura urmtoare 11.6 se poate observa trace-ul apelurilor funciei
fib(3) modul de transmitere al argumentelor i ordinea de calcul a
termenilor.
- Varianta de calcul recursiv presupune recalcularea unei valori de mai
multe ori, varianta iterativ fiind liniar. Astfel, pentru calculul lui
fib(5) termenul fib(3) a fost calculat de 2 ori iar termenul fib(2) a fost
calculat de 3 ori determinnd creterea stivei prin faptul c exist
instane dinamice multiple ale funciei apelate. Dezavantajul este
mult mai acutizat pentru valori foarte mari ale lui n De cte ori
este calculat i folosit fib(2) n calculul lui fib(100) ? n aceste
situaii (recursivitate n cascad), o soluie posibil (neimplementat
nc hardware n microprocesoarele comerciale) o reprezint
reutilizarea dinamic a instruciunilor (rezultatul acestora) att la
nivel de funcie coarse grain ct i la nivel de instruciune main
fine grain.

fib(3)
fib(2)
fib(1)
fib(0)
fib(1)
Figura 11.6. Trace-ul apelurilor funciei fib(3)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
274 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software


Figura 11.7. Variaia stivei (i a indicatorului de stiv R6) n cazul apelurilor
funciei fib(3)
11.3. IMPLEMENTAREA RECURSIVITII LA
NIVELUL STIVEI DE DATE
Esena implementrii recursivitii const n manipularea stivelor de
date asociate funciilor dinamice (adic funciilor n curs de execuie la un
moment dat). La implementarea algoritmilor este uzual s asociem obiecte
locale funciilor, precum variabile, constante, tipuri, obiecte care nu au
semnificaie n afara funciei respective. Definiiile parametrilor funciilor
recursive, a variabilelor locale i globale sunt fundamentale pentru
execuia programului [Patt03]. Astfel, variabilele folosite pentru a
parcurge valorile permise componentelor unei soluii trebuie s fie locale
funciei, altfel nu se genereaz corect soluia. Definiiile bine alese pot
optimiza spaiul de memorie alocat pe stiv i timpul de execuie. De fiecare
dat cnd o funcie este apelat recursiv, pe stiva sistemului se creaz un
nou set de variabile locale. Dei noile variabile locale au acelai nume cu
cele existente nainte de activarea funciei, valorile lor sunt distincte, i orice
conflict de nume este evitat de aplicarea regulilor domeniilor de vizibilitate
a identificatorilor. Aceste reguli spun c identificatorii se refer ntotdeauna
la ultimul set de variabile creat.
n continuare se prezint, la nivel de cod obiect, implementarea
funciei Fib(int n), cu referire la stivele de date accesate [Vin03, Patt03].


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 275

Figura 11.8. Stiva de date asociat funciei Fib(n)
Fib:
STR R7, R6, #1; salveaz PC revenire n stiva de date
LDR R0, R6, #3; R0 valoare n
BRz Fib_end; dac n=0 atunci se ncheie recursivitatea,
fib(0)=1
ADD R0,R0, # -1
BRz Fib_end; i dac n=1 se ncheie recursivitatea, fib(1)=1

; temp = fib(n-1)
LDR R0,R6, #3; se calculeaz n-1 R0 n
ADD R0,R0, # -1; R0 n-1
STR R0, R6, #8; pune (n-1) ca parametru n stiva funciei
fib(n-1)
STR R6, R6, #7; pune adresa de nceput a stivei funciei fib(n)
n stiva funciei fib(n-1)
ADD R6, R6,#5; pune n R6 noua adres de nceput aferent
stivei de date a lui fib(n-1)
JSR Fib; apel funcie fib (recursiv)
LDR R0, R6, #5; R0 valoarea returnat de fib(n-1)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
276 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
STR R0, R6, #4; memoreaz variabila local aferent stivei de
date a lui fib(n)

; R0 = fib(n-2)
LDR R0, R6, #3; R0 (n-1)
ADD R0, R0, #-1; R0 (n-2)
STR R0, R6, #8
STR R6, R6, #7
ADD R6, R6, #5; pregtete stiva de date a lui fib(n-2)
JSR Fib; apel recursiv
LDR R0, R6, #5; R0 fib(n-2)

; return R0 + temp
LDR R1, R6, #4; R1 fib(n-1)
ADD R0, R0, R1; R0 fib(n-1) + fib(n-2)
STR R0, R6, #0; fib(n) RET VALUE
LDR R7, R6, #1; reface R7 (adresa de revenire n programul
apelant)
LDR R6, R6, #2; revenire n stiva precedent
RET
Fib_end:
AND R0, R0, #0 ; set R0 = 1
ADD R0, R0, #1
STR R0, R6, #0 ; store 1 to return value
LDR R7, R6, #1; reface R7, R6 (return address i stack
pointer)
LDR R6, R6, #2
RET

Obs: Legtura ntre arhitectura unui microprocesor i aplicaiile scrise n
limbaje de nivel nalt este una complex i extrem de subtil. Exist
microarhitecturi de calcul optimizate n mod special n vederea rulrii
eficiente a unor clase de aplicaii bine precizate scrise n anumite limbaje de
nivel nalt (ex. microprocesoare Java) [Patt03].

Concluzie: Este necesar o comparaie ntre cele dou moduri
(iterativ i recursiv) de rezolvare a problemei date, nu doar vzut
avantajul introdus de simplitatea i compactitatea codului din punct
de vedere al programatorului.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 277
11.4. TIPURI DE FUNCII RECURSIVE. ELIMINAREA
RECURSIVITII
Recursivitate liniar
Se caracterizeaz prin faptul c dou apeluri recursive ale lui f pot
apare numai n ramificaii diferite ale aceleiai alternative.

Recursivitatea liniar repetitiv
Este un exemplu de recursivitate liniar. Apelul unei funcii de
numete simplu, dac este ultima aciune din corpul unei funcii. O funcie
sau un sistem de funcii avnd numai apeluri simple, este liniar recursiv
repetitiv. Exemplu: factorialul. Codul de mai jos reprezint prototipul unei
recursiviti liniar repetitive.

Tip2 r(Tip1 x) {
if (b(x)) r((k(x));
else h(x);
}

unde r este funcia recursiv liniar repetitiv, b este o funcie boolean de
parametru x, reprezentnd condiia de continuare a recursivitii, iar k i h
reprezint funcii de parametru x.

Recursivitate neliniar
n funciile recursiv neliniare, dou sau mai multe apeluri recursive
pot apare n aceeai ramificaie a unei alternative.

Recursivitate cascadat
n corpul funciei f pot apare alte apeluri ale lui f, rezultatele acestor
apeluri fiind legate de operatori. Exemplu: calcularea numerelor lui
Fibonacci.

int fibonacci(int n) {
if (n<=1) return n;
else return fibonacci(n-2) + fibonacci(n-1);
}
Eliminarea recursivitii liniare
Forma nerecursiv a unui algoritm este de preferat formei recursive,
din punct de vedere al timpului de execuie i al memoriei ocupate.
Avantajul formei recursive l constituie n primul rnd facilitatea i elegana

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
278 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
scrierii programelor (de exemplu, comparai programul care rezolv
problema turnurilor din Hanoi n cele dou variante iterativ i recursiv).
n alegerea cii recursive sau nerecursive (iterative) de rezolvare a unei
probleme, programatorul trebuie s stabileasc prioritile n realizarea
programului, analiznd complexitatea problemei, naturaleea exprimrii,
uurina proiectrii i testrii programului, eficiena n execuie. Astfel, dac
problema e de complexitate redus, ns se cere eficien maxim, se va
alege varianta nerecursiv. Varianta recursiv este preferat acolo unde
nlocuirea complexitii presupune tehnici de programare speciale,
algoritmul pierzndu-i naturaleea.

Algoritmul general de eliminare a recursivitii liniare este urmtorul:

i. Se declar o stiv, care se iniializeaz ca fiind vid. Pe acest stiv
urmeaz s se salveze parametrii formali, i variabilele locale
funciei recursive.
ii. Ct timp condiia de continuare a recursivitii e ndeplinit, se
efectueaz urmatoarele:
iii. Se salveaz pe stiv valorile actuale pentru argumentele
funciei recursive i variabilele locale.
iv. Se execut instruciunile funciei recursive.
v. Se modific valorile argumentelor funciei recursive.
vi. Cnd condiia de continuare nu mai e ndeplinit, dac stiva nu e
goal, se aduce un set de variabile de pe stiv i se calculeaz
valoarea dorit (dupa apelul funciei recursive) eventual se execut
instruciunile de dup apelul funciei recursive, apoi se trece la pasul
ii.
11.5. EXERCIII I PROBLEME
1. La fiecare apel recursiv al unui subprogram, n memoria stiv sunt
salvate:
a) adresa de revenire, valorile variabilelor locale i a parametrilor
transmii prin referin.
b) adresa de revenire i valorile variabilelor globale.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 279
c) adresa de revenire, valorile variabilelor locale i a parametrilor
transmii prin valoare i adresele parametrilor transmii prin
referin.
d) adresa de revenire, valorile variabilelor locale i globale.

2. Care dintre urmtoarele afirmaii sunt corecte ?
a) Programul principal / funcia main() (Pascal / C) nu poate conine un
autoapel.
b) Un subprogram este recursiv dac i numai dac nu conine mai mult
de un autoapel.
c) Orice subprogram recursiv se poate implementa i iterativ.
d) Un subprogram recursiv trebuie s aib cel puin un parametru
transmis prin valoare.

3. Se consider urmtorul subprogram recursiv:
int p(int n, int x)
{
if(x==n) return 1;
else
if(n%x==0) return 0;
else
return p(n, x+1);
}
n urma apelului p(n,2) funcia va returna valoarea 1 dac i numai dac:
a) numrul natural n nu este prim.
b) numrul natural n este prim.
c) numrul natural n este par.
d) numrul natural n este impar.

4. S se realizeze un subprogram recursiv, care primind ca parametru un
numr ntreg n, s ntoarc printr-un alt parametru cifra sa maxim.

5. Scriei o funcie recursiv care s calculeze suma S, unde n va fi
transmis ca i parametru:
S = 1 2
2
+ 3
2
4
2
+ n
2

6. a) Adresa de revenire dintr-o funcie recursiv este ntotdeuna aceeai ?
De ce DA sau de ce NU ? Argumentai.
b) Pe durata execuiei unui program principal o subrutin (nerecursiv)
este apelat exclusiv printr-o instruciune JSR (apel de subrutin

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
280 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
JAL la MIPS sau CALL la Intel) situat la o anumit adres n acest
program, de 723 de ori. De ce este dificil de predicionat n acest caz
instruciunea RET (revenirea n programul apelant) de la finele
subrutinei apelate?

7. Se consider urmtoarea secven de program C:

#include <stdio.h>
int Power(int a, int b);

int main(void)
{
int x, y, z;
printf(Introduceti doua numere: );
scanf(%d %d, &x, &y);
if (x>0 && y>0)
z = Power(x,y);
else
z = 0;
printf(Rezultatul este %d , z);
}

int Power(int a, int b)
{
if (a<b)
return 0;
else
return 1 + Power(a/b,b);
}
Se cere:
a) Ce afieaz programul dac se citesc de la tastatur perechile:
i) 4 9
ii) 27 5
iii) -1 3
b) Ce calculeaz funcia Power() ?
c) Descriei un instantaneu (o imagine a zonei de activare a stivei de date
aferent funciei Power) n cazul apelului Power(11,7).





U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Introducere n Recursivitate. Comparaia dintre recursiv i iterativ n alegerea algoritmului
de rezolvare a problemelor. Avantaje / dezavantaje 281



11
7


Zona de Activare pentru
Power





R6

Zona de Activare pentru
Power

8. Se consider urmtoarea secven de program C:

int Sigma (int k)
{
int t;

t = k-1;
if(k==0)
return 0;
else
return (k + Sigma(t));
}
Se cere:
a) Transformai funcia recursiv ntr-una iterativ care s realizeze
acelai lucru. Se presupune c sigma este apelat doar cu parametrii
pozitivi.
b) Considernd exact 1 KB de memorie contigu disponibil exclusiv
pentru stiva de date aferent apelului recursiv al funcie Sigma, i tiind
c adresele i numerele ntregi sunt pe 16 bii, determinai cte apeluri
ale funciei pot fi fcute (valoarea maxim a lui k) pentru a nu obine
mesajul Stack Overflow. Se consider c alte variabile temporare nu
ocup spaiul pe stiva de date.




U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s

12. POINTERI I TABLOURI. TRANSFERUL
PARAMETRILOR PRIN REFERIN. POINTERI
SPRE FUNCII
12.1. INTRODUCERE
n acest capitol sunt introduse dou construcii de programare simple
dar (foarte puternice) extrem de importante n manipularea de ctre limbajul
de nivel nalt (C, C++, Java, Pascal) a coninutului locaiilor de memorie
pointerii i tablourile. Pentru nceput se reamintete (vezi capitolul 10) c
o variabil reprezint o locaie de memorie caracterizat prin adres i
coninut. Pointerul
18
reprezint adresa unei zone de memorie; el face
posibil accesul indirect la coninutul respectivei locaii. Din punct de
vedere al coninutului memoriei indicate, se disting urmtoarele categorii de
pointeri:
Pointeri ctre (adrese de) date conin adresa unei variabile.
Pointerii ctre (adrese de) funcii conin adresa codului
executabil a unei funcii. Dei n C, o funcie nu este o variabil
este posibil a se referi pointeri la funcii. Acetia pot fi atribuii,
plasai n tablouri, transmii ca parametrii altor funcii.
Pointeri generici (pointeri void *) conin adresa unui obiect
oarecare, de orice tip. Prin declararea void * este anunat
compilatorul s nu verifice tipul datei spre care se pointeaz. Se
utilizeaz atunci cnd nu se cunoate exact tipul de date (adresa i
coninutul) care va fi instaniat n mod dinamic la execuie.
nelegerea i utilizarea corect a pointerilor este esenial pentru
acurateea i eficiena aplicaiilor scrise n limbajele de nivel nalt (C, C++,
Java). Trei motive justific acest lucru:
Pointerii ofer posibilitatea de a modifica argumentele de
apelare a funciilor (transferul parametrilor prin referin).

18
Termenul de pointer a fost preluat n limba romn i poate fi folosit cu sensul de
referin, indicator de adres, localizator.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 283
Pointerii permit (faciliteaz) rezervarea (alocarea) dinamic a
memoriei (doar n momentul execuiei se cunoate adresa real i
coninutul unei variabile i nu n etapa de compilare). Acest lucru
este foarte important mai ales atunci cnd anumite variabile alocate
static (n faza de compilare) nu sunt utilizate dect pentru foarte
scurt timp sau chiar de loc pe parcursul execuiei aplicaiei vezi
cazul tablourilor de dimensiuni foarte mari. Alocarea de zone de
memorie i eliberarea lor n timpul execuiei programelor permite
gestionarea optim a memoriei de ctre programe. Cu ajutorul
pointerilor pot fi create diferite modaliti de organizare a datelor n
structuri, care cresc sau descresc pe durata execuiei programelor
(un exemplu ar fi stiva de date aferent funciilor) [Patt03].
Pointerii pot mbunti eficiena anumitor rutine.
Pe lng aceste faciliti, pointerii impun ns i responsabilitate
atunci cnd sunt folosii. Pointerii neiniializai dar utilizai n operaii (sau
care conin valori neadecvate) pot determina blocarea sistemului de operare.
De asemenea, pointerii folosii n mod incorect implic erori greu de
depistat.
ntruct pointerul reprezint adresa unei zone de memorie rezult c
orice operaie cu pointeri presupune citirea / scrierea n memorie (iar n
cazul celor neiniializai ntr-o zon de memorie necunoscut) [Zah04].
Efectul operaiei de citire nu este att de grav din punct de vedere al
funcionalitii sistemului ci doar strict din punct de vedere al aplicaiei, care
va folosi astfel o valoare eronat. Problema cea mai neplcut la folosirea
pointerilor neiniializai poate apare la atribuirea (asignarea) unei valori
coninutului acestora. Scrierea ntr-o zon de memorie necunoscut poate
distruge (altera) chiar codul sau datele proprii, sau mai ru, zone necesare
sistemului de operare (apeluri sistem, rutine de tratare a diverselor
ntreruperi hardware, etc). Efectul se va vedea doar mai trziu n timpul
execuiei programului. Exemplul urmtor ilustreaz un caz de pointer
neiniializat.

void main(void)
{
int x, *p;
x = 12;
*p = x;

}


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
284 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Aceast secven de cod ilustreaz o eroare destul de frecvent i greu
de sesizat, care atribuie valoarea 12 unei locaii de memorie necunoscute,
deoarece pointerul p nu a fost iniializat n momentul n care s-a executat
instruciunea *p = x;. Pentru aplicaii de dimensiuni reduse, dei pointerul
nu este iniializat este probabil ca el s indice spre o adres sigur (una
care nu intr n zona de cod, date sau aferent sistemului de operare). ns,
cu ct aplicaia este mai mare i mai complex (folosirea tablourilor de
pointeri sau liste nlnuite), efectul acestei greeli poate deveni neplcut
i chiar dezastruos. O convenie uzual n cazul aplicaiilor cu pointeri,
respectat de majoritatea programatorilor n C/C++, sugereaz ca: unui
pointer care nu indic efectiv o locaie de memorie valid i se d valoarea
NULL (0). Astfel, un pointer NULL se consider c nu indic spre nimic i
nu ar trebui folosit.
O ultim observaie legat de iniializarea pointerilor se refer la cazul
n care un pointer ia valoarea altui pointer (de exemplu, int *p, int *q; p=q;).
n aceast situaie se pierde legtura cu locaia spre care indicase p, iar
locaia spre care referise q este acum partajat att de p ct i de q, orice
modificare la respectiva locaie din partea unuia dintre ei afectndu-i pe
ambii pointeri (vezi exemplul din figura 12.1).
12.2. SEMNIFICAIE I DECLARARE
De regul, pointerii sunt utilizai pentru a face referire la date
cunoscute prin adresele lor. Declaraia unui pointer este asemntoare cu
declaraia oricrei variabile, singura deosebire fiind aici c, numele
pointerului este precedat de caracterul * [Neg97].

Tip *nume_pointer; /* unde nume este un pointer care refer spre o
zon de memorie care conine date de tipul
Tip.*/

n construcia *nume_pointer indicat mai sus, caracterul * se
consider ca fiind un operator unar care furnizeaz valoarea din zona de
memorie a crei adres este coninut de nume_pointer. Operatorul unar *
are aceeai prioritate ca toi ceilali operatori unari din C.
n declaraia int *p; tipul int stabilete faptul c p conine adrese de
zone de memorie alocate datelor de tip int. Declaraia lui p poate fi

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 285
interpretatat astfel: *p reprezint coninutul zonei de memorie spre care
indic p, iar acest coninut este de tip int. De exemplu, dac p este un pointer
care are ca valoare adresa zonei de memorie alocat variabilei ntregi a,
atunci *p reprezint chiar valoarea variabilei a. Pentru atribuirea unui
pointer p a adresei unei variabile (iniializarea pointerului) se va folosi
operatorul unar &. De exemplu, declaraiile int a; int *p = &a; exprim de
fapt trei operaii: o declaraie a variabilei a (alocare static a memoriei int
;) o declaraie a unui pointer spre tipul int (int *p;) i o iniializare a lui p
cu adresa variabilei a (p = &a;).
n continuare sunt prezentate cteva echivalene de construcii de
limbaj folosind pointeri.

Se consider declaraiile:
int x, y;
int *p;
a
p = &x;
y = x + 100;
y= *p + 100;
p = &x;
x = y;
*p= y;
p = &x;
x++;
(*p)++;

Exemplul urmtor ilustreaz (i grafic) instruciunile prin care un
pointer este iniializat i cum se modific referinele la variabile pe parcursul
unei secvene de program.

void Exemplu_cu_Pointer(){
int a = 1;
int b = 2;
int c = 3;
int* p;
int* q;

// Coninutul memoriei n acest punct (T1) este urmtorul (pointerii p
i q nu au fost nc iniializai).


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
286 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software


p = &a; // este iniializat p s indice spre variabila a, adresa lui a
fiind cunoscut n momentul compilrii
q = &b; // este iniializat q s indice spre variabila b, adresa lui b
fiind cunoscut i ea n momentul compilrii

// Coninutul memoriei n acest punct (T2) este urmtorul:



c = *p;
p = q; // se pierde referina anterioar a lui p (care era spre a) i va
partaja mpreun cu q aceeai referin spre b.
*p = 13; // prin modificarea efectuat asupra valorii de la locaia spre
care pointeaz p se modific i *q.
// Coninutul memoriei n acest punct (T3) este urmtorul:


}
Figura 12.1. Aplicaie C folosind pointeri

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 287
12.3. ALOCAREA I ACCESAREA DE VARIABILE.
LEGTURA DINTRE NIVELUL HIGH I LOW VZUT
PRIN INTERMEDIUL MODURILOR DE ADRESARE
n cadrul LC-3 ISA [Patt03] accesul la coninutul unei locaii de
memorie corespunztoare unei variabile alocate static poate fi fcut prin
intermediul instruciunii LD R
dest
, Adres (mod de adresare direct) dac
se afl ntr-un spaiu de (+255 / -256) locaii fa de adresa instruciunii
curente i respectiv, folosind succesiunea de instruciuni (1) LEA R
baz
,
Adres i (2) LDR R
dest
, R
baz
, #0 cu mod de adresare indexat, mai ales
atunci cnd locaia de memorie se afl ntr-un spaiu ndeprtat cu cel puin
256 de locaii fa de PC-ul instruciunii curente. Accesul la coninutul
unei locaii spre care indic o variabil de tip pointer (alocare dinamic a
memoriei) se face folosind o instruciune de acces la memorie n mod de
adresare indirect LDI R
dest
, Adres sau, dup cum poate fi observat i n
exemplul urmtor, printr-o succesiune de trei instruciuni: (1) LEA R
baz
,
Adres, (2) LDR R
cont
, R
baz
, #0 i (3) LDR R
dest
, R
cont
, #0.

Aplicaie 1: Accesul la coninutul unei locaii spre care indic o variabil de
tip pointer.

Se consider urmtoarea configuraie arhitectural:

Adres_memorie Coninut_locaie
x3050 x70A2
x70A2 x70A3
x70A3 xFFFF
x70A4 x123B

Registrul PC indic valoarea x3010 iar instruciunile de la adresele x3010 la
x3012 sunt ilustrate mai jos. S se determine valoarea stocat n R6 dup
execuia celor 3 instruciuni. Pot fi nlocuite cele trei instruciuni cu una
singur care s rezolve aceeai problem ? Care este aceasta ?

Adres_memorie Codificare_instruciune
x3010 LEA R3, x3050
x3011 LDR R4, R3, #0
x3012 LDR R6, R4, #0


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
288 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Coninut regitrii dup execuia instruciunii
Instruciune R3 R4 R6
LEA R3, x3050 x3050
LDR R4, R3, #0 x3050 x70A2
LDR R6, R4, #0 x3050 x70A2 x70A3

Practic secvena de 3 instruciuni realizeaz: R6 Mem[Mem[x3050]]
care poate fi codificat mai simplu printr-o singur instruciune: LDI R6,
x3050, execuia ns presupunnd acelai numr de pai (3 determinare
adres, determinare coninut locaie de la adresa respectiv care va
reprezenta adresa final de la care se va aduce operandul sau valoarea
dorit).

Aplicaie 2.1: Corespondena limbaj de nivel nalt C i limbaj asamblare
LC-3 folosind pointeri [Patt03].

Cele dou seciuni de cod de mai jos (una n C, cealalt n asamblare LC-3)
trebuie s realizeze acelai lucru. Se consider variabilele x, p i z declarate
global. Instruciunile scrise cu litere aldine i subliniate au fost adugate
pentru a crea corespondena corect C LC-3.

int x;
int *p;
int z;
.ORIG x3000
main()
{
x = 0;
LD R0, X
AND R0, R0, #0
ST R0, X
. .
x++;
LD R0, X
ADD R0, R0, #1
ST R0, X
p =&x;
LEA R0, X
ST R0, P
z = (*p) + 1;
LDI R0, P
ADD R0, R0, #1
ST R0, Z
HALT
} X .BLKW 1

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 289
P .BLKW 1
Z .BLKW 1
.END

Aplicaie 2.2: Corespondena limbaj de nivel nalt C i limbaj asamblare
LC-3 folosind pointeri. Se consider de aceast dat c cele dou variabile
sunt declarate local funciei main().



; i este prima variabil declarat local (offset-ul 3 fa de nceputul stivei de
date aferent funciei main()); ptr este a doua variabil (ofset 4).

; i = 4;
AND R0, R0, #0 ; iniializare R0
ADD R0, R0, #4 ; stocheaz valoarea 4 n R0
STR R0, R6, #3 ; scrie coninutul lui R0 n stiva de date aferent
funciei main() la locaia corespunztoare
variabilei i
; ptr = &i;
ADD R0, R6, #3 ; R0 = R6 + 3 (R0 reine adresa variabilei i)
STR R0, R6, #4 ; memoreaz adresa lui i n ptr

; *ptr = *ptr + 1;
LDR R0, R6, #4 ; R0 = ptr (valoarea adresei)

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
290 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
LDR R1, R0, #0 ; ncarc de la ptr (*ptr) n R1
ADD R1, R1, #1 ;incrementeaz valoarea lui R1
STR R1, R0, #0 ;stocheaz rezultatul la adresa specificat de
ptr (acolo unde R0 pointeaz)
12.4. TRANSFERUL PARAMETRILOR PRIN
REFERIN LA APELUL FUNCIILOR
Pentru a demonstra necesitatea transferului parametrilor prin adres n
cazul apelurilor de funcii se va folosi urmtoarea secven de cod C, n
care, funcia Swap() dorete s interschimbe valorile celor dou argumente.
Funcia Swap() este des apelat n cazul aplicaiilor de sortare.

#include <stdio.h>
void Swap(int firstVal, int secondVal);

int main()
{
int valueA = 13;
int valueB = 333;

printf("Inaintea apelului functiei Swap ");
printf("valueA = %d and valueB = %d\n", valueA, valueB);
Swap(valueA, valueB);
printf("Dupa apelul funciei Swap ");
printf("valueA = %d and valueB = %d\n", valueA, valueB);
}

void Swap(int firstVal, int secondVal)
{
int tempVal; /* Retine valoarea primului parametru firstVal la
interschimbare */

tempVal = firstVal;
firstVal = secondVal;
secondVal = tempVal;
}

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 291

Funcia Swap() este apelat din programul principal main() cu
argumentele valueA egal cu 13 i valueB egal cu 333. Rezultatul dorit n
urma apelului este ca valueA s fie egal cu 333 iar valueB egal cu 13. Cu
toate acestea, argumentele transmise funciei Swap() rmn nemodificate n
urma compilrii i execuiei codului.


Figura 12.2. Execuia funciei Swap imaginea zonei de activare nainte i dup
apel
Examinnd stiva de date aferent funciilor main() i Swap() pe durata
execuiei programului (vezi figura 12.2) se observ cum interschimbarea
opereaz doar asupra copiilor locale ale parametrilor firstVal i secondVal,
iar la revenirea din Swap() n main() valorile modificate sunt pierdute odat
cu descrcarea de pe stiv a zonei de activare aferent funciei Swap().
Vinovat de acest fapt este limbajul C care transmite argumentele de la
nivelul funciei apelante la cel al funciei apelate prin valoare. C-ul
evalueaz fiecare argument care apare n apelul de funcie ca o expresie i
plaseaz valoarea acesteia n locaia corespunztoare din zona de activare
aferent funciei apelate. Pentru ca funcia Swap() s poat modifica
argumentele actuale parametri efectivi pe care funcia apelant main() i
transmite, ea (Swap) trebuie s aib acces la zona de activare a funciei
apelante (trebuie s acceseze locaiile la care sunt stocate argumentele
pentru a modifica valorile acestora). Rezult, n mod evident c, funcia
Swap are nevoie de adresele variabilelor valueA i valueB din main() pentru
a modifica valorile reinute de acestea. Dup cum poate fi observat din

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
292 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
secvena de cod de mai jos dar i din figura 12.3, acest lucru poate fi realizat
folosind pointerii i operatorii asociai de indirectare * respectiv adres
&.

#include <stdio.h>
void NewSwap(int *firstVal, int *secondVal);

int main()
{
int valueA = 13;
int valueB = 333;

printf("Inaintea apelului functiei NewSwap ");
printf("valueA = %d and valueB = %d\n", valueA, valueB);
NewSwap(&valueA, &valueB);
printf("Dupa apelul functiei NewSwap ");
printf("valueA = %d and valueB = %d\n", valueA, valueB);
}

void NewSwap(int *firstVal, int *secondVal)
{ /* Parametri formali sunt pointeri la numere ntregi. Funcia
apelant transmite adresele variabilelor pe care funcia vrea s le
interschimbe. */
int tempVal; /* Retine valoarea primului parametru firstVal
la interschimbare */

tempVal = *firstVal;
*firstVal = *secondVal;
*secondVal = tempVal;
}


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 293

Figura 12.3. Execuia funciei NewSwap imaginea zonei de activare nainte i
dup apel

n continuare, sunt ilustrate schimbrile intervenite la nivelul funciei
Swap(), de la nceputul acestui paragraf (12.4) i din figura 12.2, pentru a
realiza obiectivul iniial, cel de interschimbare a argumentelor primite. Noua
variant (revizuit) a functiei Swap() se va numi NewSwap(). Prima
modificare const n faptul c parametrii formali ai funciei NewSwap nu
mai sunt de tip ntreg (int) ci pointeri la ntregi (int *). n noua funcie, cei
doi parametri sunt adresele de memorie a celor dou variabile care se vor
inversate (interschimbate).Operatorul de indirectare folosit n prototipul
funciei NewSwap semnific faptul c variabilele spre care se pointeaz vor
fi interschimbate. ntruct aceste valori se regsesc n zona de activare a
funciei apelante (main), la apelul funciei NewSwap se va folosi operatorul
adres (vezi figura 12.3).

Echivalena C LC-3 la nivelul funciei apelante main() i la nivelul
funciei apelate NewSwap() [Patt03].

Funcia main() urmrete interschimbarea valorilor variabilelor locale
valueA i valueB, motiv pentru care transmite funciei NewSwap() adresele
celor dou variabile.

NewSwap(&valueA, & valueB);

Codul asamblare LC-3 care realizeaz acest lucru este urmtorul:

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
294 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
ADD R0, R6, #3; n R0 se calculeaz adresa variabilei valueA unde R6
indic spre adresa primei locaii din stiva de date aferent
funciei main().
STR R0, R6, #8 ; se memoreaz aceast adres (R0) n locaia
corespunztoare primului parametru efectiv transmis
funciei NewSwap() (vezi figura 12.3).
ADD R0, R6, #4; n R0 se calculeaz adresa variabilei valueB.
STR R0, R6, #9 ; se memoreaz aceast adres (R0) n locaia
corespunztoare celui de-al doilea parametru efectiv
transmis funciei NewSwap() (vezi figura 12.3).

Secvena de cod asamblare la nivelul funciei apelate NewSwap() este
urmtorul:
; int tempVal = *firstVal;
LDR R0, R6, #3; n R0 se ncarc valoarea parametrului formal,
care reprezint adresa variabilei valueA din
funcia apelant (R0x4103). n acest
moment, R6 indic spre adresa primei locaii
din stiva de date aferent funciei NewSwap().
LDR R1, R0, #0 ; n R1 se ncarc valoarea variabilei valueA
(R113).
STR R1, R6, #5; se salveaz n variabila tempVal coninutul lui
R1 (tempVal13).

; *firstVal = *secondVal;
LDR R1, R6, #4; n R1 se ncarc valoarea parametrului formal,
care reprezint adresa variabilei valueB din
funcia apelant (R1x4104). De asemenea,
R6 indic spre adresa primei locaii din stiva
de date aferent funciei NewSwap().
LDR R2, R1, #0 ; n R2 se ncarc valoarea variabilei valueB
(R1333).
STR R2, R0, #0 ; Se modific prima variabil cu valoarea final
(valueA=333)

; *secondVal = tempVal;
LDR R2, R6, #5 n R2 se ncarc valoarea variabilei locale
tempVal din funcia apelat (R213).
STR R2, R1, #0 ; Se modific a doua variabil cu valoarea
final (valueB=13).


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 295
Diferena esenial ntre cele dou tipuri de apeluri, prin valoare
respectiv prin referin, este urmtoarea: funcia apelat prin valoare nu
poate modifica parametrii efectivi (actuali) din funcia care a fcut
apelul neavnd acces la ei, n schimb, n cazul apelului prin referin,
funcia apelat, dispunnd de adresa parametrilor efectivi, i poate
modifica pe acetia [Patt03, Neg97].
12.5. POINTERI SPRE FUNCII
O caracteristic generatoare de confuzii dar performant a limbajului
C este pointerul ctre o funcie. Dei o funcie nu este o variabil, ea are o
localizare n memorie care poate fi atribuit unui pointer. Adresa unei
funcii este punctul de intrare n funcie. Astfel, un pointer ctre funcie
poate fi utilizat pentru a apela respectiva funcie.
n continuare se reamintete pe scurt modul n care o funcie este
compilat i apelat (vezi capitolul 10). Codul surs este transformat n cod
obiect (tabela de simboluri, analiz i sintez) i se stabilete un punct de
intrare vezi directiva .ORIG (la LC-3) [Patt03] care stabilete valoarea cu
care se ncarc PC-ul primei instruciuni din funcie. n timpul rulrii
programului, atunci cnd este apelat o funcie, acest punct de inserare este
apelat de limbajul main (inserat pe stiva de date aferent programului
apelant vezi figura 11.8. Stiva de date asociat funciei Fib(n)). Dac un
pointer conine adresa punctului de intrare, poate fi folosit pentru a apela
acea funcie. Adresa unei funcii se obine utiliznd numele unei funcii fr
nici o parantez sau argumente.
Pentru a declara o variabil pointer ctre o funcie, numele pointerului
trebuie precedat de simbolul *; de exemplu, int (*pf)(long) este un pointer
ctre o funcie care are un parametru de tip long i ntoarce un ntreg.
Practic, se declar o variabil de tip pointer, care este capabil s rein un
pointer ctre o funcie ce returneaz un ntreg. Considernd o funcie care
determin numrul de cifre al unui numr ntreg primit ca parametru int
cif_control(long); rezult urmtoarea asignare corect [Zah04, Neg97]:
pf = cif_control;
Programul principal va conine urmtoarele linii de cod:
int rez, n;
cin>>n;
pf = cif_control;

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
296 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
rez = (*pf)(n);
Pot aprea ns i urmtoarele erori:
a) pf = cif_control(n); unde pf este pointer la funcie iar
cif_control(n) este un ntreg. Mesajul de eroare este urmtorul:
Cannot convert int to int (*)(long) .
b) pf = &cif_control(n); nu se poate obine adresa rezultatului unei
funcii deoarece transferul rezultatului se face prin stiv. Mesajul
de eroare este urmtorul: Must take address of a memory
location.

#include<iostream.h>
int cif_control(long);
int (*pf)(long);
void main()
{
long n;
int rez;

cout<<"n=";
cin>>n;
pf = cif_control;
rez = (*pf)(n);
cout<<rez;
}

int cif_control(long a)
{
int z=0;
while (a!=0)
{
z++;
a=a/10;
}
return z;
}

ntruct numele unei funcii este un pointer spre funcia respectiv el
poate fi folosit ca parametru efectiv la apelurile de funcii. Un exemplu larg
rspndit n care este nevoie de un astfel de transfer este cel privitor la
calculul aproximativ al integralelor definite prin metoda dreptunghiului sau

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 297
cea a trapezului. n continuare se reamintete pe scurt aparatul matematic
utilizat [Neg97].
Dndu-se o funcie continu pe un interval nchis [a, b], f : [a, b] R,
atunci, integrala definit este aria trapezului curbiliniu, determinat
de axa Ox, dreptele y=a i graficul funciei f(x) pe intervalul [a, b].
Aproximarea ariei unui trap rbiliniu este mult mai eficient n cazul
cnd pe fiecare din seg entare este aproximat printr-un trapez
i nu printr-un dreptunghi. Intervalul de calcul al integralei [a, b] este divizat
n n intervale de lungim

b
a
dx x f ) (
i y=b
ez cu
mentele elem
e egale
n
a b
h

= . Rezult astfel un set de puncte
elementare (x
i
= a + i*h, cu i = 0, ,n.) n care se va calcula valoarea
funciei. Pe un segment elementar [x
i
, x
i+1
] trapezul este determinat de
extremitile segmentului pe axa Ox punctele (x
i
,0) i (x
i+1
,0) i de
valoarea funciei f(x) n extremiti punctele (x
i
,f(x
i
)) i (x
i+1
,f(x
i+1
)).
Reamintind c aria unui trapez (dreptunghic n cazul nostru) este egal cu
semi-suma bazelor nmulit cu nlimea trapezului rezult:
) _ autor de notata (
2
) ( ) (
2
) ( ) (
) (
1
0
1
1
0
1
n I
x f x f
h
x f x f
h dx x f
n
i
i i
n
i
i i
b
a
=
+
=
+


=
+

=
+
Pentru a calcula integrala definit dintr-o anumit funcie (n exemplul
nostru am considerat
2
1
1
x +
i respectiv
x + 1
1
) cu o precizie de 10
-7
se vor
urma paii algoritmului.
Pasul 1: Se alege o valoare iniial pentru n (numrul de diviziuni). Cu ct n
este mai mare va avea loc o divizare mai fin a intervalului [a,b]
o apropiere mai mare de valoarea real a integralei.
Pasul 2: Se calculeaz I_n (valoarea integralei pentru n subintervale).
Pasul 3: Se calculeaz I_2n (valoarea integralei pentru 2*n subintervale).
Pasul 4: Dac |I_n - I_2n|<10
-7
, algoritmul se ntrerupe i valoarea integralei,
cu precizia solicitat, este I_2n, altfel se dubleaz n, se pstreaz
ultima valoare a integralei I_n = I_2n i se reia pasul 3.

n continuare se construiete o funcie care calculeaz valoarea lui I_n
numit integrala_trapez [Neg97]. Se impun ns unele observaii:
Funcia f(x) trebuie s figureze printre parametrii funciei
integrala_trapez deoarece calculul integralei definite poate fi aplicat
oricrei funcii. De asemenea, limitele de integrare i numrul de
diviziuni n care se mparte intervalul trebuie transmii ca i parametrii.

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
298 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Funcia integrala_trapez returneaz valoarea aproximativ a integralei i
se va apela printr-o expresie de atribuire de genul: i_n =
integrala_trapez(a,b,n,f); n exemplul nostru s-a considerat f fiind funcia
arctan_deriv (derivata funciei arctgx).
ntruct funcia f(x) returneaz o valoare flotant n dubl precizie rezult
c i integrala (funcia integrala_trapez) va returna acelai tip de dat.
Aadar, prototipul funciei integrala_trapez este urmtorul: double
integrala_trapez(double, double, long , double (* )(double));
Evident c, naintea apelului funciei integrala_trapez funcia f(x)
trebuie s fie definit sau s fie prezent prototipul ei.
Construcia sintactic double (*p)(double) din antetul funciei
integrala_trapez se interpreteaz astfel:
*p semnific faptul c p este un pointer.
(*p)(double) nseamn c p este un pointer spre o funcie cu
parametru de tip double.
double (*p)(double) specific faptul c p este un pointer spre o
funcie care returneaz o valoare flotant n dubl precizie.
Este necesar includerea lui *p ntre paranteze rotunde, deoarece
construcia double *p(double); este corect din punct de vedere sintactic,
dar nseamn altceva, parantezele rotunde fiind prioritare operatorului
unar *. n acest caz, se declar p ca o funcie cu parametru double i care
returneaz un pointer spre o valoare flotant n dubl precizie. Astfel de
declaraii se ntlnesc des n aplicaii cu structuri de date cu legturi (sau
autoreferire) liste, arbori, etc.
n momentul definirii funciei integrala_trapez, necunoscndu-se
numele concret al funciei f(x), ci doar pointerul spre ea, n apelurile f(a),
f(a+h), etc, se va nlocui numele funciei f(x) prin *p astfel: (*p)(a),
(*p)(a+h), etc.

#define a 0.0 /* captul stng al intervalului pe care se
calculeaz integrala */
#define b 1.0 /* captul drept al intervalului */
#define N 10 /* numrul de subdiviziuni al intervalului [a,b]
utilizat in calculul integralei */
#define EPSILON 1e-7/* precizia de calcul a integralei */
#include <math.h>
#include <stdio.h>
#include <conio.h>
double arctan_deriv(double); /* 1/(1+x_patrat) */
double integrala_trapez(double, double, long , double (* )(double));


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 299
void main(void) /* calculeaza integrala din arctan_deriv(x)=1/(1+x*x)
in intervalul [a,b] cu o eroare mai mica decat
EPSILON */
{
clrscr();
long n = N;
double i_n, i_2n, vabs;
i_n = integrala_trapez(a,b,n,arctan_deriv);
do{
n = 2*n;
i_2n =integrala_trapez(a,b,n,arctan_deriv);
if((vabs=i_n - i_2n)<0)
vabs = - vabs;
i_n = i_2n;
}while(vabs>=EPSILON);
printf("Valoarea integralei este: %.10g\n",i_2n);
printf("Integrala se obtine cu precizia %g dupa %ld
iteratii!\n",EPSILON,n);
getch();
}

double integrala_trapez(double x, double y, long m, double (*p)(double))
{ /* calculul integralei prin metoda trapezelor - divizarea intervalului
[a,b] in m subintervale si calculul ariei folosind formula trapezului
dreptunghic */

double h,s;
int i;

h = (y-x)/m;
for(i=1,s=0.0;i<m;i++)
s+=(*p)(x+i*h);
s+=((*p)(x)+(*p)(y))/2;
s=s*h;
return s;
}

double arctan_deriv(double x)
{
return 1/(1+x*x);
// return 1/(x+1);
}

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
300 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

n ciuda multiplelor avantaje la nivelul limbajului high, pointerii
introduc un nivel de indirectare (acces suplimentar la memorie) iar la
nivel low, apelurile de funcii indirect prin pointer genereaz salturi /
apeluri indirecte, foarte dificil de prezis, cu implicaii defavorabile
asupra performanei globale de procesare [Flo05].

n continuare este ilustrat un exemplu care justific afirmaia c
funciile de bibliotec determin la nivelul procesorului salturi /
apeluri indirecte (new, qsort, scan, printf). Este vorba de programul de
test qsort[.c,.s], preluat din help-ul oferit de mediul BorlandC i care
sorteaz un tablou de iruri de caractere prin intermediul funciei de
bibliotec qsort care primete ca parametri adresa tabloului, numrul de
elemente, dimensiunea fiecrui element i o funcie de comparare de dou
iruri de caractere. Practic o surs a celor 11 apeluri indirecte o constituie i
apelul indirect prin pointer la funcia de comparare pas realizat n
cadrul funciei qsort (precompilate) [Flo05].
n continuare se exemplific pe baza descrierii funciei din fiierul
...\BorlandC\Crtl\Clib\qsort.cas.
Nume funcie qsort sorteaz un tablou de elemente pe baza
metodei de sortare rapid "selecia elementului median din trei", prin apelul
repetat al unui pointer la o funcie definit de utilizator ((*fcmp)()).
Utilizare void qsort(void *base, int nelem, int width, int
(*fcmp)());
Prototipul funciei se afl n stdlib.h.
*fcmp funcie de comparare care accept dou argumente:
elem1 i elem2, adresele a dou elemente ale tabloului
de sortat. Rezultatul returnat este urmtorul:
Dac elementele sunt n relaia fcmp returneaz
*elem1 < *elem2 Un ntreg
negativ (elem1
se va afla n
tabloul sortat
naintea lui
elem2)
*elem1 == *elem2 0
*elem1 > *elem2 Un ntreg
pozitiv (>0)
Qsort nu returneaz nimic.


U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 301
n continuare se vor prezenta comparativ, exemplificndu-se la nivel
de instruciune, secvene din codul surs .c (de nivel nalt) versus .s
(asamblare) al aplicaiei qsort.[c,s].

******************Secven de cod din qsort.c******************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char list[5][4] = { "cat", "car", "cab",
"cap", "can"};

int sort_function( const void *a,
const void *b)
{
return( strcmp((char *)a,(char *)b));
}
int main(void)
{
int x;

qsort((void *)list, 5,
sizeof(list[0]), sort_function);
for (x = 0; x < 5; x++)
printf("%s\n", list[x]);
return 0;
}

*******************Secven de cod din qsort.s********************
.globl list
.data
.align 2
list:
.ascii "cat\000" # stocarea n zona de date a adreselor de mesaje:
elementele de tablou care vor fi sortate.
.ascii "car\000"
.ascii "cab\000"
.ascii "cap\000"
.ascii "can\000"
...
.text
.align 2
.globl main
.align 2
.globl sort_function__FPCvT0 # adresa funciei de sortare
.text
.ent main
main:
subu $sp,$sp,32 # alocare spaiu pe stiv
sw $31,28($sp) # salvare # adresa de revenire n programul apelant -
$31 (sistemul de operare)
sw $fp,24($sp)
move $fp,$sp
jal __main
la $4, list # pregtire parametrii de apel $4 adresa tabloului de
sortat
li $5,0x00000005 # $5 <- 5 = numrul de elemente al tabloului
li $6,0x00000004 # $6 <-4 = dimensiunea n octei a fiecrui element de
tablou
la $7,sort_function__FPCvT0 # $7 <- adresa funciei folosit de ctre qsort n apelul su

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
302 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

jal qsort # la apelul unei funcii primii 4 parametrii de apel sunt
salvai n regitrii $4 $7 restul, dac e
# cazul sunt depui pe stiv [Flor03]. Funcia qsort este
precompilat.
sw $0,16($fp)
...
$L36:
move $sp,$fp # sp not trusted here
lw $31,28($sp)
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end main
.ent sort_function__FPCvT0
sort_function__FPCvT0:
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp) # salvare pe stiv a parametrilor de apel n cadrul rutinei
apelate indirect prin qsort adresa i
sw $5,28($fp) # numrul de elemente al tabloului
lw $4,24($fp)
lw $5,28($fp)
jal strcmp # apel funcie de bibliotec pentru compararea a dou
iruri de caractere
move $3,$2
move $2,$3
...
$L41:
move $sp,$fp
lw $31,20($sp)
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end sort_function__FPCvT0

Codul asamblare nu prezint nici un apel indirect de funcii de
bibliotec (jal qsort, jal strcmp). La analiza codului obiect ns (dup link-
editarea sursei cu bibliotecile n cauz) au rezultat 11 apeluri statice
indirecte care au generat 61 apeluri dinamice indirecte.
12.6. TABLOURI. RELAIA DINTRE POINTERI I
TABLOURI
Tabloul unidimensional reprezint o zon contigu de memorie care
stocheaz elemente de acelai tip i este alocat static n zona (segmentul la
procesoarele Intel) de date, fapt ce implic necesitatea cunoaterii numrului
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii 303
de elemente al tabloului n momentul compilrii. Spaiul alocat pentru
tablou este egal cu produsul dintre numrul de elemente i dimensiunea
tipului de dat corespunztor fiecrui element component. Datorit faptului
c n C/C++ numele tabloului reine chiar adresa primului element, indicii
tabloului vor ncepe de la zero (spre deosebire de limbajul Pascal unde
indicii ncep de la unu). Exemple de tablouri: lista numerelor de telefon,
alfabetul, etc. Expresia a[4] refer al 5-lea element al tabloului a.
n C, exista o strnsa legatura ntre pointeri si tablouri. Cnd se
foloseste numele unui tablou (fr indici), el reprezint un pointer ctre
primul element al tabloului. Astfel, n C se pot transmite tablouri ca
parametri n funcii (se transmite adresa de nceput a tabloului). Alt avantaj
al tratrii unitare pointer-tablou este aplicarea aritmeticii pointerilor pentru
accesarea elementelor unui tablou. Identitatea pointer-tablou se observ cel
mai bine n operaiile cu iruri de caractere, unde irul de caractere este un
tablou de caractere sau un pointer la caracter.
n continuare sunt prezentate aspecte ale echivalenei pointer tablou.
Se consider declaraiile:

char cuvant[5];
char *tablou_ptr;

De exemplu atribuirea tablou_ptr = cuvant este corect din punct de
vedere sintactic ntruct tablou_ptr pointeaz la cuvant[0], deci spre
nceputul zonei de memorie unde este stocat tabloul de caractere
(echivalent de asemenea cu tablou_ptr=&cuvant[0];). Pornind de la
declaraiile de mai sus, n tabelul urmtor, pe fiecare linie, expresiile date
sunt echivalente:

Echivalene pointer tablou
tablou_ptr cuvant &cuvant[0]
(tablou_ptr + n) cuvant + n &cuvant[n]
*tablou_ptr *cuvant cuvant[0]
*(tablou_ptr + n) *(cuvant + n) cuvant[n]

Pentru a accesa elementele tabloului cuvant[5] (irul de caractere), se
incrementeaz valoarea pointerului, astfel dac tablou_ptr=cuvant; atunci
*(tablou_ptr++) va returna valoarea lui cuvant[0], dup care tablou_ptr va
indica spre cuvant[1]. Trebuie avut n vedere c expresia *(tablou_ptr++)
este diferit de (*tablou_ptr)++, care va incrementa valoarea spre care
indic tablou_ptr, returnnd astfel caracterul de cod ASCII (tablou[0]+1).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
304 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software
Exist ns i diferene ntre pointeri i tablouri. Dac un pointer poate
fi incrementat, el indicnd spre alt locaie, nu acelai lucru se poate face cu
un tablou (adresa sa este cunoscut la compilare i nu se poate modifica pe
parcursul execuiei programului). Astfel, este posibil expresia
tablou_ptr=tablou_ptr+1, dar cuvant va fi tot timpul un pointer constant pe
durata execuiei programului.


Aplicaie 3: Relaia dintre pointeri i tablouri.

#include <stdio.h>
void main(void)
{
int t[4]={0, 1, 2, 3};
int *p=&t[1]; /* se declar p de tip pointer la int i apoi se
iniializeaz cu adresa lui t[1] al doilea
element al tabloului t */

printf("%d\n", *p++); /* Operatorul unar * are prioritate n faa
operatorului de postincrementare ++ => se
afiseaza valoarea lui t[1] i adresa lui p este
incrementat pentru a indica pe urmtorul
element al tabloului, adica pe t[2] */
printf("%d\n", *++p); /* Este incrementat adresa, deci p va pointa pe
t[3] => se va afisa valoarea lui t[3] */
printf("%d\n", ++*p); /* afiseaza valoarea incrementata a lui t[3].
Incrementarea are loc asupra continutului
locatiei de memorie si nu asupra adresei */
}


Aplicaie 4: Echivalena C LC-3 n cazul aplicaiilor cu tablouri.

int main()
{
int x, grid[10];
x=grid[3]+1;
grid[6]=5;
}

, x=grid[3]+1;

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii

305
ADD R0, R6, #4 ; Adresa de baz a tabloului (numele acestuia) de pe
stiva de date aferent funciei main() este scris n R0
ADD R1, R0, #3 ; Se calculeaz adresa elementului grid[3] i se depune
n R1
LDR R2, R1, #0 ; Se introduce n R2 valoarea elementului grid[3]
ADD R2,R2,#1; Se incrementeaz valoarea lui R2 (grid[3] + 1);
STR R2,R6,#3; Se introduce noua valoare a lui R2 n locaia
corespunztoare lui x pe stiva de date aferent
funciei main (x=grid[3]+1);

; grid[6]=5;
AND R2,R2,#0; Iniializare R2=0
ADD R2,R2,#5; R2=5
ADD R0,R6,#4 ; Adresa de baz a tabloului (numele acestuia) de pe
stiva de date aferent funciei main() este scris n R0
ADD R1,R0,#6 ; Se calculeaz adresa elementului grid[6] i se depune
n R1
STR R2,R1,#0 ; Se scrie valoarea 5 din R2 la locaia grid[6]
12.6.1. FUNCII CU PARAMETRI DE TIP TABLOU
(VECTOR)
ntruct transmiterea tablourilor (vectorilor) ca parametrii funciilor
este un lucru extrem de util n aplicaii, exist dou posibiliti de a-l realiza
[Patt03]:
a) transferul fiecrui element al vectorului (dezavantajos din punct de
vedere al spaiului ocupat pe stiva de date aferent funciei apelate,
dar i din punct de vedere al timpului de execuie mai ales n
cazul tablourilor cu numr foarte mare de elemente).
b) transmiterea unei referine la tablou (numele acestuia).
n cazul apelurilor de funcie n care parametrul efectiv este numele
unui tablou, apelul se face prin referin. n acest caz, se transfer valoarea
numelui tabloului, adic adresa primului su element. Dispunnd de adresa
de nceput a tabloului utilizat ca parametru, funcia apelat poate modifica
elementele tabloului respectiv.



U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
306 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

n continuare se prezint un exemplu de funcie avnd ca parametru un
tablou. Programul principal citete de la tastatur un tablou de numere
ntregi i apeleaz o funcie care, avnd ca argument numele respectivului
tablou, deteremin media aritmetic a elementelor din tablou.

#include <stdio.h>
#define MAX_NUMS 10

int Average(int input_values[]);

int main()
{
int index; /* Variabil contor folosit n bucla for */
int mean; /* media aritmetic a numerelor */
int numbers[MAX_NUMS]; /* Declaraia iniial a tabloului de numere */

/* Introducerea numerelor de la tastatur */
printf("Enter %d numbers.\n", MAX_NUMS);
for (index = 0; index < MAX_NUMS; index++) {
printf("Input number %d : ", index);
scanf("%d", &numbers[index]);
}
mean = Average(numbers);
printf("The average of these numbers is %d\n", mean);
}

int Average(int inputValues[])
{
int index;
int sum = 0;
for (index = 0; index < MAX_NUMS; index++) {
sum = sum + inputValues[index];
}
return (sum / MAX_NUMS);
}

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii

307

Figura 12.4. Imaginea zonei de activare imediat dup apelul funciei Average()
12.7. EXERCIII I PROBLEME
1. Ce tiprete urmtoarea secven:

int m[7]={3,6,4,2,8,9,0}, *p, *q; p=&m[3]; q=++p-2;
cout<<*q<< <<*(p+2)<< <<*p<< <<p-q;
a. 4 0 8 2 b. 2 2 3 2 c. 8 4 3 0 d. 4 0 8 2 e. 2 4 3 4

2. Fie declaraiile int x[10],*p; Care din urmtoarele atribuiri este corect ?
a. x=p; b. x[10]=p; c. p=x[10]; d. p=*x[10]; e. p=x;




U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
308 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

3. Cunoscnd codul ASCII a literei A=65, ce afieaz secvena:

int x=2; char c=A; c=c+x; cout<<c;
a. 67 b. C c. nici o variant corect d. c e. eroare: n C
nu se poate aduna un caracter cu un numr.

4. Fie declaraiile void f(int a, float &b){a++;b=b+1;} Ce va afia
urmtorul program:
void main() {int x=1; float y=1.1; f(x,y); cout<<x<< <<y;}
a. 2 2.1 b. 1 2.1 c. apel eronat d. sintax greit e. 1 1.1

5. Ce va afia programul urmtor:
#include<stdio.h>
void main(void)
{
int *p,*q;

p = new (int);
q = new (int);
*p = 7;
*q = *p;
if(p==q)
(*p)++;
else
(*q)++;
printf("%d , %d",*p,*q);
}
Care este rezultatul afiat de programul anterior dac instruciunea if se
nlocuiete cu if (*p== *q)?

6. Se consider urmtoarea secven de cod:
#include<stdio.h>
int z,t,*p;
void main(void)
{
z = 7;
p = &z;
p++;
*p = 19;
*--p = 24;
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Pointeri i tablouri. Transferul parametrilor prin referin. Pointeri spre funcii

309
printf("z= %d p= 0x%x continutul locatiei spre care pointeaza p
(*p)=%d t=%d",z,p,*p,t);
}
Considernd c registrul R5 (pointerul spre nceputul zonei de date globale
are valoarea x4000) s se ilustreze coninutul locaiilor x4000, x4001, x4002
i x4003 dup execuia fiecrei instruciuni din program. Determinai ce se
afieaz pe ecran la finalul execuiei programului ?

Adres memorie Coninut
x4000
x4001
x4002
x4003

7. Ce afieaz urmtoarele secvene de cod C++:

a)
#include<iostream.h>

void main()
{
char v[]={'a','b','c','\0'};
char *p=&v[0];

while (*p)
{
cout<<p<<" ";
p++;
}
}
b)
#include<iostream.h>

int a=1,c=8,*p;

void main()
{
p=&a;
a=*p++;
cout<<a<<' '<<*p<<endl;
a=(*p)++;
cout<<a<<' '<<*p;
}

Ce va afia programul n cazul secvenei b dac declaraiile variabilelor se
fac local funciei main() i nu global ? Ce modificri trebuiesc aduse
programului pentru a afia acelai lucru ca n cazul iniial (cu declaraiile
globale). Indicaie: pe un sistem cu procesor Intel, organizarea memoriei
presupune c stiva de date aferent funciilor crete (n coninut i
capacitate) de la adrese mari spre adrese mici (variabilele succesive sunt
stocate la adrese care descresc).

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
310 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

8. Translatai din C n limbaj de asamblare LC-3 codul surs al funciei
main() de mai jos.

main()
{
int a[5], i;
i=4;
while(i>=0){
a[i]=i;
i--;
}
}

9. n secvena de cod urmtoare funcia main() apeleaz funcia triple().
Care este necesarul minim de memorie pentru zona de activare aferent
funciei triple ? Dar pentru zona de activare aferent funciei main ?

main()
{
int array[3];

array[0]=1;
array[1]=2;
array[2]=3;
triple(array);
}

U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s


BIBLIOGRAFIE



[Ack89] Ackoff, R. L., From Data to Wisdom, Journal of Applies Systems
Analysis, Volume 16, 1989 p 3-9.
[Aho86] Aho A., Sethi R., Ullman J. Compilers, Principles,Techniques
and Tools, Adison Wesley Publishing Comp. 1986.
[Bel04] Bellinger G., Castro D., Mills A., Data, Information, Knowledge,
and Wisdom, 2004, HTUhttp://www.systems-thinking.org/dikw/dikw.htmUTH.
[Bud99] TBudiuT M., Teoria complexitii, HTUhttp://www.cs.cmu.edu/~mihaib/UTH
[Chi04] Chitoc M., Internetul ca agent de socializare al Generaiei M,
HTUhttp://www.ris.uvt.ro/numarul52006/mariuschitosca.pdfUTH.
[Clc04] Circuite logice combinaionale, 2004, HTUhttp://cid2004.3x.ro/UTH
[Cor90] Cormen, T. H., Leiserson, C. E., Rivest, R. L. Introduction to
Algorithms. McGraw-Hill, New York, 1990.
[Fil97] Filipescu V., Garaiman D., Circuite electronice digitale. ndrumar
de laborator, Reprografia Universitii din Craiova, 1997.
[Flo03] Florea A, Vinan L. Simularea i optimizarea arhitecturilor de
calcul n aplicaii practice, Editura MatrixROM, Bucureti, 2003.
[Flo05] Florea A. Predicia dinamic a valorilor n microprocesoarele
generaiei urmtoare, Editura MatrixROM, Bucureti, 2005.
[Gol97] Golomety A. Proiectarea Translatoarelor, Editura Universitii
"Lucian Blaga", Sibiu, 1997.
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
312 Introducere n tiina i ingineria calculatoarelor. Interfaa Hardware Software

[Gor05] Gorgan D., Sebestyen-Pal Gh., Computer Design, Editura
albastra, Cluj-Napoca,. ISBN 973-650-123-X, 2005.
[Katz05] Katz R. H., Borriello G., Contemporary Logic Design (2nd
Edition), Prentice Hall, T2005.T
[LC-3] Little Computer v.3.
HTUwww.ece.utexas.edu/~ambler/ee306/Software&Doc/LC3WinGuide.pdfUTTH.
[Lica06] Lica D. .a. Fundamentele programrii, Editura L&S Soft,
Bucureti, 2006.
[Log06] Logoftu D. Bazele programrii n C. Aplicaii, Editura Polirom,
Iai, 2006.
[Lun05] Lungu V., Procesoare INTEL, Programare n limbaj de
asamblare, Ediia a II-a, Editura Teora, Bucureti, 2005.
[Mr96] Mranu Radu Sisteme de calcul, Manual pentru licee de
informatic, cls. IX-a, Editura Didactic i Pedagogic, Bucureti, 1996.
[Min82] Minsky M., Why People Think Computers Can't, AI Magazine,
vol. 3, no. 4, Fall 1982,
HTUhttp://web.media.mit.edu/~minsky/papers/ComputersCantThink.txtUTH.
[Mus97] Musc Gh., Programare n limbaj de asamblare, Editura Teora,
Bucureti, 1997.
[Neg97] Negrescu L. Limbajul C. Manual pentru clasa a XI-a, Editura
Computer Libris Agora, 1997.
[Nic04] Niculae C.M., Componente fundamentale, 2004,
HTUhttp://fpce9.fizica.unibuc.ro/telecom/componente_fundamentale.htmUTH
[Pal07] Palsetia D., Digital Systems Organization and Design, 2007,
HTUhttp://www.cis.upenn.edu/~palsetia/cit595s07/UTH
[Pat05] Patterson D., Hennessy J. Computer Organisation and Design: The
Hardware/Software Interface, Third Edition, Elsevier, 2005, ISBN: 1-
55860-604.
U
s
i
n
g

j
u
s
t

f
o
r

s
t
u
d
y
i
n
g

a
n
d

n
o
n
-
c
o
m
e
r
c
i
a
l

p
u
r
p
o
s
e
s
Bibliografie

313
[Patt03] Patt Y., Patel S. Introduction to Computing Systems: from bits &
gates to C & beyond, McGraw-Hill Higher Education, 2P
nd
P edition, 2003.
[Pop86] Pop V. Analiza i sinteza dispozitivelor numerice. Curs
litografiat, Institutul Politehnic Timioara, 1986, vol. I i II.
[Sch95] Schildt H. C++ manual complet, McGraw-Hill Higher
Education, 1995.
[Seb] Sebestyen-Pal Gh., Arhitectura calculatoarelor,
HTUhttp://users.utcluj.ro/~sebestyen/_Word_docs/Cursuri/UTH
[Sha48] Shannon C.E., A Mathematical Theory of Communication, Bell
System Technical Journal, vol. 27, pp. 379-423, 623-656, July, October,
1948.
[Sto98] Stoilescu D. Culegere de C / C++. Fie de probleme, Editura
Radial, Galai, 1998.
[Vin00] Vinan N. L., Florea A. Microarhitecturi de procesare a
informaiei, Editura Tehnic, Bucureti, ISBN 973-31-1551-7, 2000.
[Vin03] Vinan L. Organizarea i proiectarea microarhitecturilor, 2003,
HTUhttp://webspace.ulbsibiu.ro/lucian.vintan/html/Organizarea.pdfUTH.
[Wik] HTUhttp://en.wikipedia.org/wiki/UTH
[Zah04] Zaharia M.H., Leon F. Limbajul C de la Zero la Student,
Editura Politehnium Iasi, 2004.

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