現在のプロローグ オフセットを使用して、指定した XMM レジスタとオフセットに対して、UWOP_SAVE_XMM128 または UWOP_SAVE_XMM128_FAR のいずれかのアンワインド コード エントリを生成します。 Microsoft アセンブラー (MASM) は、最も効率的なエンコードを選択します。
構文
.SAVEXMM128xmmreg 、 offset
解説
フレーム関数のアンワインド方法を指定するには、ml64.exeで.SAVEXMM128を使用します。 プロローグ内でのみ使用できます。これは、 PROCFRAME 宣言から .ENDPROLOG ディレクティブ。 これらのディレクティブはアンワインド メタデータ (.xdata セクションと .pdata セクション) を生成しますが、実行可能コードは生成しません。
.SAVEXMM128の前に、巻き戻すアクションを実際に実装する命令を指定します。 アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。
offset は、16 の倍数である必要があります。
アンワインド バージョン 3 の動作
Important
アンワインド バージョン 3 のサポートは試験段階であり、変更される可能性があります。
ml64.exe /unwindv3を使用して有効にします。
アンワインド バージョン 3 では、 .SAVEXMM128 は WOD_SAVE_XMM128 または WOD_SAVE_XMM128_FAR アンワインド コード エントリを出力します。 Microsoft アセンブラー (MASM) は、
| アンワインド コード | 状態 |
|---|---|
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)