Re: Ispitni zadatak- Ko ume njemu dve!
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);
>
> }
>
>
(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);
>
> }
>
>
- References:
- Ispitni zadatak- Ko ume njemu dve!
- From: "Dragoslav Plazinic" <plazo@ptt.yu>
- Ispitni zadatak- Ko ume njemu dve!
Previous by date: Re: Lokalna analiza - Da li je ovde greska u resenju?
Next by date: Odbrana domaceg
Previous by thread: Ispitni zadatak- Ko ume njemu dve! Next by thread: Odbrana domaceg
Previous by thread: Ispitni zadatak- Ko ume njemu dve! Next by thread: Odbrana domaceg