GNU Assembler a zasobnik

Míla Kuchta mila.kuchta na atlas.cz
Sobota Leden 5 16:54:51 CET 2002


Zdravim,

fukas na centrum.cz wrote:
> Pisu projekt v GAS (GNU Assembler) pro Linux a SDL knihovnu.
> 
> 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
> 
> Muj problem je xxx ?

Asi Vam nerozumim, ale z duvodu podpory funkci s promennym poctem
argumentu "C calling convention" rika, ze odstraneni parametru ze
zasobniku je vec callera a callie je tedy neodstanuje (ne ze by to
neslo, a po pravde receno nektere kompilery to podporuji a treba Win
API to pouziva, ale ta zas nepouziva funkce s promennym poctem
parametru, ale je s tim vic problemu, jako ze by se musela ukladat (pokud
na to neni k dispozici instrukce - u intelu ret s parametrem) navratova adresa
ze zasobniku -- na druhou stranu by to trochu zmensilo a urychlilo
program, ale kazda rutina by obsahovala slozitejsi logiku na
rozhodovani kolik toho skutecne odstanit). Dale je tu fakt, ze rutina
nepouziva cely stack ale jen jeho cast, tedy stack frame. Takze neni
treba mit cisty zasobnik nahoru (nebo dolu) od posledniho parametru
ulozeneho parametru (v C). Jinymi slovy chci rici, ze Vas sub je
zbytecny (alespon jste nam nezdelil zadny duvod, nebo jsem ho mezi
radky nejak neobjevil:-)).

S pozdravem

Mila Kuchta


Další informace o konferenci Linux