Upload
electonix
View
40
Download
5
Embed Size (px)
DESCRIPTION
URM - nesto vise o tome (primeri)
Citation preview
URM, koriscenje potprograma
Aleksandra Kostic
Zapis URM programa i formiranje dijagrama u slucaju slozenijih funkcije sedosta komplikuje, pa je iz tog razloga pogodno koriscenje potprograma. Kodslosenijih problema, prirodno je problem (ukoliko je to moguce) razdvojiti napotprobleme koje mozemo lako razresiti, a potom sva ta resenja spojiti u glavniprogram.
Koriccenje potprograma:Neka je P pomocni, a Q glavni program. Oznacimo sa ρ(P ) broj registara kojikoristi pomocni program P . Tada je neophodno isprazniti prvih ρ(P ) registara,da bi ga potprogram mogao koristiti, a vrednosti koje su bile na mestu prvihρ(P ) registara prebaciti na lokacije koje ce kretati od ρ(P ) + 1 − ve. Naredbakoja predstavlja ugnjezdenje potprograma u glavni program ce imati zapis:
P (Rl1 , Rl2 , ..., Rln , Rl)
a semantika je data nizom sledecih naredbi:
R1 := Rl1 ,R2 := Rl2 ,...Rn := Rln ,
kopira sve vrednosti koje su potrebne potprogramu
Rn+1 := 0,Rn+2 := 0,...Rρ(P ) := 0,
ostale registre anulira
P izvrsava programRl := R1 vraca rezultat
Odnosno, znacenje instrukcije P (Rl1 , Rl2 , ..., Rln , Rl) je: prosledi potprogramuP za argumente vrednosti koje se nalze u registrima Rl1 , Rl2 , ..., Rln i rezultatprtprograma P upisi u registar Rl.
1
Zadaci
Zadatak 1. Napisati URM program koji racuna vrednost funkcije
f(x, y) =
{1, x 6= 0 i x|y;0, inace
.
Resenje:
U resavanju ovog zadatka koristicemo vec napisan program koji mnozi dva broja.
start
X==0?
Y==0?
K:=K+1
Y=KX?
K==Y
1 à R1
0 à R1
kraj
kraj
0 à R1
1 à R1
kraj
kraj
DA
DA
DA
DA
NE
NE
NE
NE
X Y
R
početna konfiguracija:
radna konfiguracija:
R1 R2
R1 R2 R3 R4 R5 R6
X Y K
R7 R8 R9
Slika 1: Zadatak 1.
Odgovarajuci kod je:
1. if R1 = R50 go to 102. if R2 = R50 go to 123. R6 := R1
4. R7 := R2
5. R8 = R8 + 16. pmno(R6, R8, R9)7. if R9 = R7 go to 128. if R8 = R7 go to 109. if R1 = R1 go to 510. R1 := 0
2
11. if R1 = R1 go to 10012. R1 := 010. R1 = R1 + 1
Zadatak 2. Napisati URM program koji racuna vrednost funkcije
f(x, y) =
{broj delioca broja x, x 6= 0;0, inace
.
Resenje:
Koristimo program iz prethodnog zadataka i uvodimo pomocni brojc k, kojice biti kandidat za broj koji deli x, i samim tim uvecavace se najvise do x, zapo jedan u svakoj iteraciji. Pored brojaca k, uvodimo i dodatni brojac br, kojice se uvecavati samo onda kada k deli x.
početak
X=0?
K:=K+1
R=1?
BR=BR+1
K=X? BR à R1
0 à R1 kraj
kraj
R:=Pdiv(K,X) X
BR
početna konfiguracija:
radna konfiguracija:
X
R1 R2
R10
K R 1
R11 R12 R13 R14
DA
DA
DA
NE
NE
NE
Slika 2: Zadatak 2.
URM kod je:
1. if R1 = R50 go to 122. R10 := R1
3. R13 := R13 + 1
3
4. R11 := R11 + 15. pdiv(R11, R10, R12)6. if R12 = R13 go to 97. if R10 = R11 go to 128. ii R1 = R1 go to 49. R14 := R14 + 110. if R10 = R11 go to 1211. ii R1 = R1 go to 412. R1 := R14
Zadatak 3. Napisati URM program koji racuna vrednost funkcije
f(x, y) =
{[ yx ], x 6= 0;0, inace
.
Resenje:
Neka je[yx
]= n, tada je n · x ≤ y < (n+ 1) · x.
Na osnovu prethodne nejednakosti, resenje ce biti prvi broj takav da njegov sled-benik pomnoxen sa x bude veci od y. Posevsi od jedinice, trazimo prvi ovakavbroj. Koristicemo se vec napisanim programima za mnozenje, i programomkoji ispituje da li je jedan broj veci od drugog, pa je neophodno odvojiti prvihmax{ρ(Pmno), ρ(P>)} registara za rad potprograma.
BR à R1 kraj
0 à R1 kraj
DA
DA
X Y
LX
početna konfiguracija:
radna konfiguracija:
Y
R1 R2
R6 R7 R8
N K R
R9 R10 R11
start
X=0?
K:=K+1
L=0?
N:=N+1
L:=P> (R,Y)
R:=Pmno(X,K)
NE
NE
Slika 3: Zadatak 3.
4
URM kod je:
1. if R1 = R50 go to 122. R6 := R1
3. R7 := R2
4. R9 := R9 + 15. pmno(R9, R6, R10)6. p>(R10, R7, R11)7. if R11 = R12 go to 108. R1 := R8
9. if R1 = R1 go to 10010. R8 := R8 + 111. if R1 = R1 go to 412. R1 := 0
Zadatak 4. Napisati URM program koji racuna vrednost funkcije
f(x, y) =
{[ x√y], x, y ≥ 4 i 3|(x+ y);
↑, inace.
Resenje:
Neka je[
x√y]
= k, tada je kx ≤ y < (k + 1)x.Slicno prethodnom zadatku, trazimo prethodnika najmanjeg k, za koje jey < (k + 1)x. Koristicemo se vec napisanim programima P≥, P+, P |, Pkx , P>,pa je neophodno odvojiti prvih n = max{ρ(P≥), ρ(P+), ρ(P|), ρ(Pkx), ρ(P>)}registara za rad potprograma.
start
X >= 4
Y>= 4
3|(x+y)
Y<(K+1)x
K:=K+1
0 à R1 kraj
DA
DA
DA
DA
NE
NE
NE
NE
X Y
13P>
početna konfiguracija:
radna konfiguracija:
X+Y
R1 R2
P| K K+14YX
N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8 N+9 N+10
(K+1)x
Slika 4: Zadatak 4.
5
URM kod:
1. Rn+1 := R1
2. Rn+2 := R2
3. Rn+3 := R3 + 14. Rn+3 := R3 + 15. Rn+3 := R3 + 16. Rn+3 := R3 + 17. Rn+5 := R5 + 18. Rn+5 := R5 + 19. Rn+5 := R5 + 110. p≥(Rn+1, Rn+3, Rn+4)11. if Rn+4 = Rn+100 go to 412. p≥(Rn+2, Rn+3, Rn+4)13. if Rn+4 = Rn+100 go to 614. p+(Rn+1, Rn+2, Rn+6)15. p|(Rn+5, Rn+6, Rn+7)16. if Rn+7 = Rn+100 go to 917. Rn+9 := Rn+9 + 118. pkx(Rn+8, Rn+1, Rn+7)19. p≥(Rn+7, Rn+2, Rn+6)20. if Rn+6 = Rn+9 go to 1721. Rn+8 := Rn+8 + 122. Rn+9 := Rn+9 + 123. if R1 = R1 go to 1124. R1 := Rn+8
U prethodnom kodu smo koristili funkciju f(x, y) = xy, koja prethodno nijedefinisana, pa cemo sada definisati algoritam i kod za nju.
Algoritam cemo sprovesti tako sto cemo u ciklusu y puta mnoziti x sa prethodnodobijenim proizvodom:
xk = x · x · ... · x︸ ︷︷ ︸sk−1
·x,
pri cemu cemo koristiti potprogram za kojim je implementirano mnozenje dvabroja.
6
start
X==0?
Y==0?
K:=K+1
K==Y S à R1 kraj
0 à R1
1 à R1
kraj
kraj
DA
DA
DA
NE
NE
NE
X Y
S=SX
početna konfiguracija:
radna konfiguracija:
R1 R2
R1 R2 R3 R4 R5 R6
X Y K
R7 R8 R9
S:=Pmno(S,X)
S:=1
Slika 5: Zadatak 4p.
URM kod:
1. R6 := R1
2. R7 := R2
3. if R6 = Rn+100 go to 1004. if R7 = Rn+100 go to 105. R9 := R9 + 16. R8 := R8 + 17. px∗y(R9, R6, R9)8. if R7 = R8 go to 139. if R1 = R1 go to 510. R1 := 011. R1 := R1 + 112. if R1 = R1 go to 10013. R1 := R9
7