Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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řed
add rsp, Ninstrukcí, 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 (
.xdataa.pdataoddí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