.SAVEREG

UWOP_SAVE_NONVOL使用目前的序言位移,為指定的緩存器 (regUWOP_SAVE_NONVOL_FARoffset) 產生 或 回溯程式代碼專案。 Microsoft 組合語言器(MASM)會選擇最有效率的編碼方式。

語法

.SAVEREG reg,偏移

備註

用 .SAVEREG 來 ml64.exe 指定框架函數如何展開。 你只能在序章中使用,序 PROCFRAME 章從宣告延伸到 。ENDPROLOG 指令。

  • 這些指令會產生解開的元資料(.xdata 和 .pdata 區段),但不會產生可執行程式碼。
  • 在前端說明 .SAVEREG 實際執行要展開的動作。
  • 為了確保一致,將解碼指令和它們要解開的程式碼都包裝成一個巨集。

Unwind 版本 3 的行為

Important

Unwind 版本 3 的支援仍屬實驗性質,可能會有所變動。 啟用時可使用 ml64.exe /unwindv3。

在 Unwind 版本 3 中,會 .SAVEREG 輸出 a WOD_SAVE_NONVOL 或 WOD_SAVE_NONVOL_FAR unwind 代碼。 MASM 根據 偏移量大小選擇最有效率的編碼:

解纏程式碼 狀況
WOD_SAVE_NONVOL 偏移 量可編碼為縮放的 16 位元值
WOD_SAVE_NONVOL_FAR 偏移 量需要完整的 32 位元值

備註

在 Unwind 版本 1 中,指令會出現在對應指令之後。 在 Unwind 版本 3 中,指令出現 在指令之前 。 .SAVEREG 必須 出現在其 描述的指令之前。 此要求與版本 1 相反,版本 1 指令是跟隨指令。

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 ...
   mov rsi, [rsp+8]
   mov rbx, [rsp]
   add rsp, 020h
   ret
Example1 ENDP
_text ENDS
END

後記對應者為 。RESTORE的。

另請參閱

x64 Unwind 版本 3(實驗性)
指示詞參考
適用於 x64 的 MASM (ml64.exe)
MASM BNF 文法