.SAVEXMM128

現在のプロローグ オフセットを使用して、指定した XMM レジスタとオフセットに対して、UWOP_SAVE_XMM128 または UWOP_SAVE_XMM128_FAR のいずれかのアンワインド コード エントリを生成します。 Microsoft アセンブラー (MASM) は、最も効率的なエンコードを選択します。

構文

.SAVEXMM128 xmmregoffset

解説

フレーム関数のアンワインド方法を指定するには、ml64.exe.SAVEXMM128を使用します。 プロローグ内でのみ使用できます。これは、 PROCFRAME 宣言から .ENDPROLOG ディレクティブ。 これらのディレクティブはアンワインド メタデータ (.xdata セクションと .pdata セクション) を生成しますが、実行可能コードは生成しません。 .SAVEXMM128の前に、巻き戻すアクションを実際に実装する命令を指定します。 アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。

offset は、16 の倍数である必要があります。

アンワインド バージョン 3 の動作

Important

アンワインド バージョン 3 のサポートは試験段階であり、変更される可能性があります。 ml64.exe /unwindv3を使用して有効にします。

アンワインド バージョン 3 では、 .SAVEXMM128WOD_SAVE_XMM128 または WOD_SAVE_XMM128_FAR アンワインド コード エントリを出力します。 Microsoft アセンブラー (MASM) は、offset

アンワインド コード 状態
WOD_SAVE_XMM128 オフセット は、スケーリングされた 16 ビット値としてエンコードできます
WOD_SAVE_XMM128_FAR オフセット には完全な 32 ビット値が必要です

Note

アンワインド バージョン 1 では、ディレクティブは命令の後に来ます。 アンワインド バージョン 3 では、ディレクティブは命令の前にあります。 .SAVEXMM128 は、記述する命令の に記述する必要があります。 この要件はバージョン 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 アンワインド バージョン 3 (試験段階)
ディレクティブ リファレンス
MASM BNF 文法
x64 用 MASM (ml64.exe)