.POPREG

エピローグの現在のオフセットを使用して、指定したレジスタの WOD_PUSH アンワインド コード エントリを生成します。

Syntax

.POPREG レジスタ

パラメーター

register
ポップするレジスタ。 汎用の 64 ビット レジスタである必要があります。

注釈

Important

このディレクティブは試験段階であり、変更される可能性があります。 ml64.exeの /unwindv3 オプションを使用してアンワインド バージョン 3 を有効にします。

.POPREG はアンワインド バージョン 3 でのみ有効です。 これはエピローグに対応する .PUSHREG

.POPREG はエピローグ領域内でのみ許可されます 。BEGINEPILOG および .ENDEPILOG。 これらのディレクティブはアンワインド メタデータ (.xdata セクションと .pdata セクション) を生成しますが、実行可能コードは生成しません。 アンワインド バージョン 3 では、.POPREGは、レジスタの復元を実装するpop命令のに表示する必要があります。 アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。

register は次のいずれかになります。
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31

アンワインド バージョン 3 では、エピローグ アンワインド コードの生成にはエピローグ ディレクティブが必須です。 アセンブラーは、 .BEGINEPILOG/.ENDEPILOG ペアなしでエピローグ アンワインド コードを出力しません。

Note

アンワインド バージョン 1 では、対応する命令の後にディレクティブが表示されます。 アンワインド バージョン 3 では、命令の にディレクティブが表示されます。

unwindv3 の例

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .pushreg rbx
   push rbx
   .pushreg rsi
   push rsi
.endprolog
   ; rest of function ...
   .beginepilog
   .popreg rsi
   pop rsi
   .popreg rbx
   pop rbx
   .endepilog
   ret
Example1 ENDP
_text ENDS
END

こちらも参照ください

x64 アンワインド バージョン 3 (試験段階)
ディレクティブ リファレンス
.PUSHREG
.POP2REG
.BEGINEPILOG
MASM BNF 文法