現在のエピローグ オフセットを使用して、指定した XMM レジスタとオフセットの WOD_SAVE_XMM128 または WOD_SAVE_XMM128_FAR アンワインド バージョン 3 アンワインド コード エントリを生成します。
構文
.RESTOREXMM128xmmreg、 offset
パラメーター
xmmreg
復元する XMM レジスタ。
オフセット
レジスタの復元元のスタック オフセット。 16 の倍数である必要があります。
注釈
Important
このディレクティブは試験段階であり、変更される可能性があります。
ml64.exe /unwindv3でアンワインド バージョン 3 を有効にします。
.RESTOREXMM128 はアンワインド バージョン 3 でのみ有効です。 これはエピローグに対応する .SAVEXMM128。
Microsoft アセンブラー (MASM) は、特定のオフセットに対して最も効率的なエンコードを選択します。
-
.RESTOREXMM128はエピローグ領域内でのみ許可されます 。BEGINEPILOG および .ENDEPILOG。 - これらのディレクティブはアンワインド メタデータ (
.xdataセクションと.pdataセクション) を生成しますが、実行可能コードは生成しません。 - アンワインド バージョン 3 では、
.RESTOREXMM128は、スタックから XMM レジスタを読み込む命令の 前 に表示する必要があります。 - アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。
- アンワインド バージョン 3 では、エピローグ アンワインド コードの生成にはエピローグ ディレクティブが必須です。 エピローグ アンワインド コードは、
.BEGINEPILOG/.ENDEPILOGペアなしで出力されません。
Note
アンワインド バージョン 1 では、対応する命令の後にディレクティブが表示されます。 アンワインド バージョン 3 では、命令の 前 にディレクティブが表示されます。
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 ...
.beginepilog
.restorexmm128 xmm7, 010h
movdqa xmm7, [rsp+010h]
.restorexmm128 xmm6, 0
movdqa xmm6, [rsp]
.freestack 030h
add rsp, 030h
.endepilog
ret
Example1 ENDP
_text ENDS
END
こちらも参照ください
x64 アンワインド バージョン 3 (試験段階)
ディレクティブ リファレンス
.SAVEXMM128
.BEGINEPILOG
MASM BNF 文法