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.
.ALLOCSTACK generuje UWOP_ALLOC_SMALL nebo UWOP_ALLOC_LARGE se zadanou velikostí aktuálního posunu v prologu.
Syntaxe
.ALLOCSTACKVelikost
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 (
.xdataa.pdataoddíly), ale nevytvářely spustitelný kód. -
.ALLOCSTACKNež 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)