.PUSHREG

Genera una UWOP_PUSH_NONVOL voce di codice di rimozione per il numero di registro specificato utilizzando l'offset corrente nel prologo.

Sintassi

. Registro PUSHREG

il registro può essere uno dei seguenti:
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15

La versione di rimozione 3 estende il supporto del registro per includere R16-R31. il registro può essere uno dei seguenti:
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

Osservazioni:

Usare .PUSHREG con ml64.exe per specificare la modalità di rimozione di una funzione frame. È possibile usare .PUSHREG solo all'interno del prologo, che si estende dalla dichiarazione PROCFRAME a . Direttiva ENDPROLOG . Queste direttive generano metadati di rimozione (.xdata e .pdata sezioni) ma non producono codice eseguibile. Precedere .PUSHREG le istruzioni che implementano effettivamente le azioni da rimuovere. Per garantire il contratto, eseguire il wrapping di entrambe le direttive di rimozione e il codice da rimuovere in una macro.

Codice

L'esempio seguente illustra come eseguire il push di registri non volatile.

; 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

Comportamento di rimozione versione 3

Importante

Il supporto della versione 3 della rimozione è sperimentale ed è soggetto a modifiche. Abilitarlo usando ml64.exe /unwindv3.

Note

In Rimozione versione 1 la direttiva viene visualizzata dopo l'istruzione corrispondente. In Rimozione versione 3 la direttiva viene visualizzata prima dell'istruzione. In Rimozione versione 3 .PUSHREG genera una WOD_PUSH voce di codice di rimozione e deve essere visualizzata prima dell'istruzione push reg descritta. Questo requisito è l'opposto della versione 1, in cui la direttiva segue l'istruzione .

Esempio di rimozionev3

; 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

La controparte dell'epilogo è . POPREG.

Vedi anche

Versione di rimozione x64 3 (sperimentale)
Riferimento alle direttive
Grammatica BNF MASM
MASM per x64 (ml64.exe)