Sunteți pe pagina 1din 26

ARHITECTURA SISTEMELOR DE CALCUL

2. PROIECTAREA SETULUI DE INSTRUCIUNI


n acest capitol vom proiecta un set de instruciuni reprezentativ pentru multe
sisteme cu set redus de instruciuni (RISC - Reduced Instruction Set Computer). Vom stabili
mnemonicele i formatele care vor fi utilizate n capitolele urmtoare.

2.1. Caracteristicile procesorului


Indiferent de tip, toate procesoarele execut dou operaii de baz: extrag
instruciuni din memorie, i execut instruciunile extrase. Prima problem de proiectare
const n stabilirea setului de instruciuni i a formatelor de instruciuni pe care procesorul
le va recunoate. n ultima perioad arhitecturile RISC au devenit foarte populare. n
contrast cu procesoarele CISC (Complex Instruction Set Computer), procesoarele RISC
recunosc un set redus de instruciuni simple, cu formate i moduri de adresare simple. n
consecin, hard-ul procesorului se reduce cantitativ iar proiectarea sa devine mult mai
curat i atractiv. Majoritatea procesoarelor RISC prezint seturi i formate de
instruciuni cu un grad ridicat de similaritate.
Nu exist o definiie foarte precis a procesorului RISC, a instruciunii reduse sau
a instruciunii complexe. n general o instruciune complex este aceea care necesit muli
pai pentru execuie, n timp ce o instruciune redus poate fi executat n foarte puini pai.
Procesoarele RISC prezint un numr important de trsturi comune rezultate din principiul
unanim acceptat de ctre toi proiectanii de structuri RISC: cel mai simplu este i cel mai
rapid.

2.1.1. Utilizarea memoriei i a registrelor


O trstur important i comun tuturor procesoarelor RISC, care vizeaz setul de
instruciuni, este decizia de utilizare a memoriei numai pentru memorarea datelor, i de a
utiliza registrele CPU (Central Processing Unit) pentru toate operaiile aritmetico-logice. n
contrast cu arhitecturile CISC, n cazul RISC nu este posibil execuia operaiilor
(instruciunilor) aritmetice asupra unor operanzi locai n memorie. Obiectivul esenial n
cazul RISC este acela de a proiecta pentru vitez maxim, evitnd utilizarea memoriei ori
de cte ori este posibil, deoarece accesele la memorie sunt mult mai lente comparativ cu
accesele la registre CPU. Pentru flexibilitate maxim, n cazul instruciunilor aritmetice, se
utilizeaz formatul cu trei adrese (de registru). De regul n procesor se implementeaz un
set de 32 registre. Numrul reprezint un compromis ntre dou cerine:
- un numr ct mai mare de registre reprezint optimul pentru compilator
- comutarea contextului devine tot mai lent cu creterea numrului de registre.
11

Proiectarea setului de instruciuni

De asemenea, pe msur ce crete numrul de registre (n termenii puterilor lui 2),


crete i timpul de acces la registre i acest lucru trebuie evitat. Evident c i memoria
trebuie accesat pentru citirea i ncrcarea n registre a diverilor operanzi i pentru
memorarea diverselor rezultate obinute n registre. Transferurile cu memoria sunt
gestionate prin instruciuni de tip load i respectiv store i acestea sunt principalele
instruciuni care acceseaz memoria. Formatul load/store este caracteristic procesoarelor
RISC.
Vom nota cele 32 registre R0 - R31. Dei toate vor fi registre generale, adiional
cteva dintre acestea vor avea i funcii speciale. R0 va conine permanent constanta 0 i nu
poate fi utilizat n alt scop. Acesta este un principiu general de proiectare i este respectat
deoarece este foarte avantajos s avem un registru care conine constanta zero pentru
instruciunile de tergere (iniializate cu zero) i de comparare cu zero. Nu vom prevedea o
instruciune explicit de tip move registru - registru. Aceste transferuri vor fi realizate
prin instruciuni ADD (adunare) n care unul dintre operanzi va fi R0 (constanta zero).

2.1.2. Lungimea instruciunilor i a operanzilor


ncepnd cu 1990 tehnologiile de fabricaie au permis integrarea procesoarelor pe
32 i chiar 64 bii ntr-un singur circuit VLSI. Evident c n cazul RISC, unde unitatea de
comand este simpl, proiectantul trebuie s decid dac va utiliza aria disponibilizat n
alte scopuri cum ar fi, de exemplu, memorie cache on-chip de capacitate mai mare. 32
bii asigur o precizie rezonabil pentru operaiile cu ntregi n timp ce 64 bii par rezonabili
pentru operaiile n virgul flotant. Exist deja procesoare care suport chiar 128 bii. De
exemplu, procesorul RISC i860 are instruciuni "load/store" pe 128 bii.
Diferene arhitecturale semnificative sunt foarte puine ntre procesoarele pe 32 i
respectiv 64 de bii n ceea ce privete unitatea de control; principalele diferene constau n
lungimea diferit a registrelor interne, ALU i respectiv numrul diferit de linii aferente
busurilor interne i externe CPU. Odat cu creterea lungimii cuvntului la 32/64 bii a
aprut i necesitatea specificrii n codul instruciunii a lungimii operanzilor ce vor fi
procesai: 8 bii, 16 bii, 32 bii, 64 bii etc. O soluie tipic la aceast problem const n
includerea n formatul instruciunii a unui cmp, s zicem de 2 bii, care va specifica
lungimea operandului/operanzilor procesai: 00 -8 bii, 01 -16 bii, 10 -32 bii, 11 -64 bii.
Nu vom include n formatul instruciunii pe care-l vom propune un astfel de cmp
considernd c toate transferurile vor fi pe 32 bii. Propunem ca exerciiu de proiectare
includerea unui astfel de cmp n format.
Unitatea cea mai mic adresabil n memorie este octetul (8 bii). Pentru eficien
codul instruciunii nu trebuie s aib o lungime arbitrar ci trebuie compus dintr-un numr
exact de octei. Procesoarele CISC au de regul instruciuni de lungime variabil.
Procesoarele RISC au instruciuni de lungime fix. Vom alege o lungime fix pentru
instruciune: 32 bii. Aceasta conduce la simplificarea decodificatorului instruciunii.
Lungimea de 32 bii este uzual n cazul RISC dei nu este posibil specificarea unei
constante pe 32 bii ntr-o instruciune pe 32 bii. Vom specifica constante pe 16 bii i
printr-o secven de dou instruciuni, un registru pe 32 bii va putea fi ncrcat cu o
12

ARHITECTURA SISTEMELOR DE CALCUL

constant pe 32 bii, compus din dou constante pe 16 bii. Aceast complicaie va fi


evitat la ncrcarea constantei zero, operaie realizabil printr-o singur instruciune dac
se utilizeaz R0 care conine permanent constanta zero pe 32 bii.

2.1.3. Lungimea adreselor de memorie


Utilizarea adreselor pe 32 bii este convenabil dac registrele procesorului au de
asemenea 32 bii. Utilizarea adreselor pe 64 bii ar fi o alt variant care intete n viitor.
Vom prevedea adrese pe 32 bii care asigur adresarea unei memorii interne de maxim 4
gigaoctei (232).

2.2. Formate de instruciuni


Vom aloca 6 bii, biii 31 la 26, pentru cmpul principal de opcode, ceea ce va
permite codificarea a 64 instruciuni diferite. n ideea extinderii numrului de instruciuni,
pentru instruciunile care nu utilizeaz toi biii rmai (biii 25 la 0), vom utiliza n anumite
cazuri un cmp secundar de sub-opcode. De exemplu, cmpul principal de opcode ar putea
specifica o clas de instruciuni (aritmetice), n timp ce cmpul sub-opcode va selecta
operaia (aritmetic) propriu-zis. Vom avea cinci clase de instruciuni:

2.2.1. Formatul registru registru registru (R-R-R)


Pentru eficien i vitez aceste instruciuni vor opera numai cu operanzi preluai
din registre. O operaie aritmetico-logic se va aplica celor doi operanzi preluai din registre
iar rezultatul va fi depus tot ntr-un registru; 15 bii vor fi necesari pentru a specifica cele 3
registre.

Fig. 2.1. Formatul registru registru registru (formatul R-R-R)

Este de dorit s pstrm cmpurile definite n formatul R-R-R pe aceleai poziii n


toate formatele pe care le vom defini ulterior. Aceasta nseamn c toate instruciunile care
vor avea un registru destinaie (Rd) vor utiliza biii 25 la 21 pentru selecia destinaiei i
toate instruciunile care utilizeaz dou registre surs vor utiliza biii 20 la 16 pentru
selecia sursei Rs1 i respectiv biii 15 la 11 pentru selecia sursei Rs2. Instruciunile care
13

Proiectarea setului de instruciuni

utilizeaz un singur registru surs, cum ar fi cele care opereaz cu un registru i o constant,
vor specifica unicul registru surs n cmpul 20 la 16 (Rs1). Biii neutilizai din codul
instruciunii conduc la o slab compactare a secvenelor de cod i deci la o ineficient
stocare a acestora n memorie. Dar nu acesta este factorul esenial care trebuie luat n
considerare; factorul esenial este viteza cu care instruciunea poate fi decodificat i
executat.
Un exemplu de instruciune registru registru registru ar fi:
ADD R1,R4,R5

; R1 = R4 + R5

Utiliznd R0, care memoreaz permanent constanta zero, putem crea o instruciune
move:
ADD R2,R3,R0

; R2 = R3 (+0)

n consecin, o instruciune move registru registru registru specific este nenecesar.


Instruciunile aritmetice (care se ncadreaz n acest format) vor realiza operaii ca:
adunare, scdere, nmulire, mprire (operaii cu ntregi), deplasare/rotire la stnga sau la
dreapta cu unul sau mai muli bii, iar instruciunile logice vor realiza operaii ca AND, OR,
NOT, XOR. Numerele reprezentate n virgul flotant vor avea operaii (instruciuni)
proprii de adunare, scdere, nmulire i mprire i n acest context s-ar putea renuna la
instruciunile de nmulire/mprire n virgul fix.
Instruciunile de deplasare/rotire necesit numai un operand. Rs1 ar putea specifica
operandul deplasat iar Rs2 ar putea specifica numrul de poziii deplasate.
Biii neutilizai (biii 10 la 0) ar putea fi utilizai ca sub-opcode pentru o unitate
funcional cum ar fi ALU. Astfel, cmpul opcode va specifica o clas de operaii (de
exemplu aritmetico-logice), iar cmpul sub-opcode va selecta operaia propriu-zis la
ALU.

2.2.2. Formatul registru - registru - constant (R-R-I)


Sunt foarte frecvente situaiile n care unul dintre operanzii unei instruciuni
aritmetico-logice este o constant. Pentru codificarea constantei respective se utilizeaz un
cmp din codul instruciunii i de aceea acest mod de adresare se numete imediat, iar
formatul se mai numete i registru - registru - imediat.
Cel mai adesea constantele necesare sunt constante mici. O dimensiune rezonabil
pentru aceste constante este 16 bii i aceast dimensiune se ncadreaz bine n formatul din
fig. 2.2. Combinnd dou constante de 16 bii se obine o constant pe 32 bii. Cmpurile
opcode, Rd i Rs1 rmn pe aceleai poziii pe care au fost fixate n formatul R-R-R
(important pentru reducerea complexitii decodificatorului instruciunii).
Un exemplu de instruciune R-R-I ar fi:
ADD R4,R5,64
14

; R4 = R5 + 64

ARHITECTURA SISTEMELOR DE CALCUL

Fig. 2.2. Formatul registru - registru - constant (formatul R-R-I)

Formatul registruregistru-constant poate fi utilizat cu toate operaiile aritmeticologice prevzute pentru formatul R-R-R, inclusiv operaiile de deplasare/rotire n care
numrul de poziii deplasate va fi specificat de constanta utilizat.

2.2.3. Formatul registru - memorie (R-M)


Pentru c toate instruciunile proceseaz operanzi preluai din registre, acetia
trebuie mai nti transferai din memorie n registre. Instruciunile R-M (instruciunile
load/store), prin care se vor realiza transferurile registru - memorie, trebuie s specifice
adresa locaiei de memorie ce va fi implicat n transfer, i multe moduri de adresare pot fi
utilizate pentru adresarea locaiei respective. Totui, modul de adresare registru indirect cu
offset pe care l vom implementa este un mod de baz din care deriv majoritatea
celorlalte moduri. n modul de adresare indirect registru, un registru specificat conine
adresa locaiei de memorie ce se va implica n transfer. Opional un offset dat de o
constant memorat n codul instruciunii poate fi adunat la coninutul registrului respectiv
pentru a genera adresa utilizat la accesarea memoriei. Instruciunile load ncarc
coninutul locaiei respective n registrul destinaie n timp ce instruciunile store
memoreaz registrul surs n locaia respectiv.
LD R1,200[R8]
ST 16[R3],R4

; coninutul locaiei de memorie adresat


; de R8 + 200 este ncrcat n R1.
; R4 este copiat n locaia de memorie adresat
; de R3 + 16.

O prim variant de format pentru instruciunile load/store ar fi formatul R-R-I


din figura 2.3.
Pentru load Rd specific registrul ce va fi ncrcat n timp ce pentru store Rd
specific registrul ce va fi copiat n memorie; n ambele cazuri Rs1 specific registrul ce
conine adresa. Inevitabil, n cazul load Rd este destinaie iar n cazul store Rd este
surs ceea ce implic o complicaie minor la proiectarea procesorului (decodificatorului
instruciunii). Complicaia poate fi evitat recurgnd la formatul din figura 2.4. a crui
deficien const n reducerea numrului de bii alocai constantei de la 16 la 11 (offset n
domeniul -210 pn la +210 -1).

15

Proiectarea setului de instruciuni

Fig.2.3. Formatul load/store - versiunea 1

Fig.2.4. Formatul load/store - versiunea 2

2.2.4. Formatul instruciunilor de branch


n limbajele de nivel nalt apar puncte de decizie implementate, de exemplu, prin
declaraii IF:
if((x!=y)&&(z<0))
{
a=b-3 ;
b=b+4 ;
}
16

ARHITECTURA SISTEMELOR DE CALCUL

Compilatoarele trebuie s translateze astfel de declaraii n instruciuni main.


Este neraional s prevedem cte o instruciune main pentru fiecare declaraie IF (datorit
numrului vast de declaraii IF posibile). De asemenea, n-ar fi o idee bun ncercarea de a
proiecta un set de instruciuni main copiind instruciunile unui anumit limbaj de nivel
nalt. Este evident c trebuie s extragem primitivele eseniale ale limbajelor de nivel nalt
i acestea s fie implementate n limbajul main.
O construcie IF de orice complexitate poate fi descompus n declaraii IF simple
de forma:
if (x relaie y ) goto L1
unde relaie poate fi orice relaie permis n limbajele de nivel nalt: <, >, <=, >=, ==, !=.
De exemplu, secvena C anterioar poate fi compilat ntr-o secven echivalent
de instruciuni main:
if (x==y) goto L1;
if (z>=0) goto L1;
a=b-3;
b=b+4;
L1:
Exist mai multe posibiliti de implementare a declaraiei IF cu instruciuni
main fiecare avnd un impact particular asupra proiectrii procesorului.
Partea goto L1 revendic specificarea adresei de salt L1 de unde se va extrage
urmtoarea instruciune n cazul n care condiia specificat n declaraia IF este ndeplinit.
Deoarece astfel de instruciuni se utilizeaz pentru implementarea buclelor de program de
lungime relativ mic, pentru calculul adresei de salt se utilizeaz n general o adresare
relativ la PC (adresa de salt se obine adunnd la PC-ul curent un offset specificat).
Acest mod de adresare permite compilatorului s genereze secvene de cod relocabile care
pot fi ncrcate n orice zon de memorie fr schimbarea adreselor de branch. n
concluzie, instruciunile de branch vor realiza salturi condiionate relative la PC (Program
Counter) .
Adiional sunt necesare i salturi necondiionate pe care le vom realiza prin
instruciuni jump.

A. Utilizarea registrului de condiii


Registrul de condiii sau de flag-uri este un registru special care caracterizeaz
rezultatele ALU obinute n cadrul instruciunilor aritmetice:
Z - zero

= 1 - caracterizeaz rezultat zero


= 0 - caracterizeaz rezultat diferit de zero
17

Proiectarea setului de instruciuni

C - carry
S - semn
O - overflow

= 1 - caracterizeaz rezultat cu transport (mprumut)


= 0 - caracterizeaz rezultat fr transport (mprumut)
= 1 - caracterizeaz rezultat negativ
= 0 - caracterizeaz rezultat pozitiv
= 1 - caracterizeaz rezultat cu depire
= 0 - caracterizeaz rezultat fr depire

Pentru a implementa o declaraie IF, mai nti se execut o instruciune aritmetic


poziionnd flag-urile de condiii n acord cu rezultatul obinut. Cea mai utilizat este
instruciunea de comparare care este similar cu instruciunea de scdere, cu deosebirea c
rezultatul nu este depus la nici o destinaie ci doar se poziioneaz flag-urile n acord cu
valoarea sa. Apoi o instruciune de branch condiionat examineaz condiia testat i, dac
aceasta este ndeplinit, realizeaz saltul la adresa specificat. Exist condiii pentru a cror
verificare trebuie examinate mai multe flag-uri.
O list tipic de instruciuni branch ar fi:
BL
BG
BGE
BLE
BE
BNE

- branch if less salt dac este mai mic dect ( < )


- branch if greater salt dac este mai mare dect ( > )
- branch if greater or equal salt dac este mai mare sau egal cu ( >= )
- branch if less or equal salt dac este mai mic sau egal cu ( <= )
- branch if equal salt dac este egal cu ( == )
- branch if not equal salt dac nu este egal cu ( != )

Considernd c compilatorul aloc variabilelor x i y registrele R1 i respectiv R2,


declaraia:
if (x==y) goto L1
poate fi translatat ntr-o secven de dou instruciuni main:
CMP R1,R2
BE

; poziioneaz flag-urile n acord cu rezultatul


; scderii R1-R2

L1

Cele dou instruciuni trebuie executate n secven i de aici rezult o restricie


pentru compilatoarele cu reorganizare care nu pot introduce ntre cele dou instruciuni
dect instruciuni care nu afecteaz flag-urile de condiii. De asemenea prima instruciune
trebuie executat complet nainte de startarea celei de branch rezultnd penaliti n cazul
procesoarelor pipeline. Registrul de condiii este o parte din ceea ce se numete starea
procesorului i trebuie salvat la fiecare comutare de context.
Cu toate dezavantajele menionate registrul de condiii este nc foarte popular.

18

ARHITECTURA SISTEMELOR DE CALCUL

B. Evitarea utilizrii unui registru de condiii


O soluie care evit att utilizarea registrului de condiii ct i necesitatea execuiei
succesive a celor dou instruciuni const n combinarea celor dou instruciuni ntr-o
singur instruciune de branch condiionat. Aceast instruciune compar coninutul a dou
registre i execut saltul pe baza unei condiii specificate (de exemplu de egalitate):
BEQ R1,R2,L1

; salt la L1 dac R1 = R2

O astfel de instruciune este necesar pentru fiecare condiie dei instruciunea BEQ n
combinaie cu o instruciune BL (sau BG) formeaz un set care face posibil orice tip de test.
S presupunem c dispunem i de instruciunea:
BL R1,R2,L1

; salt la L1 dac R1 < R2

Cele dou instruciuni (BEQ i BL) sunt suficiente pentru a implementa toate tipurile de
test necesare:
Condiie

Secvena de cod aferent

R1 < R2

BL R1,R2,L1

R1 > R2

BL R2,R1,L1

R1 >= R2

BL R2,R1,L1
BEQ R1,R2,L1

R1 <= R2

BL R1,R2,L1
BEQ R1,R2,L1

R1 == R2

BEQ R1,R2,L1

R1 != R2

BL R1,R2,L1
BL R2,R1,L1

Pentru a elimina secvenele de dou instruciuni, sunt necesare nc dou


instruciuni:
BGE - salt dac este mai mare sau egal cu ...
BNE - salt dac nu este egal cu ...
Testarea pe condiie de zero este o operaie foarte des utilizat n programe i de
aceea pot fi prevzute dou instruciuni speciale: BEQZ (branch if zero) i BEQNZ
(branch if not zero).
19

Proiectarea setului de instruciuni

BEQZ R3,L1
BEQNZ R3,L1

; salt la adresa L1 dac R3 == 0.


; salt la adresa L1 dac R3 != 0.

n cazul nostru aceste teste sunt uor de realizat utiliznd registrul R0 (care memoreaz
permanent constanta zero) i instruciunile BEQ i BNE:
BEQ R3,R0,L1
BNE R3,R0,L1

; salt la adresa L1 dac R3 == 0.


; salt la adresa L1 dac R3 != 0.

ntotdeauna alegerea instruciunilor n cazurile RISC este strns dependent de


modul de implementare al procesului i de efectul pe care introducerea a ctorva noi
instruciuni l va avea asupra performanelor generale ale acestuia. Condiia de egalitate
revendic un comparator, care opereaz foarte rapid, n timp ce alte condiii cum ar fi mai
mare sau egal, revendic un sumator (scztor), care opereaz mai lent.

C. Opiunea noastr privind instruciunile branch


Considerm oportun includerea n clasa branch a patru instruciuni:
BEQ
BNE
BL
BGE

Ri,Rj,L1
Ri,Rj,L1
Ri,Rj,L1
Ri,Rj,L1

Aceste instruciuni vor permite implementarea pe o singur instruciune a oricrei


condiii de salt. Formatul cel mai potrivit pentru aceste instruciuni este prezentat n fig.
2.5., unde Ri este Rd, Rj este Rs1 i L1=PC+offset. Din nou utilizm cmpul Rd pentru
selecia unui registru surs i nu destinaie.

Fig. 2.5. Formatul instruciunilor de branch (format de tip R-R-I )

2.2.5. Instruciunile de salt (jump)


Instruciunea jump realizeaz un salt necondiionat la o adres specificat n codul
instruciunii. Aceste instruciuni sunt necesare la implementarea construciilor IF-THENELSE; sunt de asemenea utile la implementarea buclelor FOR i WHILE n care condiia de
20

ARHITECTURA SISTEMELOR DE CALCUL

ieire din bucl este calculat la nceputul buclei. Instruciunea jump va fi utilizat la
sfritul buclei pentru revenirea pe nceputul acesteia. Utiliznd mnemonica JMP, vom avea
instruciunea:
; salt la adresa L1

JMP L1

Adresa de salt L1 se obine adunnd la PC offset-ul specificat n codul instruciunii


(adresare relativ la PC ca n cazul instruciunilor branch).

Fig. 2.6. Formatul instruciunii jump (formatul I)

S menionm c i instruciunile branch pot fi fcute necondiionate. Un exemplu ar fi:


BEQ R1,R1,L1

; salt dac R1 = R1

Instruciunile jump utilizeaz un offset pe 26 bii (fig. 2.6.) spre deosebire de


instruciunile branch care utilizeaz un offset doar pe 16 bii. Distana maxim de salt va fi
mult mai mare n cazul jump.
Att n cazul branch ct i n cazul jump ar putea fi folosit i un al doilea mod de
adresare, modul registru - indirect. n acest caz n instruciune este specificat explicit un
registru (altul dect registrul PC) care conine adresa instruciunii pe care se va executa
saltul (fig. 2.7.).

Fig. 2.7. Formatul instruciunii jump cu mod de adresare indirect - registru

Astfel de instruciuni ar putea fi utile la implementarea declaraiilor SWITCH/CASE din


limbajele de nivel nalt i pentru revenirea din proceduri.
Cu formatul din figura 2.7. putem avea, de exemplu:
JMP [R1]

; salt la instruciunea a crei adres este


; coninut n R1
21

Proiectarea setului de instruciuni

sau chiar:
JMP 134[R2]

; salt la instruciunea a crei adres se obine


; adunnd R2 + 134.

S notm c, n aceste cazuri, adresa de salt este o adres absolut i nu relativ la


PC dei, dac se dovedete util, ea ar putea fi interpretat i ca adres relativ. S mai
notm c notaia [R1] utilizat aici nu nseamn coninutul locaiei de memorie a crei
adres este dat de R1 ca n cazul instruciunilor load/store.

2.2.6. Apelul procedurilor


O facilitate a limbajelor de nivel nalt este aceea de a permite organizarea i
execuia procedurilor. O secven de instruciuni care se repet de mai multe ori pe
parcursul unui program se organizeaz ntr-o procedur care se apeleaz din diverse puncte
ale programului principal. Dup fiecare execuie procedura returneaz controlul
programului principal printr-o revenire pe instruciunea urmtoare celei care a realizat
apelul procedurii. Procedurile pot fi imbricate (o procedur apeleaz alt procedur, care
apoi apeleaz alt procedur, ... etc.). De regul este permis ca o procedur s se apeleze pe
ea nsi (proceduri recursive). La apel, procedurii i se transmit de regul parametrii care
vor fi utilizai n calculele executate n interiorul procedurii. La sfritul execuiei
procedurile pot returna valori.
Dou mecanisme eseniale trebuie s funcioneze pentru implementarea
procedurilor:
-

mecanismul de apel i respectiv de revenire din procedur.


mecanismul de transmitere a parametrilor procedurii i de returnare a
rezultatelor obinute n procedur.

A. Instruciunile CALL/RET
n cazul procesoarelor CISC dou instruciuni speciale sunt prevzute pentru
apelul procedurilor (instruciunea CALL) i pentru revenirea din proceduri (instruciunea
RET).
Instruciunea CALL salveaz n stiv adresa de revenire (adresa instruciunii ce
urmeaz dup CALL) i apoi execut un salt necondiionat la adresa de start a procedurii.
Instruciunea RET de la sfritul procedurii realizeaz revenirea n programul principal
citind adresa de revenire din stiv i executnd un salt necondiionat la aceast adres (fig.
2.8).

22

ARHITECTURA SISTEMELOR DE CALCUL

B. Stiva
Stiva este o structur de date de tip coad care funcioneaz pe principiul LIFO
(Last-In-First-Out). Stivele pot fi implementate n memoria principal sau utiliznd registre
interne procesorului. Stiva a fost preferat n memorie (mai cu seam n cazul procesoarelor
CISC) datorit numrului aproape nelimitat de apeluri imbricate sau recursive. Un registru
special al procesorului numit SP (Stack Pointer) memoreaz permanent adresa vrfului
stivei. La memorarea unui cuvnt (de exemplu, de 32 bii) n stiv, mai nti este
decrementat cu 4 registrul SP (cuvntul este format din 4 octei) i apoi cuvntul respectiv
este scris n memorie la adresa SP. La citirea unui cuvnt din stiv, mai nti se citete
locaia de la adresa SP i apoi SP este incrementat cu 4. A rezultat astfel o stiv care crete
n jos (depunerea n stiv se face cu decrementare de adres).

Fig.2.8. Apeluri de procedur prin instruciuni CALL/RET

Stiva poate fi creat i n interiorul procesorului utiliznd un set de registre


dedicate. Avantajul stivelor interne este viteza operaiilor cu stiva care va fi mult
superioar. n cazul RISC se prefer stivele interne dei, n aceast variant, stiva va
conine un numr finit i relativ mic de locaii.

C. Transferul parametrilor prin stiv


Procesoarele care execut instruciuni CALL/RET execut i instruciuni
PUSH/POP pentru salvare/restaurare date n/din stiv. Instruciunea PUSH decrementeaz
registrul SP i apoi memoreaz data specificat (registrul specificat) la aceast adres.
23

Proiectarea setului de instruciuni

Instruciunea POP citete locaia adresat de SP (vrful stivei) i o plaseaz n registrul


specificat, dup care incrementeaz registrul SP. Transferul parametrilor se realizeaz prin
instruciuni PUSH/POP. nainte de apelul procedurii (CALL) n programul principal
parametrii sunt memorai n stiv prin instruciuni PUSH, iar dup apel (n procedur)
parametrii sunt preluai din stiv prin instruciuni POP.

D. Utilizarea ferestrei de registre pentru transferul parametrilor i


pentru variabile locale
Deoarece procedurile sunt foarte utilizate n multe aplicaii, salvarea i restaurarea
registrelor la apelul procedurilor i respectiv revenirea din proceduri consum o parte
semnificativ din timpul procesorului afectnd negativ performanele acestuia. Proiectul
RISC elaborat la Universitatea Berkeley (1985) introducea conceptul ferestrei de registre
(register window) prin care un set de registre interne era utilizat pentru simplificarea i
creterea vitezei de transmitere a parametrilor ntre procedurile imbricate. Era prevzut un
numr de registre locale pentru fiecare procedur. Ideea a fost preluat n cteva dintre
urmtoarele procesoare printre care i procesorul SUN Sparc.
Principiul register window presupune implementarea n cadrul procesorului a
unui set amplu de registre care va memora adresele de revenire i parametrii transferai
ntre proceduri (fig. 2.9.).
Set de registre
Registre disponibile
tuturor procedurilor
(variabile globale)

Pointer-ul de fereastr
(selecteaz fereastra curent)
Registre pentru procedura 1
parametrii de ieire din procedura 1
i respectiv de intrare n procedura 2
Registre pentru
procedura 2
parametrii de ieire din procedura 2
i respectiv de intrare n procedura 3
Registre pentru procedura 3

Registre pentru
procedura 4

Fig. 2.9. Fereastra de registre implementat n procesoare RISC


24

ARHITECTURA SISTEMELOR DE CALCUL

Fiecare procedur poate accesa un subset de registre alocat procedurii respective n


cadrul setului de registre. Subsetul alocat unei proceduri este denumit fereastr de registre
(register window). Registrele din centrul ferestrei sunt utilizate numai de procedura
respectiv. Registrele din partea superioar a ferestrei sunt accesate de procedura respectiv
i de procedura care a apelat-o, iar registrele din partea inferioar de procedura respectiv i
procedura apelat de aceasta. Att partea superioar ct i partea inferioar a ferestrei se
suprapune peste poriuni similare alocate altor proceduri. Cnd o procedur este apelat de
ctre alt procedur (iniial de ctre programul principal), fereastra se mut pe poziia
imediat urmtoare, iar la revenirea din procedur fereastra se mut napoi. Presupunnd c
setul va conine un numr suficient de registre pentru imbricarea procedurilor, putem afirma
c nu mai este necesar salvarea parametrilor i a adresei de revenire n memorie. Setul de
registre este gestionat de un registru pointer de fereastr care identific permanent fereastra
curent. Un al doilea set de registre accesibil tuturor procedurilor este prevzut pentru
variabilele globale.
Analiznd diverse programe s-a constatat c, de regul, numrul de proceduri
imbricate nu este mai mare de 8 i extrem de rar depete 11, iar depirea accidental a
acestor limite se face pentru perioade de timp rezonabil de scurte. Pentru exploatarea
eficient a acestor caracteristici setul de registre este adresat ntr-o manier circular. Un
exemplu specific ar fi procesorul RISC II realizat la Universitatea Berkeley, care are n total
138 registre configurate n 8 ferestre a cte 32 registre fiecare, plus 10 registre globale.
Aranjarea circular a celor 8 ferestre de registre este prezentat n figura 2.10.

Fig. 2.10. Configuraia circular a ferestrelor de registre la procesorul RISC II


25

Proiectarea setului de instruciuni

Pointerul ferestrei curente (CWP - Current Window Pointer) are 3 bii i selecteaz
permanent fereastra care va fi accesat. Registrul care va fi accesat n cadrul ferestrei va fi
specificat n instruciune prin numrul su (0 - 31). Registrele numerotate de la 0 la 9 refer
ntotdeauna registrele globale indiferent de numrul ferestrei curente. Registrele globale
sunt accesibile tuturor procedurilor. Registrele numerotate de la 10 la 31 refer ntotdeauna
registre din cadrul ferestrei curente. Adresa efectiv a unui registru din setul R10 - R31 se
obine prin concatenarea celor 3 bii ce formeaz adresa de fereastr (coninutul CWP) cu
cei 5 bii care specific adresa registrului n cadrul ferestrei. S observm c prin
suprapunerea ferestrelor apar grupuri de registre care rspund la dou adrese. De exemplu,
registrul 0:26 din fereastra 0 (programul principal) este n acelai timp i registrul 1:10 din
fereastra 1 (procedur pe primul nivel de imbricare).
n general numrul procedurilor imbricate este limitat i aranjamentul circular al
ferestrelor se potrivete bine acestei caracteristici. Ori de cte ori acest numr depete
valoarea 8, va trebui utilizat memoria principal pentru salvarea coninutului anumitor
registre. Un alt dezavantaj potenial apare n sistemele de operare multitasking, la
comutarea task-urilor; salvarea contextului consum timp suplimentar (numr mare de
registre).

E. Opiunea noastr privind mecanismul de apel al procedurilor


Opiunea are la baz dou considerente. n primul rnd considerm oportun
evitarea instruciunilor complexe de tip CALL/RET care vor crea probleme n cazul
implementrii procesorului n tehnic pipeline (instruciuni specifice CISC). n al doilea
rnd, pentru c apelul procedurilor poate fi foarte frecvent, considerm oportun evitarea
utilizrii memoriei pentru memorarea adreselor de revenire, a parametrilor i pentru
salvarea registrelor. Dac operaiile sunt frecvente, ar trebui implementate n acord cu
filozofia RISC. Principiul ferestrelor de registre este atractiv i oportun pentru c utilizeaz
registre i pentru modul eficient de transmitere a parametrilor. n cazurile n care numrul
procedurilor imbricate depete numrul ferestrelor trebuie recurs la memorie pentru
salvarea adreselor de revenire i transmiterea parametrilor.
O ultim posibilitate const n transformarea instruciunilor CALL/RET n
secvene de instruciuni simple. Un singur registru intern va fi utilizat pentru memorarea
adresei de revenire: R31. O instruciune CALL simplificat, numit JAL (Jump And Link),
va executa saltul la adresa specificat n instruciune i va memora adresa de revenire n
R31. Pentru revenirea din procedur se poate utiliza un simplu salt necondiionat la
instruciunea a crei adres este dat de R31; va fi suficient o instruciune JMP cu mod de
adresare indirect - registru. Instruciunea JAL poate utiliza formatul I din figura 2.6.
Mecanismul va funciona evident pentru un singur nivel de apel. Pentru imbricare, R31 va
fi memorat n stiv, utiliznd un al doilea registru ca pointer de stiv: R29. n esen, se
creeaz o stiv n vrful creia se va afla R31, iar restul locaiilor se vor afla n memorie.
Secvena de cod necesar pentru apelul i revenirea dintr-o procedur va fi:

26

ARHITECTURA SISTEMELOR DE CALCUL

SUB R29,R29,4
ST [R29],R31
JAL Proc_Label
LD

R31,0[R29]

ADD R29,R29,4

; decrementeaz pointerul de stiv (4 octei)


; memoreaz ultima adres de revenire n stiv
; salt la Proc_Label i memoreaz adresa de
; revenire n R31.
; dup revenirea din procedur, se restaureaz
; adresa de revenire anterioar n R31.
; incrementeaz pointerul de stiv (4 octei)

Revenirea de la sfritul procedurii va fi simpl:


JMP [R31]

; salt la locaia a crei adres se afl n R31

Exist dou alternative pentru salvarea registrelor: salvare nainte de apelul


procedurii (salvarea executat de ctre apelant) i respectiv dup apel (salvarea executat de
ctre apelat). Pentru memorarea parametrilor n stiv, nainte de apel, va fi necesar o
secven de forma:
SUB R29,R29,4
ST [R29],R31
SUB R29,R29,4
ST [R29],Parametru1
SUB R29,R29,4
ST [R29],Parametru2
JAL Proc_Label
Dup definirea principalelor formate de instruciune se poate trece la proiectarea
procesorului. Evident c vor trebui incluse n setul de instruciuni prezentat i alte
instruciuni, dar putem considera c toate aceste instruciuni noi se vor ncadra n formatele
deja descrise. Instruciunile descrise sunt specifice filozofiei RISC.

2.3. Execuia instruciunilor


Execuia instruciunilor se face n pai elementari succesivi. n fiecare pas
elementar se vor executa anumite operaii simple, interne procesorului.

2.3.1. Structura procesorului


Structura intern a procesorului este prezentat n figura 2.11. n structur pot fi
identificate registrele generale R0 - R31 i un numr de registre specializate:
PC

- Program Counter - conine permanent adresa urmtoarei instruciuni de


executat
27

Proiectarea setului de instruciuni

IR

- Instruction Register - conine codul instruciunii curente (n curs de


execuie)
MAR - Memory Address Register - conine adresa locaiei de memorie ce va fi
accesat n timpul unei operaii de citire/scriere memorie.
MDR - Memory Data Register - conine data trimis spre memorie (la scriere) i
respectiv data recepionat din memorie (la citire)
A
- registru tampon - memoreaz coninutul registrului surs Rs1 selectat n
setul de registre generale
B
- registru tampon - memoreaz coninutul registrului surs Rs2 selectat n
setul de registre generale
C
- registru tampon - conine valoarea ce va fi memorat n registrul destinaie
Rd selectat n setul de registre generale

Fig. 2.11. Structura procesorului cu control centralizat

28

ARHITECTURA SISTEMELOR DE CALCUL

n structur mai apare:


ALU

-unitatea aritmetico-logic n care se vor executa operaiile


aritmetice i logice
Unitate de control -va genera semnalele de comand pentru realizarea transferurilor de
date i a altor operaii interne procesorului. Va utiliza coninutul
registrului IR (codul instruciunii curente) pentru a determina ce
comenzi trebuie s genereze i n ce secven. Instruciuni diferite
vor impune secvene de comenzi diferite. Secvenierea n timp a
comenzilor se va face pe baza semnalului de tact al procesorului.
n structur mai apar 3 busuri interne (busurile S1, S2 i D) care interconecteaz
registrele i ALU. Primele dou busuri, S1 i S2, sunt dedicate celor doi operanzi surs
posibil de specificat n instruciune. S1 i S2 transport operanzii pe intrrile ALU. Busul D
transport rezultatele ALU la destinaia specificat n instruciune. Structura cu trei busuri
este specific formatului de instruciune cu trei adrese (de registru).
Cele dou registre, MAR i MDR, au fost prevzute pentru interfaarea
procesorului cu memoria i nu sunt accesibile programatorului (nu pot fi specificate n nici
o instruciune main). naintea oricrui acces la memorie, n MAR va fi ncrcat adresa
locaiei ce urmeaz a se accesa. n instruciunile LD (load), MDR va fi ncrcat cu datele
citite din memorie , iar n instruciunile ST (store), MDR va fi ncrcat de ctre procesor cu
datele ce vor fi scrise n memorie.
Registrele A, B i C sunt de asemenea inaccesibile programatorului i au fost
prevzute pentru interfaarea setului de registre generale R31 - R0. Registrele A i B vor fi
ncrcate cu datele citite din registrele surs specificate n instruciune (Rs1 i Rs2) iar
registrul C va fi ncrcat cu datele ce urmeaz a fi depuse n registrul destinaie specificat
n instruciune (Rd).
Setul de registre generale are structura unei memorii multiport sincron rapid cu
32 locaii a cte 32 bii, care va avea 3 surse de adresare:
- cmpul Rs1 din codul instruciunii pentru citirea primului registru surs n A
- cmpul Rs2 din codul instruciunii pentru citirea celui de-al doilea registru
surs n B
- cmpul Rd din codul instruciunii pentru scrierea datelor din C n registrul
destinaie specificat.
Pentru descrierea transferurilor interne de date vom utiliza notaia:
Rj Ri

; coninutul registrului Ri este transferat n registrul Rj

n structura din figura 2.11. aceste transferuri pot fi realizate numai prin intermediul ALU,
ceea ce implic:

29

Proiectarea setului de instruciuni

a)

ALUR Ri

b) Rj ALUR

; sursa Ri se aplic pe intrarea ALU i se transfer


; pe ieirile ALU ( ALUR )
; ieirile ALUR se transfer n registrul destinaie Rj

Pentru transferul a) este utilizat unul din busurile surs (S1 sau S2), iar pentru transferul b)
este utilizat busul destinaie (D). Cele dou transferuri sunt simultane ceea ce nseamn c,
global, transferul RjRi se va executa ntr-o singur perioad de tact. Registrele Ri i Rj
trebuie s fie registre conectate direct la busuri. Registrele generale R31-R0 nu sunt
conectate direct i de aceea vor realiza transferuri prin intermediul registrelor tampon
A,B,C.

2.3.2. Ciclul fetch instruciune


n acest ciclu, registrul PC conine adresa instruciunii ce urmeaz a se citi din
memorie. Aceast adres va fi transferat n MAR de unde va fi aplicat pe liniile de adres
ale memoriei. Dup o ntrziere datorat timpului de acces la memorie, cuvntul de 32 bii
citit din locaia selectat (codul instruciunii) va fi ncrcat n MDR prin intermediul liniilor
de date ale memoriei. Instruciunea este apoi transferat din MDR n IR i PC este
incrementat cu 4 pentru a pointa pe urmtoarea instruciune n memorie (codul instruciunii
conine 4 octei). Cele trei aciuni (operaii) din cadrul ciclului fetch instruciune sunt:
; se ncarc n MAR adresa instruciunii
; se ncarc n IR codul instruciunii citit din memorie
; incrementare PC (codul instruciunii de lungime fix ; 4 octei)

MAR PC
IR MDR
PC PC + 4

Prima operaie trebuie executat naintea celei de a doua, dar a doua i a treia pot fi
executate simultan dac incrementarea registrului PC nu implic utilizarea ALU (registrul
PC implementat cu logic special de incrementare). Evideniind operaiile simultane,
ciclul fetch instruciune devine:
MAR PC
IR MDR

PC PC + 4

Procesorul opereaz sincron astfel c fiecare operaie sau grup de operaii simultane
starteaz la nceputul perioadei de tact. Ciclul fetch instruciune este independent de tipul
instruciunii i conine ntotdeauna aceleai operaii. Procesarea unei instruciuni ncepe
ntotdeauna cu ciclul (faza) fetch instruciune.

30

ARHITECTURA SISTEMELOR DE CALCUL

2.3.3. Ciclul de execuie


A doua faz, faza de execuie a instruciunii, are un coninut dependent de tipul
instruciunii ce urmeaz a se executa. n cazul instruciunilor aritmetico-logice, de exemplu,
cei doi operanzi trebuie preluai din registrele surs specificate n codul instruciunii i
transferai n registrele tampon A i respectiv B:
A Rs1
B Rs2
Biii IR20 - 16 din codul instruciunii selecteaz registrul Rs1, iar biii IR15 - 11 selecteaz
registrul Rs2 (fig. 2.1.). Deoarece cele dou cmpuri de selecie a registrelor surs sunt
situate, n general, pe aceleai poziii indiferent de tipul instruciunii, este posibil
extragerea lor i adresarea setului de registre generale nainte de decodificarea instruciunii
(decodificarea cmpului opcode). Putem, de asemenea, permite ca cele dou operaii de
transfer a registrelor surs n registrele A i respectiv B s se fac automat pentru toate
instruciunile chiar dac cei doi operanzi surs nu vor fi utilizai (cum ar fi cazul
instruciunii de salt necondiionat JMP care poate s nu specifice nici o surs - vezi fig.
2.6.). Pentru aceste instruciuni care nu au operanzi surs, coninutul registrelor A i B nu
va mai fi utilizat ulterior. Aceasta nu conduce la o degradare a performanelor procesorului
deoarece am prevzut ci de date dedicate i independente ntre setul de registre generale i
registrele tampon A i B. Dac setul RG (registre generale) este implementat ca o memorie
multiport atunci cele 2 operaii pot fi executate simultan:
A Rs1

B Rs2

Am prevzut, de asemenea, o cale de date dedicat ntre registrul C i setul RG care va fi


utilizat la memorarea rezultatului n registrul destinaie.
Urmtoarele operaii depind de tipul sau clasa instruciunii ce urmeaz a se
executa. Tipul instruciunii este codificat n cmpul opcode i va fi cunoscut doar dup
decodificarea acestui cmp. Cmpul opcode va fi decodificat n unitatea de control.

A. Instruciunile aritmetico-logice R-R-R


Execuia instruciunilor aritmetico-logice, cum ar fi
ADD R1,R2,R3,
presupune n continuare urmtoarele operaii:
- transferul registrelor A i B (cei doi operanzi surs) pe intrrile ALU. A va fi
transferat pe busul S1, iar B pe busul S2.
- transferul rezultatului obinut pe ieirile ALU n registrul C; acest transfer va
fi efectuat pe busul D.
- transferul registrului C n registrul destinaie adresat n setul RG cu cmpul
IR25 - 21 din codul instruciunii (fig. 2.1.).
31

Proiectarea setului de instruciuni

n concluzie:
C A <operaie> B
Rd C
Cele dou operaii specificate pot fi descompuse, specificnd i busurile:
S1bus A
,
S2bus B
Dbus S1bus <operaie> S2bus
C Dbus
Operaia ALU va fi specificat prin decodificarea cmpului opcode (sau sub-opcode dac
exist).

B. Instruciunile aritmetico-logice R-R-I


Instruciunile aritmetico-logice care utilizeaz dou registre i o constant sunt
similare cu cele care utilizeaz trei registre cu excepia c locul celui de-al doilea registru
surs este preluat de constanta specificat n cmpul IR15 - 0 din codul instruciunii (fig. 2.2).
Utiliznd notaia IR15 - 0 pentru a specifica constanta, vom avea:
C A <operaie> IR15-0
Constanta poate fi extras din codul instruciunii (aflat n IR) pe unul din busurile S1 sau S2
(fig. 2.11.) de unde va fi aplicat pe una din intrrile ALU.
S ne reamintim c nu am prevzut o instruciune special de transfer (move)
registru-registru. Transferurile registru-registru pot fi executate numai prin ALU utiliznd
instruciunea ADD n care unul dintre operanzi va fi R0 (constanta zero).

C. Instruciunile cu referire la memorie (load/store)


n formatul instruciunilor load/store - versiunea 1 (fig. 2.3.), adresa locaiei de
memorie este specificat de coninutul registrului surs Rs1 la care se adaug un offset
codificat n cmpul IR15 - 0 al codului instruciunii. Adresa astfel calculat trebuie ncrcat
n registrul MAR:
MAR A + IR15-0
Aceast adunare poate fi efectuat n ALU. Urmtoarele operaii sunt dependente de tipul
referinei la memorie: load sau store.

32

ARHITECTURA SISTEMELOR DE CALCUL

n cazul instruciunilor load, coninutul locaiei adresate n memorie va fi


transferat prin intermediul registrelor MDR i C n registrul destinaie Rd selectat de
cmpul IR25 - 21 din codul instruciunii. Secvena complet va fi:
MAR A + IR15-0
C MDR
Rd C

; fixarea adresei de acces


; ncrcarea datelor citite din memorie
; transferul datelor citite n Rd

Un timp acoperitor trebuie s treac (timpul de acces la memorie) din momentul ncrcrii
adresei n MAR i pn la transferul datelor din MDR n C.
Pentru instruciunile store ne confruntm cu o excepie: registrul surs este
specificat n cmpul destinaie al codului instruciunii (IR25 - 21). O prim soluie ar fi ca n
primul pas al fazei de execuie, simultan cu ncrcarea registrelor A i B, s fie ncrcat i
registrul C cu coninutul registrului destinaie:
A Rs1

B Rs2

C Rd

Dup acest prim pas coninutul registrului C va fi emis spre memorie prin intermediul
registrului MDR. Secvena complet pentru execuie va fi:
MAR A + IR15-0
MDR C

; fixarea adresei de acces


; fixarea datelor de scris n memorie

Acest principiu impune implementarea setului RG cu trei porturi de citire. O soluie


alternativ, care pstreaz adresa registrului surs n cmpul destinaie al codului
instruciunii (IR25 - 21), const n utilizarea unui hardware de redirectare atunci cnd este
decodificat o instruciune store. Acest hardware, activat pe durata fazei de execuie a
instruciunilor store, determin utilizarea registrului B n locul registrului C. Secvena de
operaii ce compun ciclul de execuie devine:
A Rs1
,
B Rd
MAR A + IR15-0
MDR B

; acioneaz hardware -ul de redirectare


; acioneaz hardware -ul de redirectare

n acord cu structura procesorului din figura 2.11., n ultimele dou operaii (ncrcarea
adresei n MAR i respectiv a datelor de scris n memorie n MDR), traseul datelor
transferate trece prin ALU. Din acest motiv cele dou operaii nu pot fi executate simultan.
Dac n structura procesorului s-ar implementa o cale de date direct ntre registrele B i
MDR atunci cele dou transferuri ar fi putut fi simultane.

33

Proiectarea setului de instruciuni

D. Instruciunile de branch
n faza de execuie a instruciunilor de branch trebuie verificat condiia de salt
specificat n instruciune. Dac condiia este adevrat, atunci se va calcula adresa de salt
i se va ncrca n PC. Condiiile de salt, stabilite pe baza registrelor Rs1 i Rs2 (vezi
paragraful 2.2.4 C), pot fi verificate examinnd rezultatul scderii Rs1 - Rs2:
condiie A <operaie> B
Adresa de salt se calculeaz adunnd offset-ul specificat n instruciune (fig. 2.5.) la adresa
curent din PC:
ALUR PC + IR15-0
Cu resurse hard suficiente, adresa de salt poate fi calculat simultan cu evaluarea condiiei
de salt. Din pcate, calculul adresei de salt revendic ALU i busurile de date interne.
Acesta e motivul pentru care anumite procesoare RISC opereaz cu o singur condiie de
branch, A = 0, care poate fi evaluat utiliznd un hardware simplu i rapid de detecie de
zero.
Pasul final din faza de execuie const n ncrcarea adresei de salt n PC dac este
ndeplinit condiia testat:
IF Condiie=TRUE THEN PC ALUR
n caz contrar, ncrcarea n PC se inhib i se va trece la urmtoarea instruciune din
secven.

E. Instruciunile de salt (jump)


Realizeaz salturi necondiionate relative la PC prin simpla adunare a offset-ului
specificat n instruciune la coninutul registrului PC. Deoarece avem de-a face cu un offset
pe 26 bii, va fi necesar un hardware de validare, activat pe durata execuiei instruciunii
JMP, i care va valida transferul ntregului offset (IR25 - 0) pe busul intern. n aceste condiii
execuia devine:
PC PC + IR25-0
Pentru instruciunile jump cu adresare indirect-registru, ca de exemplu JMP123[R4],
secvena de execuie va fi:
PC A + IR15-0

34

ARHITECTURA SISTEMELOR DE CALCUL

Registrul specificat a fost ncrcat n A n pasul anterior, iar offset-ul are doar 16 bii
(fig.2.7.).
Instruciunea de apel procedur, JAL, este similar cu instruciunea JMP;
suplimentar JAL va ncrca adresa de revenire n R31. Execuia instruciunii JAL va fi:
R31 PC
PC PC + IR25-0
Deoarece registrul PC a fost incrementat deja n ciclul fetch instruciune, n R31 se va
ncrca adresa instruciunii ce urmeaz dup JAL n secven.

F. Instruciunile de control
Sunt instruciuni cel mai adesea fr operanzi i care specific doar o operaie.
Instruciunea NOP (No OPeration) este prezent n orice set de instruciuni. Este utilizat la
separarea dependenelor ntre instruciuni (procesoare pipeline) i la depanarea programelor
cnd NOP nlocuiete instruciunile eliminate. Cel mai convenabil cod pentru NOP este
zero (32 bii de 0) ceea ce nseamn c o memorie iniializat cu zero va conine numai
instruciuni NOP.
Instruciunea HALT oprete procesorul (inhib semnalul de tact). Ieirea din
aceast stare de oprire se poate face, de regul, numai printr-o ntrerupere sau prin
iniializarea procesorului (RESET).

35

Proiectarea setului de instruciuni

36

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