Sunteți pe pagina 1din 10

L6a: Studiul maşinii microprogramate Tanenbaum Mic-1

1. Obiectivul lucrării
Scopul lucrării îl reprezintă familiarizarea cu modul de funcţionare maşinii
microprogramate Tanenbaum de tip Mic-1. Se explică structura şi modul de execuţie
al instrucţiunilor, precum şi principiile de funcţionare ale maşinii.

2. Introducere teoretică

Funcţionarea microprocesorului şi a oricărui bloc dintr-un sistem cu


microprocesor necesită date şi semnale de comandă şi control. Succesiunea dorită a
evenimentelor din sistem (care conduce la executarea unei sarcini utile) se produce
prin acţionarea corectă, secvenţială, a semnalelor de control, acestea conducând la
transferul corect de date, prelucrarea acestora şi luarea de decizii. În general, însă, din
cauza multitudinii acestor semnale şi a legăturii lor intime cu structura internă a
fiecărui bloc, nu se lucrează direct cu semnale simple, ci cu grupuri ale lor, care au un
efect mai uşor de sesizat din exterior. Astfel de grupuri de semnale sunt numite
instrucţiuni şi ele sunt caracteristice logicii programate. Rezultă că execuţia unei
instrucţiuni presupune efectuarea într-o anumită ordine a unor paşi elementari, care se
numesc microoperaţii şi microinstrucţiuni. Microprogramarea este o tehnică de
proiectare care are rolul de a implementa logica necesară procesorului pentru execuţia
instrucţiunilor. Aceasta este o formă de logică integrată, menită să substituie circuitele
de control printr-un procedeu de proiectare combinată hardware-software.
Primele microprocesoare executau codul direct la nivel hardware. Execuţia era
destul de rapidă, dar conceptul era lipsit de flexibilitate. Acest fapt se datora
imposibilităţii adăugării de instrucţiuni noi. Practic, s-a constatat că pentru execuţia
oricărei instrucţiuni din setul procesorului se execută o succesiune bine definită de paşi.
Microprogramarea este, aşadar, un concept care formează, de fapt, interfaţa între
limbajul de asamblare şi structurile fizice ale procesorului. Microinstrucţiunile sunt
semnalele de comandă adresate de unitatea de control către unitatea de execuţie a
procesorului. Apariţia nivelului microprogramat presupune asocierea fiecărei
instrucţiuni cu o succesiune de microinstrucţiuni, după cum se poate remarca în
reprezentarea poziției nivelului microprogramat în structura ierahică a nivelurilor unui
calculator din figura 1.

Fig. 1. Structura parţială a nivelurilor unui calculator.


L6a: Studiul mașinii microprogramate Tanenbaum Mic-1 135

Microarhitectura este asociată, la rândul ei, unui microprogram care extrage,


decodifică şi execută instrucţiuni. Programul pentru modelul Mic-1 al micromaşinii
Tanenbaum este simplu: se rulează o buclă continuă în care sunt determinate funcţiile
care vor fi solicitate, se apelează aceste funcţii, iar apoi procesul se repetă.
Microprogramul are ataşat un set de variabile care pot fi accesate de către toate
funcţiile, iar fiecare funcţie poate schimba valorile unor variabile. Instrucţiunile sunt
simple şi intuitive, fiind alcătuite din unul sau mai multe câmpuri. Primul câmp
reprezintă codul operaţiei, cel care identifică instrucţiunea. Multe instrucţiuni prezintă
şi un câmp adiţional, care specifică operandul (de exemplu, unele instrucţiuni au acces
la o variabilă locală, iar în acest câmp este specificat despre ce variabilă este vorba).
În continuare, se vor descrie modelul de execuţie (numit şi ciclu extrage-
decodifică-execută), microarhitectura maşinii Mic-1 şi modul în care aceasta este
comandată prin de microinstrucţiuni, fiecare dintre acestea controlând calea de date pe
parcursul unui ciclu. Ansamblul microinstrucţiunilor formează microprogramul.
În figura 2 se prezintă schema bloc a maşinii microprogramate Tanenbaum de
tip Mic-1.

Fig. 2. Schema bloc completă a microarhitecturii maşinii microprogramate Mic-1.


Schema bloc conţine două părţi: calea de date, aflată în partea stângă, şi
secţiunea de control, aflată în partea dreaptă. Cel mai important bloc din secţiunea de
control îl reprezintă memoria de microprogram sau memoria de control (în
engleză, Control Store). Aceasta este o memorie care conţine întreg microprogramul
care va fi executat.
Notaţiile folosite în figura 2 sunt următoarele:

MAR – Memory Address Register (registrul de adrese sau RAD)


MDR – Memory Data Register (registrul de date sau RDA)
PC – Program Counter (contorul de program)
MBR – Memory Byte Register (registru de un octet pentru şirul de
microinstrucţiuni)
SP – Stack Pointer (indică adresa ultimului program apelat în stivă)
LV – Local Variable (variabila locală)
CPP – Constant Pool Pointer (indică adresa primului cuvânt din tabelul de
constante)
TOS – Top Of Stack (cuvântul de la adresa cea mai mare din stivă)
OPC – Operand Program Counter (contorul de program pentru operanzi)
ALU – Arithmetic-Logic Unit (unitatea aritmetică şi logică)
H – Registrul H (intrarea din stânga a ALU)
Shifter – Registrul shift (registru de deplasare)
N, Z – biţii de stare N şi Z ai blocului ALU (dacă rezultatul din ALU este
negativ → N = 1; dacă rezultatul din ALU este 0 → Z = 1)
MPC – Micro Program Counter (contorul de microprogram)

Pentru controlul căii de date a maşinii Mic-1 este nevoie de 29 de semnale:


 9 semnale pentru controlul scrierii datelor de pe magistrala C în registre;
 9 semnale pentru scrierea valorilor din registre pe magistrala B, folosite
mai apoi ca intrare pentru ALU;
 8 semnale pentru controlul funcţiilor ALU şi ale registrului shift (Shifter);
 2 semnale pentru a indica citirea/scrierea din/în memorie prin registrele
MAR/MDR;
 1 semnal pentru a indica extragerea din memorie prin PC/MDR.
Valorile binare pe care le pot lua aceste 29 de semnal vor indica operaţiile
efectuate în cadrul unui ciclu de ceas. Un ciclu constă în scrierea valorilor din registre
pe magistrala B, trecerea semnalelor prin blocurile ALU şi Shifter, propagarea lor prin
magistrala C, iar, în final, scrierea rezultatelor în registrul sau registrele adecvate.
Dacă un semnal de citire din memorie este iniţializat, operaţia de memorie va fi
începută de abia la finalul ciclului, după ce MAR a fost încărcat.
Aşadar, valorile din memorie vor fi disponibile în registrele MBR sau MDR
de abia la finalul ciclului următor. Deşi poate fi de dorit să se scrie datele de pe
magistrala C în mai multe registre, nu este niciodată de dorit să se scrie valorile din
mai multe registre pe magistrala B, la acelaşi moment de timp. Există doar 9 registre
care pot fi scrise pe magistrala B (registrul MBR a fost numărat de două ori, pentru
cele două valori pe carele poate lua: unsigned şi signed). De aceea, informaţia pentru
magistrala B se poate coda pe 4 biţi, folosind un decodor binar-zecimal pentru
generarea a 16 semnale (dintre care este nevoie doar de 9).
Formatul microinstrucţiunii pentru maşina microprogramată Mic-1 este
reprezentat în figura 3.
L6a: Studiul mașinii microprogramate Tanenbaum Mic-1 137

Fig. 3. Formatul microinstrucţiunii pentru maşina Mic-1 (câmpuri şi număr de biţi alocat)

În acest moment, calea de date se poate controla cu un număr de 9 + 4 + 8 + 3


= 24 de semnale (24 de biţi). De menţionat că aceşti biţi controlează calea de date
doar pentru un ciclu de ceas. Primele două câmpuri din figura 3, Addr şi JAM,
determină operaţiile care vor fi efectuate în ciclul următor (vor mai apărea 9 + 3 = 12
semnale adăugate la celelalte deja existente).
Formatul unei microinstrucţiuni cuprinde mai multe câmpuri. În continuare, se
va prezenta o scurtă descriere a acestor câmpuri:
 Addr – conţine adresa următoarei microinstrucţiuni posibil de executat;
 JAM – determină modul de selecţie al următoarei microinstrucţiuni (este
echivalent câmpului COND din micromaşina A modificată, cf. manual ASC);
 ALU – funcţiile blocului ALU şi ale registrului Shifter;
 C – selectează în care registre va fi scrisă valoarea de pe magistrala C;
 Mem – funcţii referitoare la lucrul cu memoria;
 B – selectează intrarea pe magistrala B, codată în modul prezentat mai sus.
Registrul care conţine formatul de microinstrucţiune din figura 3 poartă
numele de registru de microinstrucţiune (RMI) sau MIR (Micro-Instruction Register).
O microinstrucţiune este executată în cadrul unui ciclu de ceas care conţine 4
subcicluri de execuţie. Ciclul de ceas în 4 faze este reprezentat în figura 4.

Fig. 4. Diagrama de timp a ciclurilor de ceas în 4 faze.


Cele 4 subcicluri de execuţie sunt:
1. MIR se încarcă cu valoarea de la adresa stocată în MPC;
2. Semnalele din MIR se propagă, iar magistrala B se încarcă cu valoarea din
registrul selectat;
3. Blocurile ALU şi Shifter operează şi produc un rezultat stabil;
4. Datele de la ieşirea blocului Shifter se propagă prin magistrala C în registre;
se încarcă biţii N şi Z şi registrul MPC.
În paralel cu propagarea valorilor pe calea de date, microprogramul trebuie, de
asemenea, să determine care microinstrucţiune se va executa la următorul ciclu de
ceas, deoarece microinstrucţiunile nu sunt executate neapărat în ordinea în care sunt
afişate în memoria de control.
Calculul adresei următoarei microinstrucţiuni începe după ce MIR a fost
încărcat şi devine stabil. Mai întâi, câmpul NEXT_ADDRESS (următoarea adresă) de
9 biţi este copiat în MPC. În timp ce are loc copierea, este inspectat câmpul JAM, care
conţine 3 biţi (JMPC, JAMN şi JAMZ).
Dacă biţii sunt 000, nu mai are loc nici o altă operaţie, iar la copierea biţilor
din câmpul NEXT_ADDRESS, MPC va indica următoarea microinstrucţiune.
Dacă cel puţin unul din cei 3 biţi ai câmpului JAM nu este 0, se vor efectua
alte operaţii. Dacă bitul JAMN este 1, se va aplica funcţia SAU între bitul N şi bitul
JAMN, iar rezultatul se va copia în locul celui mai semnificativ bit al registrului
MPC.
Similar, dacă JAMZ este 1, se va aplica funcţia SAU între bitul Z şi bitul
JAMZ, iar rezultatul se va copia în locul celui mai semnificativ bit al registrului MPC.
Toate acestea sunt reprezentate prin blocul High bit din figura 2. În orice caz, MPC
poate lua doar două valori admise:
 valoarea lui NEXT_ADDRESS;
 valoarea lui NEXT_ADDRESS, cu aplicarea funcţiei SAU între MSB şi 1.
Dacă bitul JMPC al câmpului JAM este 1, în blocul O din figura 2 se execută
funcţia SAU între cei 8 biţi ai registrului MBR şi ultimii 8 biţi din câmpul
NEXT_ADDRESS (cei mai din stânga 8 biţi), iar rezultatul este trimis în MPC.
În cazul micromaşinii A modificate (conform manualului de ASC),
secvenţiatorul de microprogram (sau microsecvenţiatorul) are rolul de a adresa
următoarea microinstrucţiune, iar modul de lucru al acestuia reprezintă echivalentul
operaţiilor descrise mai sus, unde microcomenzile reprezintă acţiunile de comandă
efectuate în cadrul schemei la execuţia unei microinstrucţiuni.
În tabelul 1 este prezentat setul de microinstrucţiuni care pot fi efectuate de
micromaşina Mic-1.
Fiecare microinstrucţiune este formată dintr-un cod al operaţiei, COP (în
engleză, opcode, prescurtare de la operation code), care arată acţiunea efectuată de
microinstrucţiune şi, uneori, un operand (cum ar fi un offset de memorie sau o
constantă).
În prima coloană a tabelului se află codificarea în hexazecimal a
microinstrucţiunii, în cea de-a doua coloană se găseşte mnemonica (abrevierea)
microinstrucţiunii, echivalentă celei din limbajul de asamblare, iar în cea de-a treia
coloană se găseşte o scurtă descriere a efectului microinstrucţiunii.
Operanzii byte, const şi varnum au câte un octet (byte). Operanzii disp, index
şi offset au câte doi octeţi. Atunci când este folosit verbul „a împinge”, el se referă la
faptul că variabila, octetul, constanta etc. vor fi salvate într-o nouă poziţie a stivei,
imediat deasupra stivei actuale, poziţie care va deveni noul vârf al stivei (Top Of
Stack, TOS).
L6a: Studiul mașinii microprogramate Tanenbaum Mic-1 139

Tabelul 1
Setul de microinstrucţiuni al micromaşinii Mic-1
Hexa Mnemonică (COP) Descriere
0×10 BIPUSH byte Împinge un octet (byte) în stivă
0×59 DUP Copiază cuvântul din vârful stivei şi îl împinge în stivă
0×A7 GOTO offset Salt necondiţionat la valoarea offset (ramificare)
0×60 IADD Scoate două cuvinte din stivă; împinge suma acestora
0×7E IAND Scoate două cuvinte din stivă; împinge rezultatul funcţiei ŞI
0×99 IFEQ offset Scoate cuvântul din vârful stivei şi ramifică dacă acesta este 0
0×9B IFLT offset Scoate cuvântul din vârful stivei şi ramifică dacă acesta este negativ
0×9F IF_ICMPEQ offset Scoate două cuvinte din stivă şi ramifică dacă acestea sunt identice
0×84 IINC varnum const Adaugă o constantă unei variabile locale
0×15 ILOAD varnum Împinge o variabilă locală în stivă
0×B6 INVOKEVIRTUAL disp Apelează o metodă
0×80 IOR Scoate două cuvinte din stivă; împinge rezultatul funcţiei SAU
0×AC IRETURN Revenire de la metodă cu o valoare de tip întreg
0×36 ISTORE varnum Scoate un cuvânt din stivă şi îl stochează în variabila locală
0×64 ISUB Scoate două cuvinte din stivă; împinge diferenţa acestora
0×13 LDC_W index Împinge în stivă o constantă din Depozitul de constante
0×00 NOP Nu efectuează nici o acţiune
0×57 POP Şterge cuvântul din vârful stivei
0×5F SWAP Schimbă între ele poziţiile primelor două cuvinte din stivă
0×C4 WIDE Adaugă un prefix; următoarea instrucţiune are un index de 16 biţi

La orice moment de timp, sunt definite următoarele zone (arii) de memorie:


1. Depozitul de constante (Constant Pool) – Această arie nu poate fi scrisă de
program şi conţine constante, şiruri şi pointeri către alte arii de memorie care pot fi
referite. Se încarcă atunci când programul este încărcat în memorie şi nu se schimbă
după aceea. Există un registru implicit, CPP (Constant Pool Pointer), care conţine
adresa primului cuvânt din Depozitul de constante.
2. Cadrul local de variabile (Local Variable Frame) – La fiecare apelare a
unei metode, este alocată o arie pentru stocarea variabilelor pe parcursul apelării.
Această arie se numeşte „cadrul local de variabile” (în engleză, Local Variable
Frame). La începutul cadrului se găsesc parametrii (argumentele) cu care a fost
apelată metoda. Cadrul local de variabile nu conţine stiva de operanzi, care e separată.
Totuşi, din motive de eficienţă, în implementarea curentă, stiva de operanzi se găseşte
imediat deasupra Cadrului local de variabile. Un registru implicit, LV (Local
Variable), conţine adresa primei locaţii din Cadrul local de variabile (adresa de bază a
cadrului). Parametrii primiţi la apelarea metodei sunt stocaţi la începutul cadrului.
3. Stiva de operanzi (Operand Stack) – Aria alocată stivei de operanzi este
spaţiul aflat imediat deasupra Cadrului local de variabile (vezi figura 5). Un registru
implicit, SP (Stack Pointer), conţine adresa primului cuvânt din stivă (vârful stivei).
Spre deosebire de CPP şi LV, registrul SP poate fi incrementat sau decrementat în
cadrul execuţiei unei metode, în care operanzii sunt „împinşi” (scoşi) din stivă; de
exemplu, funcţia POP, care elimină primul cuvânt din stivă, decrementând SP.
4. Aria metodei – Această zonă se mai numeşte „aria de text”. Un registru
implicit, PC (Program Counter), conţine adresa următoarei microinstrucţiuni.
Registrul PC este, de fapt, un pointer. Spre deosebire de celelalte arii de memorie,
această zonă este tratată ca un vector de octeţi, şi nu de cuvinte (4 octeţi sau 32 de biţi).
Trebuie menţionat faptul că registrele CPP, LV şi SP sunt pointeri către
cuvinte, şi nu către octeţi. De exemplu, LV, LV+1, LV+2 fac referire la primele 3
cuvinte ale Cadrului local de variabile. În schimb, LV, LV+4, LV+8 fac referire la
cuvinte aflate la intervale de 4 cuvinte (16 octeţi).
Fig. 5. Reprezentarea diferitelor părţi (arii sau zone) de memorie.

Registrul PC conţine adrese de octeţi, iar incrementarea sau decrementarea sa


schimbă adresa cu un număr de octeţi, nu de cuvinte. PC se adresează diferit faţă de
celelalte registre. Incrementarea registrului PC cu 1 şi iniţierea unei citiri (read) rezultă
în extragerea (fetch) următorului octet (octetul consecutiv). Incrementarea registrului
SP cu 1 şi iniţierea unei citiri (read) rezultă în extragerea (fetch) următorului cuvânt
(cuvântul consecutiv).

3. Descrierea aplicaţiei
Aplicaţia Mic-1 deschide o interfaţă de utilizator, care arată conform
reprezentării din figura 6.
Meniul aplicaţiei conţine două opţiuni (în partea de jos): Selectare Fișier şi
Afişare Stivă. Opţiunea Selectare Fișier prezintă o nouă opţiune, Open, iar un clic pe
această opţiune deschide o fereastră de tip File Explorer. Se selectează unul din
fişierele disponibile, care conţine funcţia dorită pentru încărcarea în program.
Microinstrucţiunile se încarcă în fereastra din dreapta, denumită Control Store.
Opţiunea Afişare Stivă deschide într-o nouă fereastră stiva în componenţa ei
actuală. Stiva nu poate fi alterată de către utilizatori decât prin execuţia
microinstrucţiunilor.
În partea de sus se găsesc două butoane, Sub Cycle şi RESET. Prin păsarea
butonului Sub Cycle, se parcurge, secvenţial, câte un subciclu din cele 4 faze ale
ceasului. Apăsarea butonului RESET realizează reiniţializarea aplicaţiei (registrele
revin la valorile iniţiale), trecându-se la prima linie de microinstrucţiuni.
Legenda culorilor:
1. S1 (roşu) – registrul selectat urmează a fi încărcat pe magistrala B;
2. S2 (roşu) – magistrala B este încărcată cu valoarea registrului selectat;
3. S3 (galben) – blocurile ALU şi Shifter realizează operaţiile solicitate;
4. S4 (verde) – magistrala C şi registrele selectate sunt încărcate cu valoarea de
la ieşirea blocului Shifter.
Colorarea în albastru închis a magistralei B şi a registrului H în cadrul
subciclului S2 semnifică propagarea datelor pe magistrala B. Colorarea în albastru
închis a magistralei C în cadrul subciclului S4 semnifică propagarea datelor prin
magistrala C.
L6a: Studiul mașinii microprogramate Tanenbaum Mic-1 141

Fig. 6. Interfaţa aplicaţiei de operare a micromaşinii Tanenbaum Mic-1.

4. Desfăşurarea lucrării
4.1. Se lansează aplicaţia Mic-1.
4.2. Se încarcă fişierul IADD.txt prin alegerea, în ordine, din meniu, a
opţiunilor Selectare Fișier, Open, selectarea fişierului, şi, din nou, Open.
4.3. Se parcurg mai multe subcicluri (faze ale ceasului), prin apăsarea repetată
(pas cu pas) a butonului Sub Cycle, până la încheierea execuţiei microinstrucţiunii
conţinute în fişierul IADD.txt. Se observă şi se studiază evoluţia schemei bloc, a
ciclului de ceas şi a microcomenzilor efectuate la execuţia secvenţială a fiecărui
subciclu (la fiecare clic), notându-se acţiunile întreprinse de schemă la fiecare pas.
4.4. Se testează funcţionarea butonului RESET, prin apăsarea acestuia. Se
observă saltul la prima linie din Control Store şi resetarea registrelor.
4.5. Se reia pasul 3, se observă şi se notează rezultatele obţinute prin
efectuarea aceloraşi acţiuni. După execuţia fiecărui pas, se apasă butonul Afişare Stivă
din meniu, se studiază şi se notează evoluţia stivei.
4.6. Se apasă din nou butonul RESET. Se parcurg 8 subcicluri (două cicluri
complete de ceas), prin apăsarea repetată a butonului Sub Cycle. Se notează, pentru
fiecare subciclu, valorile registrelor MAR, SP, H, MDR şi TOS.
4.7. Similar pasului 2, se încarcă fişierul POP.txt.
4.8. Se parcurg 8 subcicluri (două cicluri complete de ceas), prin apăsarea
repetată (pas cu pas), a butonului Sub Cycle. Se observă, se studiază şi se notează
acţiunile executate secvenţial în cadrul fiecărui subciclu (fiecărei apăsări de buton). Se
studiază evoluţia stivei după fiecare subciclu. Se notează, pentru fiecare subciclu,
valorile registrelor MAR, SP, MDR şi TOS.
4.9. Similar pasului 2, se încarcă fişierul SWAP.txt.
4.10. Se parcurg 8 subcicluri (două cicluri complete de ceas), prin apăsarea
repetată (pas cu pas) a butonului Sub Cycle. Se observă, se studiază şi se notează
acţiunile executate secvenţial în cadrul fiecărui subciclu (fiecărei apăsări de buton). Se
studiază evoluţia stivei după fiecare subciclu. Se notează, pentru fiecare subciclu,
valorile registrelor MAR, SP, H, MDR şi TOS.
4.11. Se repetă din nou operațiile anterioare pentru o altă microinstrucțiune la
alegere, selectată din fișierul toateinstructiunile.txt.
Observație. La fiecare caz de microinstrucțiune în parte, valorile registrelor se
vor nota complet la primul subciclu, după care este suficient să se noteze doar
diferențele care apar (modificările) în subciclurile următoare.
4.12. Se creează şi se denumeşte corespunzător un fişier de tip text (cu
extensia.txt). Se copiază în acest fişier, la alegere, diferite seturi de instrucţiuni (din
fişierul toateinstructiunile.txt), pentru a executa microinstrucţiuni mai complexe (o
microoperaţie, definită prin acţiunile care au loc în schemă la execuţia unei succesiuni
de microinstrucţiuni). În felul acesta, se poate crea un scurt microprogram la alegere,
ca o succesiune logică de două sau mai multe microinstrucțiuni. Se încarcă fişierul
astfel creat în aplicaţie, se experimentează şi se notează rezultatele obţinute,
comentând acţiunile care se întreprind în schemă.
Atenţie! O microinstrucţiune reprezintă înlănţuirea logică a mai multor
instrucţiuni (de exemplu, microinstrucţiunea IADD este compusă din instrucţiunile
iadd1, iadd2, iadd3). Se copiază în întregime o microinstrucţiune (de exemplu, pentru
IADD, se copiază în întregime cele 3 linii corespunzătoare: iadd1, iadd2 şi iadd3).
Important! A nu se omite copierea completă și a microinstrucţiunilor la care,
eventual, se face referire în cadrul microinstrucţiunii considerate, printr-un salt sau o
referire (de exemplu, Main1, o microinstrucțiune la care se poate reveni automat la
finalul unei microinstrucțiuni selectate).
4.12. Se repetă punctul anterior pentru un nou fişier creat, al cărui set de
instrucţiuni diferă de cel precedent, şi se interpretează rezultatul.

5. Întrebări
1. Care este rezultatul execuţiei microinstrucţiunii IADD?
2. De câte semnale (biţi) este nevoie pentru controlul căii de date a schemei?
3. Care este rolul registrului MPC? Daţi un exemplu de utilizare a acestuia.
4. În ce moment al evoluţiei micromaşinii se încarcă registrul MDR, în cazul
unei operaţii de citire din memorie (read, rd)?
5. Care sunt operaţiile pe care le poate executa blocul Shifter? De ce credeţi
că sunt necesare acestea?
6. Câte intrări şi câte ieşiri are ALU şi care sunt acestea? Ce semnificaţie au
aceste valori şi care este rolul lor în cadrul formatului unei microinstrucţiuni?
7. Care vor fi valorile biţilor N şi Z, dacă ieşirea ALU va avea valoarea –5?
Dar valoarea 2? Dar valoarea 0?
8. Care este rolul câmpurilor Addr şi JAM din structura (formatul) unei
microinstrucţiuni?
L6a: Studiul mașinii microprogramate Tanenbaum Mic-1 143

9. Arătaţi, pe un caz concret, care sunt operaţiile executate dacă JAMN = 1 şi


JAMZ = 0? Dar dacă JAMN = 0 şi JAMZ = 1? Există posibilitatea ca JAMN = 1 şi
JAMZ = 1? Explicaţi.
10. Care este legătura între instrucţiuni (comenzi) şi microinstrucţiuni? Dar
între microinstrucţiuni şi microoperaţii? Exemplificaţi.
11. Se presupune că în câmpul Mem (din cadrul formatului microinstrucţiunii)
apare scrisă succesiunea de biţi 011. Ce semnificaţie are aceasta?
12. Prezentaţi acţiunile executate în cadrul fiecărui subciclu, în cazul
microinstrucţiunii IADD. Descrieţi modificările observate pe parcurs în fereastra
aplicaţiei.
13. Cum se modifică stiva în cazul execuţiei microinstrucţiunii ISUB? Dar în
cazul microinstrucţiunii DUP?
14. În care registru se scrie rezultatul obţinut prin execuţia microinstrucţiunii
IAND?
15. Se încarcă fişierul exempluintrebari.txt. Explicaţi de ce, după execuţia
instrucţiunii iflt3, aplicaţia va da eroare.
16. Cât de intuitivă şi interactivă vi se pare aplicaţia de simulare a
micromaşinii Tanenbaum Mic-1 şi de ce? Propuneţi îmbunătăţiri şi rafinări ale
aplicaţiei.

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