. FREESTACK

Vygeneruje WOD_ALLOC_SMALL, WOD_ALLOC_LARGE nebo WOD_ALLOC_HUGE odvinutí položky kódu se zadanou velikostí aktuálního posunu v epilogu.

Syntax

. VELIKOST FREESTACK

Parametry

velikost
Počet bajtů, které se mají uvolnit ze zásobníku. Musí to být násobek 8.

Remarks

Important

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

  • Můžete použít . FREESTACK pouze ve verzi 3. Je to epilogue protějšek . ALLOCSTACK.
  • Můžete použít . FREESTACK pouze v rámci epilogické oblasti, mezi . BEGINEPILOG a . ENDEPILOG.
  • Ve verzi 3. FREESTACK se musí objevit předadd rsp, N instrukcí, která implementuje uvolnění zásobníku.
  • Pokud chcete zajistit dohodu, zabalte direktivy unwind i kód, který mají v makru uvolnit.
  • Tyto direktivy generují metadata unwind (.xdata a .pdata oddíly), ale nevytvářely spustitelný kód.
  • Microsoft Assembler (MASM) zvolí nejúčinnější kódování pro danou velikost.

MASM generuje jeden ze tří kódů odvíjení v závislosti na velikosti:

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

V unwind verze 3 jsou direktivy epilogue povinné pro epilogue unwind generování kódu. Assembler nevysílají kódy epilogu bez páru .BEGINEPILOG/.ENDEPILOG .

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 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .allocstack 16
   sub rsp, 16
.endprolog
   ; function body
   .beginepilog
   .freestack 16
   add rsp, 16
   .endepilog
   ret
Example1 ENDP
_text ENDS
END

Viz také

x64 Unwind verze 3 (experimentální)
Referenční dokumentace direktiv
. ALLOCSTACK
. BEGINEPILOG
Gramatika MASM BNF