GNU Assembler a zasobnik
fukas na centrum.cz
fukas na centrum.cz
Sobota Leden 5 13:21:06 CET 2002
> > Potrebuji zavolat fci a predat ji parametry v zasobniku,
> > ale tak abych neztratil sve vlastni argumenty v zasobniku.
> > Priklad:
> > sub xxx,%ebsp # nevim o kolik mam posunout zasobnik?
> > pushl 0x18(%ebp)
> > pushl (x)
> > pushl 0x14(%ebp)
> > pushl 0x8(%ebp)
> > call putpixel_nolock
> > add yyy,%esp # yyy = 4*(pocet_pushl) + xxx
>
> Ja Vam asi spatne rozumim.
> Ta funkce, kterou zavolate, si prece zase dane parametry z toho
zasobniku
> popne, a az udela ret, tak bude stack pointer presne stejny
jako pred tim
> callem.
>
> Nebo ne?
Ja dany assembler kombinuji s C(C++) a tam plati pravidlo,
ze volajici uklizi. Tzn. Pokud ja nekoho zavolam a naplnim
zasobnik parametry, z hlediska konvence volany nesmi zasobik
uklidit. O to se stara volajici. Proto ja jako fce kterou nekdo
zavolal z C musim ponechat zasobnik tak jak jsem jej dostal(tzn.
muzu zmenit neco na zasobniku, ale velikost zasobniku a esp musi
zustat stejne, protoze fce ktera me z C zavolala tento zasobnik
taky uvolni. Co co jsem napsal nahore v asm neni moje konstrukce,
ale prekladace GCC. Bohuzel se mi zatim nepodarilo zjisit
jak danou hodnotu xxx generuje.
Pro jistotu uvedu presnejsi priklad:
Soubor fce.s:
.text
.globl putpixel_nolock
.globl fce1
# putpixel_nolock(SDL_Surface *s,int x,int y,Uint32 color)
putpixel_nolock:
enter $0x0,$0x0
....
leave
ret
# fce1( ......... )
fce1:
enter $0x0,$0x0
....
sub xxx,%ebsp # nevim o kolik mam posunout zasobnik?
pushl 0x18(%ebp)
pushl (x)
pushl 0x14(%ebp)
pushl 0x8(%ebp)
call putpixel_nolock
add yyy,%esp # yyy = 4*(pocet_pushl) + xxx
...
leave
ret
Pokud me nekdo zavola z C tak mi preda parametry pres
zasobnik. Ja si chci sve parametry uchovat protoze s nimi
porad pracuji, ale zaroven potrebuji do zasobniku ulozit
parametry pro putpixel_nolock, kterou volam. V momente
az se vrati rizeni z call do me fce potrebuji abych zasobnik
(uklidil) dostal do puvodniho stavu, a nebo aspon aby
esp ukazoval na moje puvodni nezmenene parametry.
fuka
-----
Centrum pro milovníky peněz
http://finance.centrum.cz
Další informace o konferenci Linux