.SAVEREG

使用当前序言偏移为指定的寄存器 (reg) 和偏移(offset)生成 UWOP_SAVE_NONVOLUWOP_SAVE_NONVOL_FAR 展开代码条目。 Microsoft汇编程序(MASM)选择最有效的编码。

语法

.SAVEREG reg,offset

注解

用于.SAVEREGml64.exe指定帧函数展开的方式。 只能在序幕中使用,该序幕从 PROCFRAME 声明扩展到 .ENDPROLOG 指令。

  • 这些指令生成展开元数据(.xdata.pdata 节),但不生成可执行代码。
  • .SAVEREG 前面提供实际实现要撤消的操作的说明。
  • 为了确保协议,请包装展开指令及其要在宏中展开的代码。

展开版本 3 行为

Important

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

在展开版本 3 中, .SAVEREG 发出一个 WOD_SAVE_NONVOL 或一个 WOD_SAVE_NONVOL_FAR 展开代码条目。 MASM 根据 偏移量大小选择最有效的编码:

展开代码 条件
WOD_SAVE_NONVOL 偏移 量可以编码为缩放的 16 位值
WOD_SAVE_NONVOL_FAR 偏移 需要完整的 32 位值

注释

在展开版本 1 中,指令显示在相应的指令之后。 在展开版本 3 中,指令显示在指令 之前.SAVEREG 必须显示在它描述的说明 之前 。 此要求与版本 1 相反,其中指令遵循指令。

展开 v3 的示例

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .allocstack 020h
   sub rsp, 020h
   .savereg rbx, 0
   mov [rsp], rbx
   .savereg rsi, 8
   mov [rsp+8], rsi
.endprolog
   ; rest of function ...
   mov rsi, [rsp+8]
   mov rbx, [rsp]
   add rsp, 020h
   ret
Example1 ENDP
_text ENDS
END

尾声对应项 。RESTOREREG

另请参阅

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