Přidělení zásobníku
Prolog funkce zodpovídá za přidělování prostoru v zásobníku pro lokální proměnné, uložené registry, parametry zásobníku a registrované parametry.
Oblast pro parametry je vždy v dolní části zásobníku (dokonce i když je použita funkce alloca), takže vždy to bude soused návratové adresy během volání libovolné funkce. Obsahuje alespoň čtyři položky, ale vždy dostatek prostoru, aby bylo možné pojmout všechny parametry funkcí, které mohou být volány. Všimněte si, že prostor je vždy přidělen pro parametry registru i když nejsou parametry v zásobníku; volanému je zaručen prostor pro všechny jeho parametry. Domovské adresy jsou požadovány pro argumenty registru, takže v případě, že si volaná funkce potřebuje vzít adresu ze seznamu argumentů (va_list) nebo samostatný argument, je k dispozici souvislá oblast. Tato oblast také poskytuje vhodné místo pro uložení argumentů registru během volání kódu s jinou bitovou šířkou a jako možnost ladění (například umožňuje argumentům snadno zjistit během ladění, zda jsou uloženy na jejich domovských adresách v kódu prologu). I když má volaná funkce méně než 4 parametry, tyto 4 lokality v zásobníku jsou účinně vlastněny volanou funkcí a mohou být využívány volanou funkcí pro jiné účely, než-li jen uložení hodnot parametrů registru. Proto nemůže volající uložit informace v této oblasti zásobníku prostřednictvím volání funkce.
Pokud je prostor dynamicky přidělen (funkcí alloca) ve funkci, stálý registr musí být použit jako rámcový ukazatel k označení základu pevné části zásobníku a tento registr musí být uložen a inicializován v prologu. Všimněte si, že při použití funkce alloca, volání stejného volaného ze stejné volající funkce může mít různé domovské adresy pro jejich parametry registru.
Zásobník bude vždy zachován s 16bajtovým zarovnáním, kromě v rámci prologu (například po posunu návratové adresy) a s výjimkou uvedenou v Typy funkce některých tříd rámcových funkcí.
Následující je příkladem rozložení zásobníku, kde funkce A volá nelistovou funkci B. Prolog funkce A má již přidělen prostor pro všechny registry a parametry zásobníku, které jsou požadované funkcí B, v dolní části zásobníku. Volání posune návratovou adresu a prolog funkce B přidělí místo pro jeho lokální proměnné, stálé registry a prostor potřebný pro jeho volání funkcí. Pokud funkce B používá funkci alloca, pak je prostor přidělen mezi lokální proměnné/stálé úložné oblasti registru a oblast parametru zásobníku.
Když funkce B volá jinou funkci, návratová adresa je posunuta před domovskou adresu pro RCX.