WOD_SAVE_NONVOL使用当前尾声偏移量为指定的寄存器和偏移量生成或WOD_SAVE_NONVOL_FAR展开代码条目。
Syntax
.RESTOREREGreg、 offset
参数
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