.RESTOREREG

WOD_SAVE_NONVOL 指定的暫存器與偏移量產生一個或一個 WOD_SAVE_NONVOL_FAR 解轉碼條目,使用當前的尾聲偏移量。

語法

.RESTOREREG Reg偏移

參數

reg
非揮發性暫存器要恢復。

offset
暫存器還原的堆疊偏移量。

備註

Important

此指令為實驗性質,且可能隨時變動。 啟用 Unwind 版本 3 時使用 ml64.exe /unwindv3

.RESTOREREG 僅在 Unwind 版本 3 中有效。 它是 .救命

Microsoft 組合語言器(MASM)會選擇給定偏移量下最有效率的編碼方式。

  • .RESTOREREG 僅允許在結語區域內,介於 之間。開始後記。結尾
  • 這些指令會產生解開的元資料(.xdata.pdata 區段),但不會產生可執行程式碼。
  • 在 Unwind 版本 3 中,必須 .RESTOREREG 出現在從堆疊載入暫存器的指令 之前
  • 為了確保一致,將解碼指令和它們要解開的程式碼都包裝成一個巨集。
  • 在 Unwind 版本 3 中,尾聲指令是產生尾聲解碼碼的強制性。 沒有一對的尾聲解捲碼會被釋放 .BEGINEPILOG/.ENDEPILOG

備註

在 Unwind 版本 1 中,指令會出現在對應指令之後。 在 Unwind 版本 3 中,指令出現 在指令之前

unwindv3 範例

; 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 Unwind 版本 3(實驗性)
指令參考
.SAVEREG
.開始後記
MASM BNF 文法