Professional Documents
Culture Documents
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Calculatorul este format din unitatea centrala, memorie si periferice; ele
comunica intre ele prin magistrale (de adrese, date, semnale).
Calculatorul pe care il avem in vedere are urmatoarele caracteristici:
Unitatea centrala (procesorul) are un numar de registri; fiecare registru
este desemnat in programul sursa (MIPS) prin $numar sau $nume, iar intern
(in programul scris in limbaj masina) printr-un numar intreg (anume numarul
care apare in scrierea $numar).
Prezentam cativa registri si rolul lor:
Nume Numar Rol
----- ----- --------------------
$zero $0 are mereu valoarea 0
$at $1 rezervat pentru asamblor
$v0, $v1 $2,$3 val. prod. de o expr.sau ret. de o fct.
$a0 - $a3 $4 - $7 parametri actuali
$t0 - $t7,$t8,$t9 $8 - $15,$24,$25 val.temporare (nerestaurate de apeluri)
$s0 - $s7 $16 - $23 val.temporare (restaurate de apeluri)
Subliniem ca toti reg. de mai sus in afara de $zero pot fi modificati de
utilizator, dar se recomanda ca ei sa fie folositi doar in scopurile
mentionate - astfel asiguram compatibilitatea cu programe scrise de altii
si evitam efecte imprevizibile. De ex. $at este folosit de compilator in
instructiunile prin care se expandeaza pseudoinstructiunile; astfel,
manevrarea explicita a lui de catre utilizator poate produce efecte
imprevizibile.
In programele obisnuite vom folosi cu precadere $t0 - $t9.
Memoria are 2^32 octeti, avand adrese numere succesive pe 32 biti:
0x00000000, 0x00000001, ..., 0xffffffff.
Ea se poate accesa la nivel de byte (1 octet), word (4 octeti), etc.
Datele word se pot aloca/citi/scrie doar la adrese multiplu de 4 (tentativele
de a face altfel genereaza erori).
Programele se scriu in limbajul de asmablare MIPS, iar la compilare
sunt traduse in limbaj masina. Programul MIPS contine instructiuni si
pseudoinstructiuni. La compilare o instr. MIPS este translatata intr-o
instr. masina, in timp ce o pseudoinstr. MIPS este translatata in 1 - 3
instr. masina. Instructiunile masina ocupa fiecare cate 1 word.
Memoria este impartita in zone (segmente) cu destinatii specifice - stocarea
datelor statice, stiva, stocarea programului (in cod masina) executat, etc.
-----
PCSpim este o masina virtuala.
Interfata ei contine urmatoarele panouri:
- Registers:
afisaza continutul curent al registrilor;
se reactuaizeaza de fiecare data cand programul se opreste din executie
(de exemplu intre pasi, la rularea pas cu pas);
- Text segment:
afisaza zona de memorie ce contine instructiunile (in cod masina ale)
programului si ale sistemului (kernel - un nucleu de sistem de operare,
care se incarca automat);
fiecare instructiune ocupa 1 word si se afisaza pe cate o linie, de ex.:
[0x00400000] 0x8fa40000 lw $4, 0($29) ; 175: lw $a0 0($sp) # argc
(a) (b) (c) (d)
(a) - este adresa din memorie a instructiunii;
cum o instructiune are 1 word, adresele vor fi din 4 in 4;
(b) - este codificarea hexa interna (1 word) a instructiunii;
(c) - este descrierea mnenomica (in limbajul MIPS) a instructiunii;
(d) - ce e dupa ";" este linia sursa (MIPS) care a generat instructiunea;
linia este precedata de numarul ei din fisierul sursa si ":";
o linie sursa poate contine o instructiune sau o pseudoinstructiune MIPS;
o instr. MIPS se translateaza la compilare intr-o singura instr. masina;
ei ii va corespunde o linie in fereastra "Text segment", care in (c) va
contine un text MIPS identic sau echivalent cu linia din fisier;
o pseudoinstr. MIPS se translateaza la compilare prin una sau mai multe
instr. MIPS, care se translateaza fiecare in cate o instr. masina; in
acest caz liniei sursa respective ii vor corespunde mai multe linii in
fereastra "Text segment"; aceste linii vor avea in (c) mnemonicul MIPS al
instr. generate (deci alt text ca linia din fisierul sursa); de asemenea,
doar prima dintre linii va avea ceva dupa ";" (anume linia din fisierul
sursa), urmatoarele nu vor avea nimic;
- Data segment:
afisaza zona de momorie ce contine datele statice ale programului, stiva
(programul si sistemul folosesc aceeasi stiva) si datele sistemului;
- Messages:
afisaza mesajele PCSpim (de ex. mesajele de eroare);
- Console:
este continuta intr-o fereastra separata si simuleaza ecranul (text al)
masinii virtuale; interactiune programului rulat cu utilizatorul (intrari
si iesiri) se fac in aceast afereastra.
Programele sunt continute in fisiere text cu extensia".s".
Ele sunt editate separat (de ex. cu "notepad").
Se incarca cu: File -> Open
Programele se pot rula:
- continuu: instructiunile se executa una dupa alta automat;
- pas cu pas: dupa executarea fiecarei instructiuni se asteapta o comanda
(de obicei tasta) de continuare; intre timp se poate urmari/modifica (in
panouri si casete de dialog) continutul memoriei si al registrilor;
Diverse comenzi care se pot da:
F5 - lansarea executiei continue; se cere adresa instructiunii de la care sa
inceapa rularea; valoarea care apare implicit este ok pentru
majoritatea cazurilor asa ca se poate da ENTER;
Ctr-C - inreruperea rularii continue si comutarea in rularea pas cu pas
(utila de ex. daca se intra intr-un ciclu infinit);
F10 - se executa un pas - o instructiune (instructiunea curenta);
F11 - se executa mai multi pasi - un grup de instructiuni incepand de la cea
curenta (se cere numarul de instructiuni);
Ctrl+B - adaugare/eliminare breackpoint-uri (se cer adresele instructiunilor
unde se pun breackpoint-uri); cand executia un mod continuu ajunge la
un breackpoint, ea se intrerupe si comuta in modul pas cu pas;
Simulator -> Set Value - modificarea continutului memoriei sau registrilor
in timpul executiei pas cu pas (se cere numarul registrului sau
adresa de memorie si noua valoare);
-----
Structura unui program simplu (fisier ".s"):
.data
# declaratii date
.text
# cod
main: # eticheta marcand punctul de start
# cod
li $v0,10
syscall
# o linie goala
Exercitii:
----------
1. Program care calculeaza maximul a trei numere.
2. Program care ordoneaza trei numere x, y, z simuland metoda sortarii prin
selectie cu doi registri (se compara/interschimba (x,y), (x,z), (y,z)).
Sa se foloseasca cat mai putine instructiuni - de ex. cand incarcam o
valoare intr-un reg. sa folosim cat mai mult acel reg.
3. Program care calculeaza suma elementelor unui vector de numere.
4. Program care cauta un numar x intr-un vector de numere si pune in y
valoarea 1/0 dupa cum x apare/nu apare in vector.
5. Program care sorteaza un vector de numere.
Bibliografie:
~~~~~~~~~~~~~
1."Organizarea si proiectarea calculatoarelor - interfata hardware/software",
John L. Hennessy, David A. Patterson, ed. All, 2002,
cap. 3 si anexa A
DANIEL DRAGULICI
septembrie, 2006
actualizat: 4 noiembrie 2006