.POPFRAME

在尾声中生成WOD_PUSH_CANONICAL_FRAME Windows展开数据(WOD)展开代码条目。

Syntax

。POPFRAMECODE |

参数

价值
范围 0-255 中的可选数值修饰符。
CODE 互斥。 如果指定可选的 CODE 关键字,展开代码项将收到 1 的修饰符。
如果 改为指定 可选数值,则会接收指定的值。
如果未传递参数,则值为 0。

注解

Important

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

.POPFRAME 指令允许用户ml64.exe指定帧函数如何在 epilog 中展开。 只能在 epilog 区域中在两者之间使用它 。BEGINEPILOG.ENDEPILOG

  • 。POPFRAME 仅在展开版本 3 中有效。 它是它的 epilog 对应项 。PUSHFRAME。 操作数值应与相应的值匹配 。序言中的 PUSHFRAME
  • 在展开版本 3 中 。POPFRAME 必须显示在实现要撤消的操作的指令 之前 。 为了确保协议,请包装展开指令及其要在宏中展开的代码。
  • 在展开版本 3 中,尾声指令对于尾声展开代码生成是必需的。 没有一对就 .BEGINEPILOG/.ENDEPILOG 没有发出尾声展开代码。
  • 这些指令生成展开元数据(.xdata.pdata 节),但不生成可执行代码。

注释

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

展开 v3 的示例

下面的示例演示如何使用 尾声中的 POPFRAME 指示推送和弹出规范计算机帧的中断处理程序。

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .pushframe
   .pushreg rbx
   push rbx
   .allocstack 32
   sub rsp, 32
.endprolog
   ; interrupt handler body ...
   .beginepilog
   .freestack 32
   add rsp, 32
   .popreg rbx
   pop rbx
   .popframe
   .endepilog
   iretq
Example1 ENDP
_text ENDS
END

另请参阅

x64 展开版本 3 (实验性)
.PUSHFRAME
.BEGINEPILOG
.ENDEPILOG
MASM BNF 语法