«« ( Date ) »» // «« ( Thread ) »» // ri4pp - 2006

Re: Ispitni zadatak- Ko ume njemu dve!

by Jovan Popovic
četvrtak, 28. septembar 2006 - 08:56.

Zadatak je bio na temu "predloziti resenje". Primer za prenos po referenci
(C++ stil)

int x;

void f(int& a)
{
a=17;
}

main()
{
f(x);
}

Kod prenosa po referenci (ili "upućivačima") kada imate izraz oblika a =
17 (gde je a parametar koji je prosledjen funkciji) vrednost 17 ne
upisujete u lokaciju u aktivacionom zapisu koja je dodeljena parametru a,
nego funkciji prenesete adresu promenljive x, upisete tu adresu u lokalno
polje u aktivacionom zpisu koji odgovara parametru a, i onda preko te
adrese nadjete lokaciju u koju treba upisati vrednost 17 (to je lokacija
za promenljivu x cija je adresa preneta funkciji f). Tako da je
poizvrsenju naredbe a = 17 u stvari u lokaciju x upisana vrednost 17 a u
lokaciji za a i dalje se nalazi adresa promenljive x.
Pogledajte predavanja ili vezbe - PoziviProcedura.doc za objasnjenje
prenosa po referenci.

Problem u mikrojavi je u tome sto se ne moze preneti samo adresa nego i
informacija u kojoj memoriji se promenljiva nalazi (StaticData, Heap ili
ProcStack) da bi se odredilo da li treba koristiti getstatic/putstatic,
load/store ili getfield/putfield instrukcije za pristup preko adrese.

Na ispitu je receno da se moze pretpostaviti da se u programu prenose samo
staticke promenljive i da se a posmatra kao staticka promenljiva. U tom
slucaju prenose se adrese promenljivh a i c u statickoj memoriji kao
vrednosti parametara funkcije i koriste se instrukcije getstatic i
putstatic za pristup tim promenljivama.

Pozdrav,
Jovan

> rok 10.decembar 2005.
> zadatak 4.
>
> a)Napisati mikrojava asemblerski kod koji odgovara kodu na slici, pod
> pretpostavkom da se argumenti prenose po referenci. (znam sta znaci da se
> argumenti prenose po referenci ali kako ovo odratiti u mikrojava
> asemblerskom kodu, znaci ne ocekujem od nekog da mi radi ceo zadatak, vec
> samo ova fora za prenos argumenata po referenci. A ako neko posalje ceo
> zadatak, ne moze da skodi, a ako ne skodi, znaci da koristi:)) )
>
>
> Evo koda sa slike:
> int c;
>
> void f(int a, int b)
>
> {
>
> a = b * c;
>
> b = c + a;
>
> c = b + c;
>
> b = a + c;
>
> }
>
> void main() int a;
>
> { a = 2; c = 4;
>
> do{ f(c, a); }while(a<0);
>
> }
>
>