.PUSHREG

Génère une UWOP_PUSH_NONVOL entrée de code de déroulement pour le numéro de registre spécifié à l’aide du décalage actuel dans le prologue.

Syntaxe

. Registre PUSHREG

le registre peut être l’un des suivants :
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15

Unwind Version 3 étend la prise en charge de l’inscription pour inclure R16-R31. le registre peut être l’un des suivants :
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

Notes

Utilisez-la .PUSHREGml64.exe pour spécifier la façon dont une fonction frame se déroule. Vous ne pouvez utiliser .PUSHREG que dans le prologue, qui s’étend de la déclaration PROCFRAME au . Directive ENDPROLOG . Ces directives génèrent des métadonnées de déroulement (.xdata et .pdata des sections) mais ne produisent pas de code exécutable. Précèdez .PUSHREG les instructions qui implémentent réellement les actions à annuler. Pour garantir l’accord, incluez à la fois les directives de déroulement et le code qu’ils sont destinés à décompresser dans une macro.

Code

L’exemple suivant montre comment envoyer (push) des registres nonvolatiles.

; 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

Déroulement du comportement version 3

Important

La prise en charge de la version 3 du déroulement est expérimentale et peut être modifiée. Activez-le à l’aide de ml64.exe /unwindv3.

Note

Dans Unwind Version 1, la directive apparaît après l’instruction correspondante. Dans Unwind Version 3, la directive apparaît avant l’instruction. Dans Unwind Version 3, .PUSHREG génère une WOD_PUSH entrée de code de déroulement et doit apparaître avant l’instruction push reg qu’elle décrit. Cette exigence est l’inverse de la version 1, où la directive suit l’instruction.

Exemple de déroulement3

; 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

L’épilogue équivalent est . POPREG.

Voir aussi

x64 Unwind Version 3 (expérimentale)
Informations de référence sur les directives
Grammaire MASM BNF
MASM pour x64 (ml64.exe)