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.
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.
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ý
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ý.