CATEGORII DOCUMENTE |
CAI DE IMPLEMENTARE A LIMBAJELOR DE PROGRAMARE
Realizarea de calculatoare care sa 'stie' limbaje cat mai evoluate si in istorie au existat numeroase astfel de incercari mai mult sau mai putin incununate de succes (ca de exemplu calculatorul Burroughs 7400 programabil direct in ALGOL, microprocesorul iAPX 432 programabil in ADA sau mai nou masinile LISP, MODULA, PROLOG, etc).
Utilizarea chiar a calculatorului care stie numai limbajul masina (il vom numi LM) pentru a permite programatorului sa se exprime intr-un limbaj de nivel inalt (pe care il vom numi LI). Avand in vedere ca si LI este destinat efectuarii unor prelucrari de date inseamna ca fiecare instructiune din acesta poate sa fie exprimata cu ajutorul unei secvente finite de instructiuni din LM. In acest caz procesul de trecere de la o instructiune din LI la instructiuni din LM poate sa fie automatizat, cu alte cuvinte se poate scrie un program care sa realizeze traducerea instructiunilor din LI in instructiuni din LM. Evident acest program va fi scris (cel putin prima data) utilizand instructiuni din LM. Un astfel de program se numeste translator.
Exista doua tipuri de translatoare:
-compilatoare : traduce intreg programul scris in LI in instructiuni LM, obtinand un program scris in LM care va putea fi utilizat ca atare ori de cate ori este nevoie
-interpretoare :realizeaza recunoasterea unei instructiuni din LI, executasecventa de instructiuni LM corespunzatoare si apoi trece la urmatoareainstructiune din LI
Amandoua tipurile de translator permit unui programator in limbajul LI sa ignore faptul ca calculatorul pentru care scrie programul in LI nu 'intelege' direct acest limbaj. Este ca si cum la dispozitia acestui programator se gaseste un alt calculator, un calculator virtual avand o arhitectura diferita de a celui real.
Pentru ca operatia de traducere sa fie simpla este bine ca raportul intre complexitatea instructiunilor disponibile in LI si in LM sa nu fie foarte mare.
Corespunzator, limbajul LI poate sa fie inca prea simplu pentru descrierea unor aplicatii semnificative. In acest caz se poate considera un nou limbaj LI' avind instructiunile mai aproape de situatia ideala si se poate utiliza limbajul LI pentru a construi calculatorul virtual care 'stie' limbajul LI', asa cum rezulta din figura urmatoare.
1. CONCEPTE DE BAZA
Un sistem de prelucrare numerica a datelor este format dintr-o colectie de module (unitati functionale) interconectate intre ele. Caracteristicile constructive ale acestor unitati, modul de interconectare a acestora, caile de comunicatie a datelor formeaza structura sistemului de prelucrare numerica a datelor.
Fiecare modul la randul lui poate sa fie privit ca fiind format dintr-o Unitate de Comanda mai mult sau mai putin complexa si resursele care asigura suportul prelucrarilor controlate de unitatea de comanda, reunite sub numele de Unitate de Executie. Resursele accesibile programatorului si modalitatile de control a acestora prin interpretari concrete la nivelul setului de instructiuni formeaza arhitectura sistemului de prelucrare numerica a datelor.
Un repertoriu de instructiuni este specificat prin :
- formatul instructiunilor:se specifica numarul de cuvinte de memorie utilizat pentru memorarea fiecarui tip de instructiune si semnificatia campurilor care formeaza instructiunea. In general o instructiune este compusa din doua componente :
- codul operatiei indica operatia efectuata de catre instructiune;
- campul de adrese (prezenta acestui camp depinde de tipul operatiei) specifica modul de obtinere a operanzilor si eventual de memorare a rezultatului operatiei.
- semantica instructiunilor
FACTORI NECESARI IN PROIECTAREA UNUI
SET DE INSTRUCTIUNI
valegerea lungimii instructiunii influenteaza performantele UCP. Daca viteza de transfer a memoriei este de t cuvinte pe secunda si numarul mediu de cuvinte utilizate pentru o instructiune este r, atunci memoria poate sa asigure un flux de maximum t/r instructiuni pe secunda. Se observa deci ca cu cat instructiunile sunt mai scurte cu atat numarul de instructiuni executate in unitatea de timp poate sa fie mai mare deoarece faza de aducere a unei instructiuni dureaza de regula mai mult decat timpul de executie al unei instructiuni
valegerea lungimii campului cod operatie din instructiuni determina numarul de instructiuni diferite ce pot fi codificate in cadrul acestui camp;
vlungimea cuvintelor de memorie si deci a instructiunilor este de obicei un multiplu al numarului de biti necesari pentru reprezentarea caracterelor pentru a permite utilizarea eficienta a memoriei pentru memorarea sirurilor de caractere;
valegerea lungimii campului utilizat pentru specificarea adresei unui operand determina capacitatea memoriei ce poate fi adresata. Evident unitatea de adresare a memoriei (cuvantul) poate avea la randul ei diferite lungimi. Daca de exemplu unitatea de adresare a memoriei este un cuvant de 32 de biti atunci capacitatea memoriei adresabile va fi de patru ori mai mare decat in cazul in care unitatea de adresare a memoriei este un cuvant de 8 biti, pentru aceasi lungime a adresei
Sa consideram un format de instructiune compusa din codul operatiei si o adresa. Sa presupunem ca primul cimp ocupa k biti iar al doilea n biti. Rezulta deci ca este posibila codificarea a 2k operatii diferite iar spatiul de memorie adresabil este de 2n adrese diferite. Daca acelasi numar n + k de biti se imparte in k-1 pentru campul codului si n+1 pentru adresa se pot codifica de doua ori mai putine instructiuni dar in schimb se va putea adresa o memorie cu o capacitate dubla. Se observa deci ca in alegerea dimensiunii campurilor trebuie acceptat un compromis intre posibilitatea de a codifica cat mai multe tipuri de instructiuni si posibilitatea de a adresa un spatiu de memorie cat mai mare.
Sa consideram o UCP avand instructiuni de 16 biti pentru care adresele se pot specifica pe 4 biti. O solutie de proiectare consta din realizarea unor instructiuni avand codul operatiei de 4 biti si trei campuri de adresa pentru doi operanzi si un rezultat. In acest caz rezulta ca sunt posibile numai 16 tipuri de instructiuni. O solutie care permite codificarea unui numar mai mare de instructiuni consta din utilizarea mai multor formate de instructiuni cu aceasi lungime, asa cum se vede in tabelul urmator.
2. MODURI DE ADRESARE
Instructiunile pot sa fie clasificate in functie de numarul de adrese pe care il specifica. Numarul de adrese dintr-o instructiune depinde de semantica instructiunii. Astfel pentru o instructiune care realizeaza de exemplu operatia de adunare se pot specifica :
Øadresele operanzilor si a rezultatului, rezultand o instructiune cu trei adrese;
Øadresele a doi operanzi daca rezultatul inlocuieste unul dintre operanzi, rezultand o instructiune cu doua adrese;
Øadresa unui operand daca celalalt operand si rezultatul sunt memorate in mod implicit intr-un registru de tip acumulator, rezultand o instructiune cu o adresa;
Ønici o adresa daca adunarea se face intre doi operanzi situati in varful stivei, rezultatul fiind plasat in varful stivei, rezultand astfel o instructiune cu zero adrese.
Considerand ca registrele reprezinta si ele un spatiu adresabil se poate considera ca o instructiune care aduna continutul a doua registre memorand rezultatul in unul dintre acestea este o instructiune cu doua adrese ca si instructiunile care realizeaza aceleasi operatii asupra unor locatii de memorie.
Pentru instructiunile de salt adresa la care se face saltul reprezinta operandul instructiunii. Rezulta corespunzator ca o instructiune de salt este o instructiune cu o adresa.
Ceea ce se memoreaza intr-o instructiune pentru un operand sau pentru un rezultat este de fapt informatia necesara pentru determinarea valorii operandului, respectiv adresa rezultatului. Mecanismul prin care pornind de la informatia continuta in instructiune se ajunge la valoarea operandului respectiv la adresa rezultatului poarta numele de mod de adresare. Numarul mare de moduri de adresare disponibile in calculatoarele moderne a rezultat din necesitatea de a asigura o implementare cat mai simpla si eficienta a unor structuri de date complexe.
In cele ce urmeaza utilizam urmatoarele notatii:
r - registru accesibil programatorilor;
(r) - continutul registrului r;
M[x] - continutul locatiei de memorie aflata la adresa x;
d - valoarea unui deplasament continut in instructiune;
MODURI DE ADRESARE
Adresare la registre
In acest caz operandul este continut intr-un registru specificat in instructiune. Obtinerea valorii operandului nu necesita accese la memorie.
2. Adresare prin registre
Pentru acest mod de adresare instructiunea contine specificarea unui registru r al carui continut reprezinta adresa operandului. Rezulta deci ca valoarea operandului este M[(r)]
3. Adresare prin registre cu incrementare sau decrementare
Valoarea cu care se face incrementarea sau decrementarea este egala cu lungimea ocupata in memorie de operand. Deci valoarea operandului este M[(r) + N] sau M[(r) - N] iar continutul registrului r devine (r) + N sau (r) - N unde N este lungimea operandului.
In cazul in care acest tip de adresare se utilizeaza in legatura cu registrul CP se obtine modul de adresare imediat pentru care valoarea operandului este continuta in instructiune. Evident actualizarea registrului utilizat (CP) se face dupa obtinerea valorii operandului.
In cazul in care registrul utilizat este registrul SP acest mod de adresare realizeaza implementarea unei memorii de tip stiva pentru care accesul este permis prin intermediul registrului SP numai la ultima informatie memorata. Pentru adresarea in stiva exista de obicei doua tipuri de adresare: adresare pentru memorare (PUSH). pentru care actualizarea continutului registrului SP se face inainte de accesul la memorie si adresare pentru extragere din stiva (POP) pentru care actualizarea continutului registrului SP se face dupa accesul la memorie.
4. Adresare prin registre indirecta cu incrementare sau decrementare
Acest mod de adresare se obtine adaugind un nivel de indirectare la modul de adresare anterior. In cazul in care operatia de actualizare a continutului registrului r implicat in acest mod de adresare se face inainte de obtinerea operandului atunci valoarea operandului este M [ M [ (r) + N] ] sau M [ M [ (r) - N] ] iar continutul registrului r devine (r) + N sau (r) - N unde N este lungimea operandului. In cazul in care operatia de actualizare a continutului registrului r implicat in acest mod de adresare se face dupa obtinerea operandului atunci valoarea operandului este M [ M [ (r) ] ] cu acelasi tip de actualizare al continutului registrului r. In cazul in care registrul utilizat este CP si incrementarea se face dupa obtinerea operandului se obtine modul de adresare directa. Pentru acest tip de adresare, adresa operandului este continuta in instructiune. Daca se mai adauga un nivel de indirectare, adica adresa continuta in instructiune este adresa la care se gaseste in memorie adresa operandului atunci se obtine modul de adresare indirecta.
5. Adresare bazata
Se numeste registru de baza un registru al carui continut este utilizat pentru un calcul de adresa. Daca r este un registru de baza atunci valoarea operandului este M[(r)+d]. Se observa ca adresarea prin registru este o adresare bazata pentru care valoarea deplasamentului este zero. Deoarece valoarea deplasamentului este continuta in instructiune, obtinerea sa poate presupune o citire din memorie. In general adresarea bazata este utilizata pentru extinderea spatiului adresabil. Sa consideram de exemplu un format de instructiune pentru care se utilizeaza k biti pentru un camp de adresa. In acest caz spatiul adresabil are capacitatea de 2k. Daca se utilizeaza insa un registru de baza format din m biti, se observa ca spatiul de 2k biti poate sa fie dispus oriunde intr-un spatiu de memorie cu capacitatea de 2m + 2k. De regula m > k. De exemplu daca k = 10 si m = 16 se obtine accesul la zone de memorie de 1K in cadrul unei memorii cu o capacitate de 64K.
In situatia in care numarul de biti afectati pentru d este suficient pentru a permite accesul la intreaga memorie se obtine modul de adresare indexata in acest caz registrul r se numeste registru index. Modurile de adresare bazata sau indexata pot sa fie utilizate pentru implementarea accesului la un vector de date aflate in memorie la adrese succesive. Actualizarea registrului de baza (index) necesara pentru trecerea de la un element al vectorului la altul presupune adunarea (scaderea) la continutul curent al registrului a lungimii unui element al vectorului. Se observa ca din cele doua componente care participa la calculul adresei operandului una este fixa si anume valoarea d continuta in instructiune. Evident aceasta valoare poate sa fie interpretata ca adresa de inceput a vectorului sau ca indice in vector.
Daca registrul CP este utilizat ca registru de baza se obtine modul de adresare autorelativa. Acest tip de adresare se utilizeaza in general numai pentru instructiunile de salt. Ceea ce se specifica in instructiune este distanta intre adresa instructiunii curente si a operandului referit de catre instructiune. In acest ultim caz deplasarea trebuie sa fie un numar intreg cu semn pentru a permite referiri inainte si inapoi.
6. Adresare bazata si indexata
In cazul acestui tip de adresare se utilizeaza pentru calculul adresei continutul a doua registre r1 si r2. Valoarea operandului este in acest caz M [ (r1) + (r2) ]. Acest tip de adresare este util pentru implementarea accesului la elementele unui vector; pentru care r1 contine adresa de inceput a vectorului iar r2 contine valoarea indexului in acest vector pentru elementul referit, inmultita cu lungimea unui element. Se observa ca in acest caz cei doi termeni care participa la calculul adresei pot sa fie modificati, cu alte cuvinte atat adresa de inceput cat si indicele elementului referit pot sa varieze spre deosebire de cazul adresarii indexate.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1349
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved