S-a artat c unitatea de memorie n calculatoarele contemporane se realizeaz cu ajutorul modulelor integrate. Legtur dintre CPU i memoria principal se realizeaz prin trei magistrale: magistrala de adrese ADRBUS; magistrala de date DATA BUS; magistrala de control CONTROL BUS.
Magistrala de adrese este unidirecional, cea de date este bidirecional, iar cea de control conine linii de comand, dar i linii informaie de stare. Memoria este organizata pe locaii:
0 B m-1 B 1 B 0
1
k-1 k k+1
2 n - 1 O locaie are m ranguri notate B m-1 , B 1 , B 0 .
Citirea i scrierea memoriei se face paralel, deci, se scrie sau se citete un cuvnt pe m bii. Adresarea memoriei se face prin magistrala de adrese (ADRBUS) i se presupune c aceast magistral are n linii. Pentru fiecare combinaie de bii ai acestei magistrale se definete o anumit adres. Deci, legtura ntre coninutul magistralei i o anumit locaie se face printr-un proces de decodificare. Dac magistrala de adrese are n linii atunci mulimea adreselor este 2 n . A = {0,1,...2 n -1} unde: A = spaiul adreselor
2
Pe de alt parte, dndu-se o geometrie a memoriei rezult mulimea locaiilor fizice n care sunt memorate cuvinte care conin m bii.
Definiie: Mulimea tuturor locaiilor fizice definite de o geometrie a memoriei se numete spaiul memoriei M.
Legtura ntre spaiul adreselor i spaiul memoriei este dat de o funcie de translatare definit astfel: f T : A M.
Conform celor discutate, aceast funcie corespunde unei funcii de decodificare. n cazul sistemelor simple (microcalculatoarele) cele 2 mulimi vor fi identice M = A i astfel f este foarte simpl.
Atunci cnd limea cuvntului memorie nu este suficient pentru reprezentarea datei, atunci se vor utiliza mai multe locaii consecutive. Dac de exemplu, o dat se reprezint pe dou cuvinte n memorie (UIA), atunci pentru a reprezenta data, se va folosi prima locaie pentru reprezentarea cuvntului mai puin semnificativ (de la adresa j), iar locaia urmtoare (adresa j+1) pentru cuvntul mai semnificativ.
Procesoarele moderne au faciliti de gestiune a memoriei. Operaiile de gestiune se refer la implementarea memoriei virtuale, protecia memoriei etc.
Unitatea de gestiune a memoriei (Memory Management Unit - MMU) poate fi ncorporat n unitatea de control din CPU sau poate fi extern unitii de control. n particular, n cazul microprocesoarelor pot fi ncorporate n microprocesoare sau sunt livrate ca un modul separat - modulul MMU).
Pentru implementarea conceptului de memorie virtual se folosete urmtoarea schem de principiu:
AL reprezint adresa logic care este generat de CPU prin citirea instruciunii curente. Prin prelucrarea adresei logice n MMU rezult adresa fizic. MMU realizeaz o alta funcie de translatare f T * : AL AE. f T * realizeaz translatarea ntre adresele logice (virtuale) i cele fizice (reale). Dac adresa logic nu are corespondent fizic n memoria principal, atunci se genereaz comenzile de transfer (CT) pentru transferul ntre memoria extern i memoria principal.
Realizarea practic a conceptului de memorie virtual se bazeaz pe transferul n blocuri ntre memoria extern i memoria principal. Cea mai rspndit metod de implementare este metoda segmentrii memoriei.
S-a artat c fiecare instruciune la nivel cod maina este format din 2 cmpuri mari:
3 OPCODE ADRES
n l
L
In cmpul de adresa apar acele elemente constitutive ale adresei logice din care prin efectuarea anumitor calcule se determin adresa efectiv sau adresa fizic. n cazul adresei efective: AE = f(AL) unde: AL - adresa logica; AE - adresa efectiv
Pe lng aceste elemente constitutive din cmpul de adres, care formeaz adresa logic, pot interveni i alte elemente care sunt memorate n registrele din CPU sau memorie.
La calculatoarele moderne rareori adresa efectiv coincide cu adresa logic. Din contr, n structura modern aceast funcie este din ce n ce mai complex. Scopul este de a asigura o mare flexibilitate n programare, precum i de a scurta lungimea programelor. Se are n vedere i scurtarea lungimii instruciunilor, aceasta n condiiile n care volumul total al memoriei adresate (deci spaiul memoriei) este din ce n ce mai mare.
S-a artat c un ciclu instruciune este format din 2 faze mari. Fiecare faz este mprit n subfaze ca n figur.
Fetch Execute
Fetch AE Fetch Data Execute
Faza a doua (AE) este importat n studiul de fa n care are loc calculul adreselor efective pentru operand (deci determinarea lui AE).
I. Adresare tip operand presupus
Exist situaia n care operandul este subneles ca parte integrant din OPCODE, deci nu trebuie s apar n mod explicit n instruciune (nici ca valoare, nici ca adres).
De exemplu: instruciunea de incrementare - valoarea de incrementare 1 este subneles, deci dac se execut instruciunea de incrementare are loc creterea acumulatorului cu 1. instruciunea SHIFT - se presupune c valoarea de deplasare este 1, deci nu este nevoie s facem alt precizare.
II. Adresare implicit
S-a artat c la instruciunea cu dou sau cu o adres n realizarea operaiilor intervine un registru special din CPU, anume acumulatorul. Acesta intervine prin nsi construcia calculatorului. Nu este necesar sa se dea explicit.
4 OPCODE ADR1 ADR2 ACC (ADR1)*(ADR2)
OPCODE ADR ACC (ADR)*(ACC)
Mai mult la CPU moderne pot fi desemnate anumite registre generale care s memoreze o adres de operand. Aceste registre generale se numesc DATA COUNTER. La proiectarea CPU se ine seama de mecanismul adresrii implicite astfel: operandul se citete din memorie de la adresa dat de Data Counter, adic acest registru este pe post de numrtor avnd faciliti de incrementare sau decrementare. n acest fel el permite adresarea pentru un bloc de date. Rezult c se distinge adresarea implicita prin DC prin autoincrementare sau autodecrementare. Suplimentar trebuie s se prevad acea operaie de ncrcare (LOAD adresa) a adresei de nceput a blocului de date.
Se disting dou variante de realizare a operaiei de citire a operandului: nainte de incrementare/decrementare; incrementare/decrementare post-operaie; dup incrementare/decrementare - incrementare/decrementare pre-operaie.
Este o adresare implicit cu incrementare post-operaie. Pas I - are loc adresarea locaiei A212, unde face CLEAR (se cur) Pas II - DC-ul se incrementeaz cptnd valoarea A213.
Adresare implicit cu incrementare post-operaie
5
Este o adresare implicit cu decrementare pre-operaie. Pas I - modificarea coninutului DC prin decrementare, se trece la adresa BE23 Pas II - are loc CLEAR la adresa BE23.
Observaie: Exist CPU la care se pot defini simultan mai multe DC deci se pot baleia simultan mai multe blocuri de date.
III. Adresarea imediat
Acest mecanism de adresare ncalc principiul general de adresare; operandul nu se memoreaz separat de instruciune, ci face parte integrant chiar din instruciune. Acest operand se numete dat imediat.
OPCODE ID OPERAND
Avnd n vedere c n formatul instruciune intervine i cmpul de OPCODE rezult c lungimea operandului va fi mai scurt dect a operandului standard din calculator, dar principalul avantaj al datei imediate este c aceasta devine disponibil dup realizarea fazei fetch instruciune, faza fetch data nu mai este necesar. Fiecare fetch presupune un ciclu de citire a memoriei, care este consumator de timp, dar cum adresarea imediat ofer operandul odat cu instruciunea execuia este mult mai rapid.
n cazul minicalculatorului cu cuvinte pe 16 bii, data imediat nsoete OPCODE-ul sub forma unui cuvnt de 16 bii (mai nti apare OPCODE-ul i apoi data imediat).
Adresare implicit cu decrementare pre-operaie
6
8 bii 16 bii
OPCODE Instruciune OPCODE Instruciune Data imediat Data imediat
M. O. M. O.
IV. Adresare direct
Adresarea direct reprezint cel mai natural mod de adresare a memoriei la care adresa logic coincide cu adresa efectiv.
Distingem urmtoarele subclase de adresare direct: 1. adresare direct cu referire la registru; 2. adresare direct cu referire la memorie; 3. adresare direct cu referire la un dispozitiv de intrare-ieire; 4. adresare direct combinat.
1. Adresare direct cu referire la registru
S-a artat c toate procesoarele moderne conin un numr de registre generale cu acces foarte rapid a cror reuniune formeaz memoria local. n aceste registre se introduc datele curente pentru prelucrare. ntruct numrul registrelor este mic, i adresa de registru este mic (mare avantaj).
Pe de alt parte i accesul la date este mult mai rapid ntruct nu se declaneaz un ciclu de citire a memoriei. Citirea registrelor din memora local se face foarte rapid, cci acestea sunt componente ale CPU.
2. Adresare cu referire la memorie
Adresare direct cu referire la registru
7
n acest caz operandul (data) se afl n memoria principal, n zona de date. Adresarea memoriei principale se face prin intermediul registrului MAR (registrul de adresare a memoriei). Dac memoria are 2 n locaii atunci cmpul de adres trebuie s aib n bii.
ntruct memoriile contemporane devin tot mai mari, rezult c numrul de ranguri folosite pentru adresare crete, deci instruciunile cu adresare la memorie, necesit un numr mare de bii (lungime mare).
Execuia unei astfel de instruciuni, presupune transferul din cmpul de adres, al adresei logice, n registrul MAR, declanarea unui ciclu de citire a memoriei i extragerea din locaia adresat a operandului.
n cazul microcalculatoarelor pe 8 bii o astfel de instruciune este dispus pe 3 octei: primul octet reprezint OPCODE; al doilea octet reprezint jumtatea inferioar a adresei; al treilea octet reprezint jumtatea superioar a adresei.
ROM
OPCODE ADR INF ADR SUP
Dup citirea primului octet (opcode) unitatea de control decodific instruciunea n urma creia tie c este o instruciune pe trei octei cu adresare direct la memorie.
3. Adresare cu referire la dispozitivele de intrare-ieire S-a artat c aceasta categorie de instruciuni este foarte diversificat i ar trebui s conin cmpurile:
OPECODE ID Adres canal Adres periferic
Adresare direct cu referire la memorie
8 4. Adresare combinat
De multe ori unul dintre operanzi se afl n memorie, iar al doilea ntr-un registru general i deci, instruciunea trebuie s conin adresele celor doi operanzi. Rezult c este o combinaie a cazurilor 1 i 2. Dac ar fi o instruciune cu 2 adrese n care ambii operanzi se afla n memorie, s-ar obine o instruciune foarte lung (neconvenabil).
V. Adresare paginat
Adresarea paginat este o variant de adresare direct. A aprut din necesitatea de a scurta lungimea instruciunilor. S-a artat ca n cazul adresrii memoriei, cmpul de adres este lung (cu ct volumul memoriei este mai mare cu att i cmpul de adres este mai lung).
S-au cutat metode prin care s se poat scurta lungimea cmpului de adres. O variant eficient const n divizarea ntregului spaiu de memorie n pagini de memorie. Aceast divizare este conceptual i ajut la simplificarea adresrii memoriei.
Fiecare pagin are un numr fix de locaii, iar numrul de pagini este dependent de volumul global al memoriei i de mrimea unei pagini. Mrimea unei pagini este corelat cu lungimea cmpului de adresa din instruciune. n cazul n care cmpul de adres al instruciunii are K bii atunci se recomand ca mrimea unei pagini s fie 2 k locaii.
Organizarea paginat a memoriei este utilizat i la memorii virtuale. Paginile pot fi plasate la adrese fixe n cazul paginii fixe sau la adrese mobile
n cazul paginii dinamice.
Exemplu: se consider o instruciune la care cmpul de adresa are 8 bii. Atunci o pagin va conine 256 locaii.
1. Adresare direct la pagin zero
Se utilizeaz cmpul de adres pe 8 bii (in general k bii) al instruciunii pentru adresarea celor 256 de locaii numai din pagina zero. Locaia selectat este citit i operandul transferat n ALU.
Exemplu de organizare paginat a memorie
9 Avantajul adresrii la pagin zero este lungimea mic a instruciunii. n loc s se foloseasc 16 bii pentru adres (n general numrul n de bii) pentru adresa se folosesc numai 8 bii (n general k bii unde n > k).
Dezavantajul l reprezint accesul numai n pagina zero, neexistnd posibiliti de acces la alte pagini.
2. Adresare la pagin curent
Pentru a nltura neajunsurile semnalate la metoda anterioar n vederea posibilitii de adresare a tuturor paginilor se utilizeaz un mecanism combinat care mbin o component din instruciune i anume adresa logic cu o component dintr-un registru al CPU i anume din PC. Se presupune c adresa este format din n bii pentru o adresa un volum de 2 n locaii. Atunci memoria este organizata n pagini de 2 k locaii, existnd 2 n-k pagini. Partea mai puin semnificativ a adresei format din k bii permite adresarea la o locaie din cadrul unei pagini, iar partea mai semnificativ care conine n-k bii asigur determinarea paginii. Atunci n-k bii se preiau din cei mai semnificativi n-k bii ai PC. Combinarea celor 2 elemente se face prin concatenare. Adresa astfel constituit se depune n registrul MAR, care este de n bii asigurndu-se citirea locaiei dorite (o anumit pagin, o anumit locaie).
Adresare direct la pagin zero
10
Din modul de formare al adresei pentru dat rezult c datele cerute de o anumita instruciune trebuie s fie n vecintatea instruciunii. Aceasta vecintate se materializeaz n conservarea aceleiai pagini. Deci, la scrierea programului n cazul folosirii acestei tehnici de adresare, programatorul va plasa datele n aceeai pagin a memoriei, cci adresa de pagin se preia din numrtorul de program. Cnd se executa instruciunea curenta PC are o anumita valoare din care cei mai semnificativi (n-k) bii sunt preluai i pentru formarea adresei pentru pagina n care se afla operandul.
Pot rezulta situaii critice la frontiera ntre pagini. Se tie c dup fetch instruciune se d comanda de incrementare a PC. Dac ntmpltor instruciunea curent s-a aflat la adresa 01FF (k=2, n - k = 2), atunci dup incrementare 01FF + 1 = 0200 i deci adresa de pagin nu mai este 01, ci 02.
3. Adresare paginat relativ
Noiunea de pagin curent expus anterior este nlocuit n acest caz cu noiunea de pagin relativ. Pagina relativ este dinamic n spaiul memoriei. Se numete relativ pentru c este centrat n jurul valorii curente a PC. Rezult c n aceasta tehnic de adresare intervine PC-ul cu toate rangurile sale. n instruciune apare o componenta a adresei (adresa logic) care se numete deplasament.
Deplasamentul reprezint cu ct se face deplasarea n raport cu valoarea curent a PC-ului. Deplasamentul poate fi un numr binar pozitiv sau un numr binar cu semn. Adresa efectiv se determin prin nsumarea coninutului PC-ului cu deplasamentul, iar rezultatul se nscrie n MAR. Dac deplasamentul este pozitiv atunci pagina relativ are ca baz adresa din PC, iar vrful la valoarea PC + D max , unde D max valoarea maxima a deplasamentului. Dac deplasamentul este numr binar cu semn atunci pagina relativ este centrat n jurul locaiei cu adresa data de PC.
Adresare la pagin curent (J+1)*2 k -1
11
PC-ul are n ranguri, iar deplasamentul coninut de instruciune are k ranguri (k<n); suma se face pe n ranguri.
Exemplu: Se consider o instruciune care s-a adus n RI (registru de instruciune) care are un OPCODE, un identificator, i un deplasament = 2A, adresa este scris n cifre hexa, PC = 1A00. Se face suma ntre PC i deplasament rezultnd adresa efectiva.
VI. Adresarea bazat
Este asemntoare ca mecanism, cu adresarea paginat relativ numai c n locul PC-ului, s-a folosit coninutul unui alt registru sau al mai multor registre numite registre de baz, care fac parte din grupul registrelor generale din procesor.
Tipuri de pagini
Adresare la pagin relativ
12
n acest fel se elimin dependena ntre poziia datei i a programului. Registrul de baz are o lungime egal cu cea a registrului MAR, iar n instruciune la cmpul de adres apare deplasamentul care poate fi un numr binar pozitiv sau un numr binar cu semn. Lungimea deplasamentului este mai mic dect cea a registrului MAR. Valoarea deplasamentului precizeaz lrgimea ferestrei, deci cu ct numrul de ranguri din cmpul de adres este mai mare, cu att se definete o fereastr mai larg sau o pagin mai mare.
Calculul adresei efective se face prin nsumarea coninutului registrului de baz cu cel al deplasamentului. Cum de regul exist mai multe registre de baz, n instruciune va trebui s apar un cmp special desemnator al registrului de baz desemnat cmpul B.
Dac de exemplu exist 8 registre de baz numerotate 0 ... 7, atunci cmpul B va avea limea 3. La unele arhitecturi de calculatoare se adopt convenia c dac cmpul B = 0 atunci adresa efectiva va fi dat numai de deplasament.
Adresare bazat
13 ncrcarea unor valori iniiale n registrul de baza ca i modificarea acestora pe parcursul execuiei programului se face prin mijloace software.
Definiie: Aceast tehnic de adresare se numete adresare prin baz i deplasament.
Coninutul registrului de baza desemnat conine fie centrul paginii n care se afl data, fie nceputul paginii n care se afl data.
Cum se pot utiliza mai multe registre de baz rezult c se definesc simultan mai multe pagini curente pentru date. La definirea acestor pagini se vor evita suprapunerile de adres.
VII. Adresarea indexat
Adresarea indexat este o variant de adresare bazat. La aceasta, registrele de baz sunt nlocuite de registrele de indexare. Aceste registre fac parte din grupul registrelor generale a unui procesor. Mecanismul de calcul al adresei efective este asemntor cu cel de la adresarea bazat: se face suma ntre coninutul registrelor de indexare i adresa logic din instruciune.
Definiie. Coninutul registrului de indexare se numete index.
Particularitatea registrelor de indexare const n posibilitatea de a efectua o serie de operaii directe asupra acestora ca de exemplu: incrementare, decrementare, ncrcare paralela, adunare, scdere.
Registrele de indexare sunt frecvent folosite n programare n special pentru definirea ciclurilor. Se pot defini simultan mai muli indexi, permitandu-se astfel declararea mai multor cicluri deci, ciclurile ncuibate.
In cmpul X se introduce adresa registrului de indexare. Daca sunt s ranguri atunci pot sa existe 2 s
registre de indexare. In cmpul ID (identificare) apar combinaii care identific o anumit tehnic de adresare.
14
Exemplu de utilizarea adresrii indexate: Se cere transferul unui bloc de date cu K componente din zona adreselor M 1 ... M k n zona R 1 ...R k . In mod normal ar trebui scrise k instruciuni de transfer de tipul MOV. Programarea se poate simplifica daca se folosete adresarea indexata.
In instruciune n cmpul de adresa apar constantele R 1 i M 1 , iar asupra registrului de indexare se pot efectua operaii de incrementare. In registrul de indexare R x se introduce mrimea K. Asupra lui R x se pot efectua decrementri. Atunci cnd valoarea indexului devine zero procesul transferrii blocului de date s-a ncheiat i deci se oprete execuia transferului.
Adresare indexat
15 VIII. Adresarea indirect
Adresarea indirect este o tehnic de adresare modern care permite scurtarea lungimii programelor i introduce o flexibilitate n scrierea programelor complexe.
La adresarea indirecta adresa logic din instruciune nu reprezint adresa efectiva a operandului ci a unui noi instruciuni. Deci, se va citi locaia din memorie de la adresa specificata n instruciune, iar data citit va fi interpretat ca o noua instruciune.
n cazul microcalculatoarelor adresrile indirecte se aplic frecvent sub forma adresrii implicite prin intermediul unor registre generale din CPU. Astfel la microprocesorul INTEL I8080 perechea registrului HL, fiecare de 8 bii, este folosit ca adres logic pentru accesarea memoriei operative de unde se extrage operandul. Fie de exemplu instruciunea ADD M (care presupune adunarea dintre ACC i coninutul locaiei de memorie a crei adresa este specificat implicit prin coninutul perechii de registre HL.
ACC (ACC) + Mem ((H)(L))
IX. Adresare pentru un bloc de date
S-a artat c un calculator opereaz i cu cmpuri de lungime variabil (blocuri de date). Pentru adresarea acestora se pot folosi variantele: 1. Se d adresa de nceput i adresa de sfrit de bloc; 2. Se d adresa de nceput i lungimea cmpului; 3. Se da adresa de nceput i se folosete un delimitator de bloc adic o combinaie particulara de bii care este folosit doar pentru identificarea sfritului blocului. Aceast metod nu se recomand pentru c se folosete o parte din memoria pentru memorarea delimitatorului.
Adresare indirect
16 X. Tehnici de adresare combinate
Majoritatea calculatoarelor i microcalculatoarelor folosesc diverse combinaii ale tehnicilor de adresare prezentate anterior pentru a valorifica avantajele fiecruia.
1. Adresare indirect multinivel. Adresarea indirect este efectuat n mai multe cicluri de fiecare data informaia extrasa din memorie nu este un operand ci o nou instruciune; excepie face ultima citire. De regula exist o limit de nivele pentru adresare indirect. De exemplu la funcia FELIX C numrul ciclurilor permise de adresare indirecta = 5. 2. Adresare indirect i indexat. Conform denumirii aceast tehnic de adresare mbin cele dou tehnici de adresare deja explicate. Dar, la aceasta tehnic combinat se pune problema momentului n care se face indexarea. Distingem 2 cazuri: cu post-indexare i cu pre-indexare. In primul caz mai nti se rezolv sistemul de adresare indirecta (care poate fi i multinivel) i n final se aduna valoarea indexului (din registrul de indexare specificat n instruciune) rezultnd adresa efectiv a operandului. In cazul 2 mai nti se aplic mecanismul folosit la adresarea indexat adic se adun adresa logic cu coninutul registrului de indexare rezultnd adresa unde se afl pointerul. Se extrage pointerul, se face o noua adresare, se extrage operandul. 3. Adresare bazata cu indexare. Mecanismul de calcul al adresei efective este urmtorul: