.ALLOCSTACK 產生一個 UWOP_ALLOC_SMALL 或 UWOP_ALLOC_LARGE ,並以序言中指定的當前偏移大小。
語法
.ALLOCSTACK規模
備註
Microsoft 組合語言器(MASM)會選擇特定大小下最有效率的編碼方式。
.ALLOCSTACK 允許 ml64.exe 使用者指定框架函式如何展開,且僅允許在序章中進行,序言從 PROCFRAME 宣告延伸至 。ENDPROLOG 指令。
- 這些指令會產生解開的元資料(
.xdata和.pdata區段),但不會產生可執行程式碼。 - 在前端
.ALLOCSTACK說明實際執行要展開的動作。 將解碼指令和它們應該解開的程式碼包裝成巨集,以確保雙方一致。
大小操作數必須是8的倍數。
後記對應者為。FREESTACK。
範例:指定一個 unwind 版本 3 的 unwind/exception handler
下列範例示範如何指定回溯/例外狀況處理程式:
; 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
Unwind 版本 3 的行為
Important
Unwind 版本 3 的支援仍屬實驗性質,可能會有所變動。 啟用時可使用 ml64.exe /unwindv3。
.ALLOCSTACK產生WOD_ALLOC_SMALLWOD_ALLOC_LARGEWOD_ALLOC_HUGE一個、或為序章中指定大小的解帶版本3的解帶程式碼條目。
.ALLOCSTACK 必須 出現在其 描述的指令之前 sub rsp, N 。 此要求與版本 1 相反,版本 1 指令是跟隨指令。
MASM 會根據分配大小發出三種回轉碼之一:
| 解纏程式碼 | 狀況 |
|---|---|
WOD_ALLOC_SMALL |
大小 ≤ 128 位元組 |
WOD_ALLOC_LARGE |
大小 ≤ 32 KB |
WOD_ALLOC_HUGE |
規模> 32 KB |
版本 1 僅 UWOP_ALLOC_SMALL 產生 或 UWOP_ALLOC_LARGE。 版本 3 新增第三種變體,用於 WOD_ALLOC_HUGE大於 32 KB 的分配。
備註
在 Unwind 版本 1 中,指令會出現在對應指令之後。 在 Unwind 版本 3 中,指令出現 在指令之前 。
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
另請參閱
x64 Unwind 版本 3(實驗性)
指示詞參考
MASM BNF 文法
適用於 x64 的 MASM (ml64.exe)