# Odovzdávanie parametrov

Volanie adresou znamená, že volajúci odovzdá volanému podprogramu adresu parametra.
Volanie hodntou znamená, že volajúci odovzdá volanému hodnotu parametra.

Var parametre sa vždy volajú adresou.

Const parametre a parametre bez uvedenia spôsobu volania sa volajú hodnotou okrem týchto prípadov:

- Short string sa volá adresou

- Variant sa pri volaní typu register alebo pascal volá adresou

- Množiny, záznamy a statické polia:

- Pri volaní typu register alebo pascal sa volajú hodnotou len ak je ich celková dĺžka rovná 1, 2 alebo 4 bajty inak sa volajú adresou.

- Pri volaní typu stdcall, cdecl a safecall sa vždy volajú hodnotou. Hodnoty sú v zásobníku zarovnané na 4 bajty.

#

# Odovzdávanie výsledku funkcie

Hodnoty dĺžky 1 bajt sa odovzdávajú v AL, hodnoty dĺžky 2 bajty sa odovzdávajú v AX a hodnoty dĺžky 4 bajty sa odovzdávajú v EAX.
Platia tieto výnimky:

- Reálne typy sa odovzdávajú v registri ST(0) FPU

- Short string, long string, adresu metódy, variand alebo In64 sa prenášajú tak, akoby funkcia bola deklarovaná ako procedúra s pridaným var parametrom pre uloženie výsledku.

- Množiny, záznamy a statické polia:

- Ak je ich veľkosť 1, 2 alebo 4 bajty tak sa prenesú v registri AL, AX resp. EAX

- Inak sa prenesú akoby funkcia bola deklarovaná ako procedúra s pridaným var parametrom pre uloženie výsledku.

#

# Typy volaní

register
prvé tri, ktoré sa dajú sú v EAX, ADX a ECX, ostatné ako pascal

pascal
v zásobníku - push v poradí, zásobník čístí volaný

cdecl
v zásobníku - push v opačnom poradí, zásobník čístí volajúci

stdcall
v zásobníku - push v opačnom poradí, zásobník čístí volaný

#

# Uchov ávanie registrov

Procedúra musí zachovať registre EBX, ESI, EDI a EBP - teda po návrate musia mať rovnakú hodnotu ako na začiatku procedúry.
Registre EAX, ECX a EDX môže procedúra ľubovoľne meniť.
Príznak DF registra EFLAGS je vždy pri vstupe vynulovaný a pri výstupe musí byť taktiež vynulovaný.