Zada´ca 2
Arhitektura raˇcunara
April 2012
Sadrˇ
zaj
1 Problem 1
2
2 Problem 3
2
3 Problem 4
3
4 Problem 5
3
1
Problem 1
Napisati MIPS program koji za zadane karaktere (ASCII kodove) u nizu
znakovi provjerava da li isti postoje u stringu tekst i rezultat upisuje u
niz test. Provjeru postojanja znaka u stringu realizovati kao asemblersku
proceduru (funkciju) koja bi u C-u imala deklaraciju:
int postoji_znak(char *s, char c);
Funkcija vra´ca 0 ako znak c ne postoji u stringu s a 1 ako postoji. String
zadan pomo´cu .asciiz direktive je NULL-terminiran.
Program i funkciju provjeriti na sljede´cim podacima:
.data
tekst: .asciiz "Ovo je neki tekst KOJI SLUzi za prOBU. 1 2 3 itd."
znakovi: .byte ’a’, ’O’, ’A’, ’1’, 32, ’e’, 98
nznakova: .byte 7
test: .word 0:20
Problem 2
Data je rekurzivna funkcija
fr(n)=(1+2+3+...+n)*fr(n-2)
uz fr(0)=1 i fr(1) = 1.
Izraˇcunati vrijednost funkcije za prvih 20 prirodnih brojeva i rezultate
smjeˇstati u niz rezultat. Za sumu cijelih brojeva 1+2+3+...+n koristiti
funkciju suma_n koju takođe treba realizovati. Za funkciju suma_n odabrati
potreban broj i tip ulaznih i izlaznih parametara.
Problem 3
Date su sljede´ce lokacije:
2
.data
bubroj:
.byte 178
wbroj:
.word 393
fbroj1:
.float 388.444
fbroj2:
.float -3.625
frezultat: .float 0.0
#
#
#
#
#
unsigned
signed
sp fp broj
sp fp broj
sp fp broj
Napisati MIPS program koji za gornje podatke raˇcuna izraz:
frezultat = |fbroj1*fbroj2 - 10.5| / (bubroj * 32 + wbroj*7*fbroj2)
Na datim lokacijama se mogu nalaziti druge vrijednosti ali su uvijek datog
tipa.
Problem 4
Zadana je funkcija
float stepen(float x, int n);
Funkcija raˇcuna n-ti stepen broja x. Napisati cijelu funkciju u MIPS asembleru. Napisati i kompletan program u kome treba testirati pozivanje traˇzene
funkcije. Voditi raˇcuna da n moˇze biti pozotovan i negativan cijeli broj.
Realizovati dvije varijante funkcije. U jednoj realizaciji, funkciju realizovati iterativno, a u drugoj rekurzivno. Debagirati program i pratiti promjene
registara te promjene na stacku.
Problem 5
U MIPS asembleru napisati funkciju koja bi u C-u imala deklaraciju:
float summinmax(float *niz, int n, float *min, float *max);
Funkcija prihvata adresu poˇcetka niza float brojeva, broj elemenata niza,
te adrese lokacija na koje treba smjestiti najmanju i najve´cu vrijednost elemenata niza. Funkcija vra´ca sumu svih elemenata zadanog niza.
Napisati i kompletan program u kome treba testirati pozivanje i ispravnost traˇzene funkcije!
Rok za izradu zada´ce je 11.05.2012.
3
Download

Zadaca 2 Arhitektura racunara