.ALLOCSTACK

.ALLOCSTACK generuje UWOP_ALLOC_SMALL nebo UWOP_ALLOC_LARGE se zadanou velikostí aktuálního posunu v prologu.

Syntaxe

.ALLOCSTACK Velikost

Poznámky

Microsoft Assembler (MASM) zvolí nejúčinnější kódování pro danou velikost.

.ALLOCSTACK umožňuje ml64.exe uživatelům určit, jak se funkce rámce odvíjeje a je povolena pouze v rámci prologue, která se vztahuje z deklarace PROCFRAME na . ENDPROLOG – direktiva.

  • Tyto direktivy generují metadata unwind (.xdata a .pdata oddíly), ale nevytvářely spustitelný kód.
  • .ALLOCSTACK Než se zobrazí pokyny, které skutečně implementují akce, které se mají zrušit. Zabalte direktivy unwind i kód, který mají v makru uvolnit, aby se zajistila smlouva.

Operand velikosti musí být násobkem 8.

Epilogue protějšk je . FREESTACK.

Příklad: Zadejte unwind verze 3 unwind/exception obslužnou rutinu

Následující ukázka ukazuje, jak určit obslužnou rutinu unwind/exception:

; ml64 ex3.asm /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
   ; exception/unwind handler body

   ret 0

Example3_UW ENDP

Example3 PROC FRAME : Example3_UW

   sub rsp, 16
.allocstack 16

.endprolog

   ; function body
    add rsp, 16
   ret 0

Example3 ENDP
text ENDS
END

Odvinutí chování verze 3

Important

Podpora unwind verze 3 je experimentální a může se změnit. Povolte ho pomocí .ml64.exe /unwindv3

.ALLOCSTACKvygeneruje WOD_ALLOC_SMALLpoložku kódu , nebo WOD_ALLOC_LARGEWOD_ALLOC_HUGE Unwind verze 3 se zadanou velikostí aktuálního posunu v prologu.

.ALLOCSTACK musí se zobrazit předsub rsp, N pokyny, které popisuje. Tento požadavek je opakem verze 1, kde direktiva dodržuje instrukce.

MASM vygeneruje jeden ze tří kódů odvíjení v závislosti na velikosti přidělení:

Odvinout kód Podmínka
WOD_ALLOC_SMALL velikost ≤ 128 bajtů
WOD_ALLOC_LARGE velikost ≤ 32 kB
WOD_ALLOC_HUGE Velikost> 32 kB

Verze 1 generuje pouze UWOP_ALLOC_SMALL nebo UWOP_ALLOC_LARGE. Verze 3 přidá třetí variantu , WOD_ALLOC_HUGEpro přidělení větší než 32 kB.

Note

Ve verzi Unwind verze 1 se direktiva zobrazí za odpovídající instrukcí. Ve verzi Unwind verze 3 se direktiva zobrazí před pokynem.

Příklad pro unwindv3

; ml64 ex3.asm /unwindv3 /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
   ; exception/unwind handler body

   ret 0

Example3_UW ENDP

Example3 PROC FRAME : Example3_UW

.allocstack 16
   sub rsp, 16

.endprolog

   ; function body
    add rsp, 16
   ret 0

Example3 ENDP
text ENDS
END

Viz také

x64 Unwind verze 3 (experimentální)
Referenční dokumentace k direktivám
Gramatika MASM BNF
MASM pro x64 (ml64.exe)