Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Genererar en UWOP_PUSH_NONVOL avrullningskodpost för det angivna registernumret med den aktuella förskjutningen i prologen.
Syntax
. PUSHREG-register
register kan vara något av följande:
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15
Avspolning av version 3 utökar registersupporten till att omfatta R16–R31.
register kan vara något av följande:
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
Anmärkningar
Använd .PUSHREG med ml64.exe för att ange hur en ramfunktion avrundas. Du kan bara använda .PUSHREG i prologen, som sträcker sig från PROC-deklarationenFRAME till . ENDPROLOG-direktivet . Dessa direktiv genererar varva ned metadata (.xdata och .pdata avsnitt) men producerar inte körbar kod.
.PUSHREG Föregå med de instruktioner som faktiskt implementerar de åtgärder som ska ångras. För att säkerställa en överenskommelse omsluter du både avaktiveringsdirektiven och den kod som de är avsedda att varva ned i ett makro.
Kod
Följande exempel visar hur du push-överför icke-volatila register.
; ml64 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
push r10
.pushreg r10
push r15
.pushreg r15
push rbx
.pushreg rbx
push rsi
.pushreg rsi
.endprolog
; rest of function ...
ret
Example1 ENDP
_text ENDS
END
Varva ned version 3-beteende
Important
Stöd för att varva ned version 3 är experimentellt och kan komma att ändras. Aktivera det med hjälp ml64.exe /unwindv3av .
Note
I Varva ned version 1 visas direktivet efter motsvarande instruktion. I Varva ned version 3 visas direktivet före instruktionen.
I Varva ned version 3 .PUSHREG genererar du en WOD_PUSH avspolningskodpost och måste visas före instruktionen som push reg beskrivs. Detta krav är motsatsen till version 1, där direktivet följer instruktionen.
Exempel på avspolning 3
; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
.pushreg r10
push r10
.pushreg r15
push r15
.pushreg rbx
push rbx
.pushreg rsi
push rsi
.endprolog
; rest of function ...
ret
Example1 ENDP
_text ENDS
END
Motsvarigheten till epilogen är . POPREG.
Se även
x64 Varva ned version 3 (experimentell)
Referens för direktiv
MASM BNF-grammatik
MASM för x64 (ml64.exe)