Professional Documents
Culture Documents
Vježbe 7 (Novo)
Vježbe 7 (Novo)
1. Data je procedura u programskom jeziku C koja broji koliko ima članova niza cijelih
brojeva A koji su veći ili jednaki 10 i manji od 24. Dužina niza A je N.
I. Alokacija registara
Pošto se argumenti prosljeđuju preko registara $4, $5, $6 i $7, a funkcija ima dva ulazna
argumenta, njima su pridruženi registri $4 i $5, tj. A↔$4 i N↔$5. Promjenljivima i i br su
dodijeljeni registri $15 i $16, respektivno.
U proceduri mijenjamo sadržaj registara $15, $16, $8, $9 i $10 pa se prije bilo kakve promjene
njihov sadržaj mora smjestiti na stek radi čuvanja njihovih originalnih vrijednosti. Registar $29
sadrži pokazivač na posljednju zauzetu lokaciju steka, pa se on mora umanjiti za 4*5=20 B, kako
bi se napravilo prostora za ovih 5 registara:
addi $29, $29, -20 # Stek raste od viših adresa ka nižim i otuda –
Obzirom da procedura brojanje ne poziva nijednu drugu proceduru, nema potrebe da se $31
smješta na stek.
Nakon završetka procedure vraćamo sa steka stare vrijednosti registara $15, $16, $8, $9 i $10 i
usklađujemo pokazivač na stek:
Posljednji korak je vraćanje u proceduru koja je pozvala našu proceduru, i to na instrukciju prvu
poslije poziva naše procedure:
2. Data je procedura u programskom jeziku C koja za ulazne argumente ima string S i dva
karaktera, c1 i c2, i koja svaku pojavu tih karaktera u stringu S zamjenjuje karakterom ‘+’.
I. Alokacija registara
addi $8,$0,1
addi $9,$0,0
Loop: slti $10,$8,4
beq $10,$0,Exit
add $9,$9,$8
addi $8,$8,1
j loop
Exit: add $9,$9,$9
Vježbe VII Arhitektura računara
Što izvršava ovaj dio koda, tj. kako izgleda kod u programskom jeziku C koji obavlja ekvivalentnu
radnju datom MIPS kodu? Odrediti sadržaj registara $8 i $9 nakon njegovog izvršenja.
Rješenje:
Radi jednostavnijeg razumijevanja, prije pisanja koda u programskom jeziku C, napisaćemo
značenje pojedinačnih instrukcija.
addi $8,$0,1 # $8=a=1
addi $9,$0,0 # $9=b=0
Loop: slti $10,$8,4 # $10=1, ako je a<4
# $10=0, ako je a≥4
beq $10,$0,Exit # Ako je a≥4, izlaz
add $9,$9,$8 # Ako je a<4, b=b+a
addi $8,$8,1 # a=a+1
j loop # bezuslovni skok na Loop
Exit: add $9,$9,$9 # b=b+b
Na osnovu značenja instrukcija, možemo zaključiti da imaju dvije promjenljive, pa smo ih označili
sa a i b. Ukoliko je a<4, izvršavaju se instrukcije b=b+a i a=a+1, a onda se bezuslovnim skokom
ide opet na petlju koja je označena sa Loop. Ovakva forma može odgovarati while ili for petlji. U
nastavku će biti prikazan kod sa while petljom.
int a=1;
int b=0;
while (a<4)
{
b=b+a;
a=a+1;
}
b=b+b;
Ostalo je da se odredi sadržaj registara $8 i $9 nakon izvršenja koda. To se radi prolaskom kroz
kod i uvrštanjem datih vrijednosti.
a=1
b=0
a<4 (1<4) da
b=0+1=1
a=2
a<4 (2<4) da
b=1+2=3
a=3
a<4 (3<4) da
b=3+3=6
a=4
Vježbe VII Arhitektura računara
a<4 (4<4) ne
b=6+6=12