. PUSH2REG

Vygeneruje pro zadaný pár registru položku pro uvolnění kódu se dvěma registracemi pomocí aktuálního posunu v prologue.

Syntax

.PUSH2REG register1, register2

Parametry

register1
První registrace, která se má nasdílit. Musí to být 64bitový registr pro obecné účely.

register2
Druhá registrace, která se má nasdílit. Musí to být 64bitový registr pro obecné účely.

register1 a register2 mohou být jedna z těchto možností:
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.

Remarks

Important

Tato direktiva je experimentální a může se změnit. Povolte unwind verze 3 pomocí .ml64.exe /unwindv3

  • Slouží .PUSH2REG k určení, jak se funkce rámce odvíje. Tuto směrnici lze použít pouze v rámci prologue, která se vztahuje z prohlášení PROCFRAME na . ENDPROLOG – direktiva.
  • Tyto direktivy generují metadata unwind (.xdata a .pdata oddíly), ale nevytvářely spustitelný kód. Ve verzi Unwind verze 3 musí být zobrazena před pokynem, .PUSH2REG který skutečně implementuje akci, která má být unwound. Pokud chcete zajistit dohodu, je vhodné zabalit direktivy unwind i kód, který mají v makru uvolnit.
  • Pokud jsou registry1 a register2 po sobě jdoucí a v rostoucím pořadí, MASM vygeneruje WOD_PUSH_CONSECUTIVE_2 odvíjecí kód. V opačném případě MASM vygeneruje WOD_PUSH2 odvíjecí kód.

Note

Ve verzi Unwind verze 1 se direktiva zobrazí za odpovídající instrukcí. Ve verzi Unwind verze 3 se direktiva zobrazí před pokynem.

Příklad pro unwindv3

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

Viz také

x64 Unwind verze 3 (experimentální)
Referenční dokumentace direktiv
. POP2REG
. PUSHREG
. ENDPROLOG
Gramatika MASM BNF