UWOP_SAVE_XMM128使用目前的序言位移,為指定的 XMM 快取器和位移產生 或 UWOP_SAVE_XMM128_FAR 回溯程式代碼專案。 Microsoft 組合語言器(MASM)會選擇最有效率的編碼方式。
語法
.SAVEXMM128xmmreg , 偏移
備註
用 .SAVEXMM128 來 ml64.exe 指定框架函數如何展開。 你只能在序章中使用,序 PROCFRAME 章從宣告延伸到 。ENDPROLOG 指令。 這些指令會產生解開的元資料(.xdata 和 .pdata 區段),但不會產生可執行程式碼。 前面要 .SAVEXMM128 列出實際執行要展開的動作的指令。 為了確保一致,將解碼指令和它們要解開的程式碼都包裝成一個巨集。
offset 必須是 16 的倍數。
Unwind 版本 3 的行為
Important
Unwind 版本 3 的支援仍屬實驗性質,可能會有所變動。 啟用時可使用 ml64.exe /unwindv3。
在 Unwind 版本 3 中,會 .SAVEXMM128 輸出 a WOD_SAVE_XMM128 或 WOD_SAVE_XMM128_FAR unwind 代碼。 Microsoft組譯器(MASM)根據 offset 的大小選擇最有效率的編碼:
| 解纏程式碼 | 狀況 |
|---|---|
WOD_SAVE_XMM128 |
偏移 量可編碼為縮放的 16 位元值 |
WOD_SAVE_XMM128_FAR |
偏移 量需要完整的 32 位元值 |
備註
在 Unwind 版本 1 中,指令會放在指令之後。 在 Unwind 版本 3 中,指令會放在指令之前。
.SAVEXMM128 必須 出現在其 描述的指令之前。 此要求與版本 1 相反,版本 1 指令是跟隨指令。
unwindv3 範例
; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.allocstack 030h
sub rsp, 030h
.savexmm128 xmm6, 0
movdqa [rsp], xmm6
.savexmm128 xmm7, 010h
movdqa [rsp+010h], xmm7
.endprolog
; rest of function ...
movdqa xmm7, [rsp+010h]
movdqa xmm6, [rsp]
add rsp, 030h
ret
Example1 ENDP
_text ENDS
END
後記對應者為 。RESTOREXMM128。
另請參閱
x64 Unwind 版本 3(實驗性)
指示詞參考
MASM BNF 文法
適用於 x64 的 MASM (ml64.exe)