.POP2REG

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

Syntax

.POP2REGregister1register2

パラメーター

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

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

register1register2 は、それぞれ次のいずれかになります。
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

注釈

Important

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

  • .POP2REG はアンワインド バージョン 3 でのみ有効です。 これはエピローグに対応する .PUSH2REG
  • .POP2REG はエピローグ領域内でのみ使用できます 。BEGINEPILOG および .ENDEPILOG
  • これらのディレクティブはアンワインド メタデータ (.xdata セクションと .pdata セクション) を生成しますが、実行可能コードは生成しません。
  • アンワインド バージョン 3 では、POP2REG は、巻き戻すアクションを実際に実装する命令の に表示する必要があります。
  • アンワインド バージョン 3 では、エピローグ アンワインド コードの生成にはエピローグ ディレクティブが必須です。 エピローグ アンワインド コードは、 .BEGINEPILOG/.ENDEPILOG ペアなしで出力されません。
  • アグリーメントを確保するには、アンワインド ディレクティブと、マクロでアンワインドするコードの両方をラップします。

register1register2 が連続して増加する順序の場合、MASM はWOD_PUSH_CONSECUTIVE_2アンワインド コードを出力します。 それ以外の場合、MASM は WOD_PUSH2 アンワインド コードを出力します。

Note

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

Example

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .push2reg rbx, rsi
   push2 rbx, rsi
   .push2reg r10, r11
   push2 r10, r11
.endprolog
   ; rest of function ...
   .beginepilog
   .pop2reg r10, r11
   pop2 r10, r11
   .pop2reg rbx, rsi
   pop2 rbx, rsi
   .endepilog
   ret
Example1 ENDP
_text ENDS
END

こちらも参照ください

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