7
URM, koriˇ cenje potprograma Aleksandra Kosti´ c Zapis URM programa i formiranje dijagrama u sluˇ caju sloˇ zenijih funkcije se dosta komplikuje, pa je iz tog razloga pogodno koriˇ cenje potprograma. Kod sloˇ senijih problema, prirodno je problem (ukoliko je to mogu´ ce) razdvojiti na potprobleme koje moˇ zemo lako razreˇ siti, a potom sva ta reˇ senja spojiti u glavni program. Koriˇ cenje potprograma: Neka je P pomo´ cni, a Q glavni program. Oznaˇ cimo sa ρ(P ) broj registara koji koristi pomo´ cni 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. Naredba koja predstavlja ugnjeˇ zdenje potprograma u glavni program ´ ce imati zapis: P (R l1 ,R l2 , ..., R ln ,R l ) a semantika je data nizom slede´ cih naredbi: R 1 := R l1 , R 2 := R l2 , . . . R n := R ln , kopira sve vrednosti koje su potrebne potprogramu R n+1 := 0, R n+2 := 0, . . . R ρ(P ) := 0, ostale registre anulira P izvrˇ sava program R l := R 1 vra´ ca rezultat Odnosno, znaˇ cenje instrukcije P (R l1 ,R l2 , ..., R ln ,R l ) je: prosledi potprogramu P za argumente vrednosti koje se nalze u registrima R l1 ,R l2 , ..., R ln i rezultat prtprograma P upiˇ si u registar R l . 1

URM_potprogrami.pdf

Embed Size (px)

DESCRIPTION

URM - nesto vise o tome (primeri)

Citation preview

Page 1: URM_potprogrami.pdf

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

Page 2: URM_potprogrami.pdf

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

Page 3: URM_potprogrami.pdf

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

Page 4: URM_potprogrami.pdf

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

Page 5: URM_potprogrami.pdf

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

Page 6: URM_potprogrami.pdf

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

Page 7: URM_potprogrami.pdf

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