Professional Documents
Culture Documents
Procedure
Procedure
procedura
Procedura
Procedure
jal
jr $31
jr
Primjer
Procedura A poziva proceduru B, a
procedura B poziva proceduru C.
Procedura C ne poziva vise ni jednu
proceduru. Prikazati MIPS
asemblerski kod za implementaciju
protokola poziva procedura
Analiza primjera
4 kljuna trenutka
1.
2.
3.
4.
Analiza primjera
A: ...............
jal B
...............
B: ...............
addi $29,$29,-4 #uveavamo stek za jednu lokaciju
sw $31, 0($29) # na vrhu steka pamtimo vrijednost registra $31 kako bi umjeli da se
vratimo na proceduru A jer posle skoka na C vrijednost registra $31 ce cuvati povratak na
B
jal C
lw $31,0($29) # kad smo zavrsili sa procedurom C u registar $31 vracamo adresu
povratka na proceduru A
addi $29,$29,4 # vracamo vrijednost pokazivaca vrha steka
................
jr $31
C:................
................
jr $31
$4
$5
$6
$7
prvi parametar
drugi parametar
treci parametar
etvrti parematar
Zadatak
Data je procedura u programskom jeziku C koja
inicijalizuje lanove niza cijelih brojeva A, duine N,
na 0. Napisati odgovarajui MIPS kod.
Clear(int A[], int N)
{
int i;
for(i=0; i<N; i++)
A[i]=0;
}
Analiza zadatka
Prilikom prevoenja koda iz programskog jezika C
u MIPS kod pridravamo se sljedea tri generalna
koraka:
1. Alokacija registara za programske
promjenljive
Poto se ulazni argumenti procedura prosljeuju preko registara $4,
$5, $6 i $7, a naa funkcija ima dva ulazna argumenta, onda su tim
promjenljivima dodijeljeni registri $4 i $5, tj. A$4 i N$5. U okviru
same procedure jedina deklarisana promenljiva je i, pa njoj
moemo dodijeliti registar $15.
adresa ka
RJESENJE ZADATKA
Zadatak
Data je procedura u programskom jeziku C koja broji koliko ima lanova
niza cijelih brojeva A koji su vei od ili jednaki 10 i manji od 24. Duina
niza A je N. Napisati MIPS kod.
int brojanje(int A[], int N)
{
int i, br=0;
for(i=0;i<N;i++)
{
if(A[i]>=10 && A[i]<24)
br++;
}
return br;
}
Zadatak
Napisati roceduru int bcopy(string a,
string b) u MIPS asemblerskom
jeziku. Program uzim dva argumenta,
pokaziva na string A koji se
zavrava nulom (preneena adresa u
registru $4) i pokaziva na odredini
string (registar $5)
Program kopira karaktere i vraa broj
prenijetih karaktera u registaru $2
Rjesenje
Bcopy: add $2,$0$0
lb $6, 0($4)
beq $6,$0, exit
loop: sb $6, 0($5)
addi $2,$2,1
addi $4,$4,1
addi $5,$5,1
lb $6, 0($4)
bne $6,$0,loop
Exit:sb $0,0($5) # na kraju smjesti 0 u niz b svaki niz karaktera se zavrsava 0
jr $31
Zadatak
Napisati potprogram bfind na MIPS asemblerskom
jeziku. Potprogram uzima jedan argument u registru $4
koji je pokaziva na tring terminisan sa nula. Potprogram
treba da locira prvi karakter b u stringu i vrati njegovu
adresu u registru $2. Ako ne postoji karakter b u stringu
bfind tada vraa adresu terminatora stringa.
Napomena ASCII kod za b je 98
NPR ako je string imbibb tada povratna vrijednost
treba da bude pokaziva na trei karakter u stringu
(adresa treeg karaktera)
Zadatak - samostalno