.RESTOREREG

WOD_SAVE_NONVOL使用当前尾声偏移量为指定的寄存器和偏移量生成或WOD_SAVE_NONVOL_FAR展开代码条目。

Syntax

.RESTOREREG regoffset

参数

reg
要还原的非易失性寄存器。

偏移
从中还原寄存器的堆栈偏移量。

注解

Important

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

.RESTOREREG 仅在展开版本 3 中有效。 这是尾声的对应 。SAVEREG

Microsoft汇编程序(MASM)为给定偏移量选择最有效的编码。

  • .RESTOREREG 仅允许在尾声区域中,介于 两者之间。BEGINEPILOG.ENDEPILOG
  • 这些指令生成展开元数据(.xdata.pdata 节),但不生成可执行代码。
  • 在展开版本 3 中, .RESTOREREG 必须出现在从堆栈加载寄存器的指令 之前
  • 为了确保协议,请包装展开指令及其要在宏中展开的代码。
  • 在展开版本 3 中,尾声指令对于尾声展开代码生成是必需的。 没有一对就 .BEGINEPILOG/.ENDEPILOG 没有发出尾声展开代码。

注释

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

展开 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 ...
   .beginepilog
   .restorereg rsi, 8
   mov rsi, [rsp+8]
   .restorereg rbx, 0
   mov rbx, [rsp]
   .freestack 020h
   add rsp, 020h
   .endepilog
   ret
Example1 ENDP
_text ENDS
END

另请参阅

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