Documente Academic
Documente Profesional
Documente Cultură
Cap2 PDF
Cap2 PDF
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)
; R4 = R5 + 64
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.
15
C - carry
S - semn
O - overflow
L1
18
; 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
Cele dou instruciuni (BEQ i BL) sunt suficiente pentru a implementa toate tipurile de
test necesare:
Condiie
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
BEQZ R3,L1
BEQNZ R3,L1
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
Ri,Rj,L1
Ri,Rj,L1
Ri,Rj,L1
Ri,Rj,L1
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
; salt dac R1 = R1
sau chiar:
JMP 134[R2]
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
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).
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
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).
26
SUB R29,R29,4
ST [R29],R31
JAL Proc_Label
LD
R31,0[R29]
ADD R29,R29,4
IR
28
n structura din figura 2.11. aceste transferuri pot fi realizate numai prin intermediul ALU,
ceea ce implic:
29
a)
ALUR Ri
b) Rj ALUR
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.
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
B Rs2
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).
32
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
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
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.
34
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
36