.FREESTACK

生成 具有尾声中当前偏移量指定大小的WOD_ALLOC_SMALL、 WOD_ALLOC_LARGEWOD_ALLOC_HUGE 展开代码项。

Syntax

。FREESTACK大小

参数

大小
要从堆栈中解除分配的字节数。 必须是 8 的倍数。

注解

Important

此指令是实验性的,可能会更改。 使用 ml64.exe /unwindv3.. 启用展开版本 3。

  • 可以使用 仅展开版本 3 中的 FREESTACK。 这是尾声的对应 。ALLOCSTACK
  • 可以使用 。FREESTACK 仅在尾声区域中,介于 两者之间。BEGINEPILOG.ENDEPILOG
  • 在展开版本 3 中。FREESTACK 必须出现在实现堆栈解除分配的指令之前add rsp, N
  • 为了确保协议,请包装展开指令及其要在宏中展开的代码。
  • 这些指令生成展开元数据(.xdata.pdata 节),但不生成可执行代码。
  • Microsoft汇编程序(MASM)为给定大小选择最有效的编码。

MASM 根据大小发出三个展开代码之一:

展开代码 条件
WOD_ALLOC_SMALL 大小 ≤ 128 字节
WOD_ALLOC_LARGE 大小 ≤ 32 KB
WOD_ALLOC_HUGE 大小> 32 KB

在展开版本 3 中,尾声指令对于尾声展开代码生成是必需的。 在没有对的情况下 .BEGINEPILOG/.ENDEPILOG ,汇编程序不会发出尾声展开代码。

注释

在展开版本 1 中,指令显示在相应的指令之后。 在展开版本 3 中,指令显示在指令 之前

展开 v3 的示例

; 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

另请参阅

x64 展开版本 3 (实验性)
指令参考
.ALLOCSTACK
.BEGINEPILOG
MASM BNF 语法