Sunteți pe pagina 1din 22

Facultatea de Inginerie și

Tehnologia informației

Extinderea setului de instrucțiuni

Arhitectura sistemelor de calcul

Piroska Haller
piroska.haller@ umfst.ro
Pentru uz intern
Este interzisă copierea și distribuirea neautorizată a acestui material.
Arhitectura de bază
Adrese
Tip operație
Formatul instrucțiunilor: S D R

Este interzisă copierea și distribuirea neautorizată a acestui material.


Criterii pentru extinderea setului de
instrucțiuni
• lungimea codului stocat
• timpul de execuție al instrucțiunii
• complexitatea unității de control
• posibilitatea de executare pe bandă rulantă
• posibilitatea de executare paralelă
• compatibilitate cu arhitecturi vechi
• posibilitatea de optimizare a compilatorului
• posibilitatea de a schimba ordinea de execuție a
instrucțiunilor cu scopul de a reduce operațiile de
transfer între memorie și unitatea centrală de
prelucrare
Este interzisă copierea și distribuirea neautorizată a acestui material.
Alegerea numărului și a tipului de
registre
• toate să fie de uz general
• să fie specializate cu funcții speciale adăugate cum ar
fi autoincrementarea
• să fie mai multe seturi identice care se schimbă între
ele în cazul apelului de funcții
• instrucțiunile aritmetice și logice vor definii
operanzii în memorie și acumulator
• instrucțiunile aritmetice și logice vor definii
operanzii numai în registre

Este interzisă copierea și distribuirea neautorizată a acestui material.


Modelul registru - registru
• poate avea 1-3 operanzi în registre (sursă, destinație,
rezultat)
• nu conține nici un câmp de adresă
• încărcarea registrelor din memorie se va realiza cu
instrucțiuni speciale, LOAD, STORE.
• Avantaje:
• Instrucțiunile sunt simple, scurte, fiecare câmp are lungime fixă
și poate fi decodificat direct. Timpul de execuție este mai mic,
nu necesită transferul operanzilor. Timpul de execuție este fix,
conține aceeași număr de microoperații, facilitând modelul de
execuție pe bandă rulantă.
• Dezavantaje:
• Compilarea programelor de limbaj înalt generează mai multe
instrucțiuni cod mașină, și lungimea codului devine mai mare.

Este interzisă copierea și distribuirea neautorizată a acestui material.


Modelul memorie – registru
• unul din operanzi se află în memorie, adresa acestuia
este inclusă în instrucțiune
• registrul selectat va conține unul din operanzi și
rezultatul operației
• formatul instrucțiunii poate fi cu lungime variabilă.
• Avantaje:
• Se poate obține un cod mașină mai compact în urma compilării.
Nu se va executa o instrucțiune în plus pentru încărcarea
operandului pentru fiecare instrucțiune aritmetică și logică.
• Dezavantaje:
• Timpul de execuție variază în funcție de timpul de acces al
operandului, memorie sau registru. Unitatea de control este
mai complexă din cauza numărului variabil de microoperații.

Este interzisă copierea și distribuirea neautorizată a acestui material.


Moduri de adresare
• adresarea directă – este metoda prezentată în modelul
simplificat, în care instrucțiunea conține adresa operandului
ADD A, 100H – adună conținutul acumulatorului cu operandul de la
adresa 100H
• adresare imediată - codul instrucțiunii conține operandul
• va fi extras împreună cu instrucțiunea
• nu necesită încă un acces la memorie
• nici nu va ocupa un registru

ADDI A, #2 – adună valoarea doi la conținutul acumulatorului


MOV R0, #7 – încarcă valoarea 7 în registrul R0

• Un număr mare de secvențe de cod conțin incrementări, decrementări


INC A – incrementează conținutul acumulatorului
DEC A – decrementează conținutul acumulatorului

Este interzisă copierea și distribuirea neautorizată a acestui material.


Moduri de adresare
• adresare prin registre - operandul este stocat într-un
registru intern al procesorului (R0-Rn).
• conține 3 câmpuri de selecție registru pentru sursă, destinație și
rezultat
ADD R5, R0 – adună conținutul registrului R5 cu conținutul registrului
R0, iar rezultatul va fi înscris în R5

• adresarea indirectă prin registru – instrucțiunea va


conține selectorul unui registru, care la rândul ei conține
adresa operandului
• este echivalentă cu noțiunea de pointer din limbajul C,
• permite definirea unei operații pe toate elementele unui tablou cu o
singură instrucțiune

ADD R1, (R2) – adună conținutul registrului R1 cu conținutul locației


de memorie a cărei adresă este înscrisă în registrul R0, iar rezultatul va
fi înscris în R1

Este interzisă copierea și distribuirea neautorizată a acestui material.


Moduri de adresare
• adresare indexată – instrucțiunea va conține selectorul unui
registru, care la rândul ei conține adresa operandului, dar
care se incrementează sau decrementează automat (Rind+,
RInd-)

unsigned char i, MOV R0, #10 MOV R0, #10


s=0, a[10];
for ( i=0; i<10 ; MOV R1. #0 MOV R1. #0
i++) MOV R2, #102 MOV RInd+, #102
s = s | a[i];
i la adresa 100H ET: OR R1, (R2) ET: OR R1, (RInd+)
s la adresa 101H INC R2 DEC R0
tabloul a 102H –10BH
DEC R0 JNZ ET
R0 valoarea lui i JNZ ET
R1 valoarea lui s
R2 adresa tabloului

Este interzisă copierea și distribuirea neautorizată a acestui material.


Moduri de adresare
• adresarea relativ la bază - adresa efectivă a operandului se
calculează adunând conținutul registrului de bază (BP) cu
deplasamentul specificat în codul instrucțiunii.
MOV R3, BP+200H mută conținutul locației de memorie de la adresa
calculată ca fiind suma dintre conținutul registrului de bază și valoarea
200H considerată deplasament, în registrul R3.
• Un exemplu de utilizare ar fi accesul rapid la același câmp dintr-o
înregistrare al tabelei.
• schimbând conținutul registrului de bază, avem acces la același câmp
al diferitelor înregistrări
• poate fi combinată și adresarea indexată, astfel parcurgerea unor
structuri mai complexe devine mai simplă.

• adresarea unui bit - se realizează prin instrucțiuni speciale


• în sistemele încorporate - acces rapid la intrări și ieșire pe bit
individuale

Este interzisă copierea și distribuirea neautorizată a acestui material.


Extinderea instrucțiunilor de control
• Indicatori de stare:
Z – (Zero), are valoarea 1 dacă rezultatul operației aritmetice sau logice
pe registrul destinație este 0
S – semn (Sign), 0 pozitiv, 1 negativ
C – transport (Carry) – are valoarea 1 dacă există transport sau
împrumut pe cel mai semnificativ bit
V – depășire (Overflow) - depășirea de capacitate la operații cu semn

ADDLE R1, R0, #48 - operația de adunare între R0 și valoarea 48 cu


rezultatul depus în R1 va fi executată dacă în urma operației precedente
bitul de transport (C) nu este setat.
MOVEQ R2, R3 - mută conținutul registrului R3 în registrul R2, dacă
bitul indicator Z este setat de operația precedentă.
BP Et – salt la adresa Et, dacă bitul de semn este setat pe 0 de operația
precedentă.

Atenție! operația precedentă nu înseamnă instrucțiunea precedentă


biții indicatori de stare nu sunt modificați de toate instrucțiunile
Este interzisă copierea și distribuirea neautorizată a acestui material.
Apelul de procedură
• Cerințe de proiectare:

1. Definirea locației pentru parametrii de intrare. Secvența


de instrucțiuni executată înainte de apelul procedurii va
stoca datele în această zonă.
2. Salvarea adresei instrucțiunii la care se va reveni la
terminarea procedurii.
3. Transferul controlului primei instrucțiuni din procedură.
4. Executarea instrucțiunilor din procedură, care vor citi,
scrie parametrii transmiși.
5. Stocarea rezultatului într-o locație unde poate fi accesat
după terminarea procedurii.
6. Revenirea la instrucțiunea a cărei adresă a fost salvată.

Este interzisă copierea și distribuirea neautorizată a acestui material.


CALL adr
• se va adăuga în unitatea centrală de prelucrare un registru RS,
în care se va salva adresa de revenire,
• parametrii și rezultatul vor fi transferați de registre de uz
general, după o convenție stabilită de compilator.
Microoperație Descriere
RA  PC se transferă adresa instrucțiunii următoare din numărătorul de program
pe magistrala de adresă prin registrul de adrese
RC  MEMR se activează linia MEMR (citire din memorie) pe magistrala de control
prin registrul de control
RD  M(RA) se citește din memorie în registrul de date de la adresa activă pe
magistrala de adrese
RI  RD instrucțiunea citită se transferă din registrul de date în registrul de
instrucțiuni și se decodifică
PC  PC+l se incrementează valoarea numărătorului de program cu lungimea l a
instrucțiunii curente (va conține adresa instrucțiunii următoare)
RS  PC se salvează conținutul numărătorului de program (care conține deja
adresa instrucțiunii de după CALL, deoarece a fost incrementat) în
registrul de salvare
PC  RIadr se transferă adresa instrucțiunii următoare din registrul de instrucțiuni
în numărătorul de program

Este interzisă copierea și distribuirea neautorizată a acestui material.


RETURN
• soluția propusă nu permite apelul de procedură într-o
procedură, deoarece adresa de revenire se suprascrie

Microoperație Descriere
RA  PC se transferă adresa instrucțiunii următoare din numărătorul de program
pe magistrala de adresă prin registrul de adrese
RC  MEMR se activează linia MEMR (citire din memorie) pe magistrala de control
prin registrul de control
RD  M(RA) se citește din memorie în registrul de date de la adresa activă pe
magistrala de adrese
RI  RD instrucțiunea citită se transferă din registrul de date în registrul de
instrucțiuni și se decodifică
PC  PC+l se incrementează valoarea numărătorului de program cu lungimea l a
instrucțiunii curente (va conține adresa instrucțiunii următoare)
PC  RS se transferă adresa salvată din registrul RS în PC, astfel următoarea
instrucțiune ce va fi executată este cea de după instrucțiunea CALL

Este interzisă copierea și distribuirea neautorizată a acestui material.


Stiva
• este o structură de date în care scoaterea elementelor se va realiza în
ordinea inversă depunerii lor (Last In First Out)
• scrierea (stocarea) și citirea (scoaterea) se va realiza pe vârful stivei
• stiva este organizată în memorie
• adresa primei locații libere va fi stocat într-un registru al UCP denumit
indicatorul de stivă (SP)
• stiva “crește” de la adrese mari spre adrese mici
• după depunerea unui element indicatorul de stivă se va decrementa
• pentru a citi un element de pe vârful stivei indicatorul de stivă trebuie
incrementat înainte
• poate fi utilizată și pentru transmiterea parametrilor, definirea variabilelor
locale
PUSH R0 – depune conținutul registrului R0 pe vârful stivei
POP R0 – scoate valoarea de pe vârful stivei și stochează în registrul R0

Este interzisă copierea și distribuirea neautorizată a acestui material.


fazele de execuție CALL adr - RETURN
Microoperație Descriere
RD  PC se transferă conținutul numărătorului de program (adresa de
revenire) pe magistrala de date prin registrul de date
RA  SP se transferă adresa stivei din indicatorul de stivă pe magistrala de
adresă prin registrul de adrese
RC  MEMW se activează linia MEMW (scriere în memorie) pe magistrala de
control prin registrul de control
M(RA)  RD se scrie în stivă (organizat în memorie) datele (adresa de revenire)
de pe magistrala de date, la adresa activă pe magistrala de adrese
SP  SP-1 se decrementează indicatorul de stivă, pentru a conține adresa
următoarei poziții libere
PC  RIadr se transferă adresa instrucțiunii următoare din registrul de instrucțiuni
în numărătorul de program

Microoperație Descriere
SP  SP+1 se incrementează indicatorul de stivă, pentru a conține adresa ultimei
poziții scrise
RA  SP se transferă adresa stivei din indicatorul de stivă pe magistrala de adresă
prin registrul de adrese
RC  MEMR se activează linia MEMR (citire din memorie) pe magistrala de control prin
registrul de control
RD  M(RA) se citesc din stivă (organizat în memorie) datele (adresa de revenire) în
registrul de date de la adresa activă pe magistrala de adrese
PC  RD se transferă adresa instrucțiunii următoare din registrul de date în
numărătorul de program

Este interzisă copierea și distribuirea neautorizată a acestui material.


Apelurilor pe mai multe nivele

Este interzisă copierea și distribuirea neautorizată a acestui material.


Operații de control cu adrese relative
• JMPShort deplasament
• includerea adreselor complete în instrucțiune crește dimensiunea
instrucțiunilor
• dimensiunea unui program este mult mai mică decât spațiul de
adresare
• instrucțiunile de control vor conține doar un deplasament, iar saltul
se va efectua relativ la valoarea curentă a numărătorului de program

• Adresarea relativ la bază poate fi activată și pentru calculul


instrucțiunilor
• fiecare program poate fi compilat (transformat în cod mașină)
începând cu adresa 0, iar ulterior încărcat în memorie la orice adresă
• permite încărcarea simultană a mai multor programe în memorie
• în momentul rulării programului adresa instrucțiunii următoare se va
calcula adunând valoare registrului de bază, la fel se va calcula și
adresa operandului

Este interzisă copierea și distribuirea neautorizată a acestui material.


Compararea modelului RISC vs. CISC
• Sisteme cu set redus de instrucțiuni – RISC
• Lungimea instrucțiunilor fixă și cu câmpuri de lungime fixă
• Număr redus de instrucțiuni aritmetice și logice cu durată de
execuție aproximativ egală folosind operanzi în registre sau
constante din instrucțiune.
• Unitatea centrală de prelucrare este simplă, iar accesul la
memorie se va realiza doar de instrucțiunile de transfer.
• Implementarea operațiilor mai complexe și al funcțiilor
speciale este sarcina programatorului.
• Pentru operații complexe timpul de execuție crește datorită
numărului mare de instrucțiuni ce trebuie extrase din memorie
și executate.
• Transferul datelor între două zone de memorie se va executa cu
multe instrucțiuni, deoarece fiecare cuvânt trebuie citit în UCP
și apoi transferat înapoi în memorie, un contor trebuie
decrementat și testat, dacă s-au efectuat toate operațiile de
transfer.

Este interzisă copierea și distribuirea neautorizată a acestui material.


Compararea modelului RISC vs. CISC
• Sisteme cu set complex de instrucțiuni – CICS
• Multe instrucțiuni complexe pe structuri de date cum ar fi
șiruri de caractere, tablouri, date multimedia.
• Formatul instrucțiunilor și modurile de adresare variază foarte
mult.
• Timpul de execuție a instrucțiunilor variază cu complexitatea.
• Unitatea de execuție are o structură complexă, cu multe faze
ale instrucțiunilor și multe registre specializate.
• Implementarea operațiilor complexe și funcțiilor speciale este
optimizat, nu depinde de alegerile făcute de programator.
• S-a adăugat noțiunea de prefix, care permite repetarea unei
instrucțiuni fără extragerea instrucțiunii de repetate ori până
când un contor prestabilit devine 0.
• Transferul datelor între zone de memorie poate fi
implementată cu o singură instrucțiune și cu prefixul de
repetare.

Este interzisă copierea și distribuirea neautorizată a acestui material.


RISC
• ADD R0, R5 fază de execuție cu o singură microoperație

Microoperație Descriere
RA  PC se transferă adresa instrucțiunii următoare din numărătorul de program
pe magistrala de adresă prin registrul de adrese
RC  MEMR se activează linia MEMR (citire din memorie) pe magistrala de control
prin registrul de control
RD  M(RA) se citește din memorie în registrul de date de la adresa activă pe
magistrala de adrese
RI  RD instrucțiunea citită se transferă din registrul de date în registrul de
instrucțiuni și se decodifică
PC  PC+l se incrementează valoarea numărătorului de program cu lungimea l a
instrucțiunii curente (va conține adresa instrucțiunii următoare)
R0  R0+R5 adună conținutul registrului R0, cu conținutul registrului R5, iar
rezultatul va fi înscris în registrul R0

Este interzisă copierea și distribuirea neautorizată a acestui material.


CISC
• ADD R0, BP+(Rind+) adresare relativ la bază indexat.
Adresa de bază din registrul BP se adună atât la adresa
instrucțiunii cât și la cel al operandului.
Microoperație Descriere
RA  BP+PC se transferă adresa instrucțiunii următoare (suma numărătorului de program și al registrului de
bază) pe magistrala de adresă prin registrul de adrese
RC  MEMR se activează linia MEMR (citire din memorie) pe magistrala de control prin registrul de control

RD  M(RA) se citește din memorie în registrul de date de la adresa activă pe magistrala de adrese

RI  RD instrucțiunea citită se transferă din registrul de date în registrul de instrucțiuni și se decodifică

PC  PC+l se incrementează valoarea numărătorului de program cu lungimea l a instrucțiunii curente (va


conține adresa instrucțiunii următoare)
RA  BP+Rind se transferă adresa operandului (suma dintre registrul de bază și conținutul registrului index) pe
magistrala de adresă prin registrul de adrese
RC  MEMR se activează linia MEMR (citire din memorie) pe magistrala de control prin registrul de control

RD  M(RA) se citește din memorie în registrul de date de la adresa activă pe magistrala de adrese

R0  R0+RD se adună conținutul registrului R0 cu operandul extras din memorie (RD) și se depune rezultatul
în R0
Rind  Rind+1 Se incrementează valoarea registrului index pentru a indica următorul element memorie (pentru
a conține următoarea adresă din vector)

Este interzisă copierea și distribuirea neautorizată a acestui material.

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