Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Gera uma UWOP_PUSH_NONVOL entrada de código de desenrolar para o número de registo especificado usando o deslocamento atual no prólogo.
Syntax
.PUSHREG Registo
O registo pode ser um dos:
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15
Unwind Versão 3 estende o suporte a registos para incluir R16–R31.
O registo pode ser um dos:
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
Use .PUSHREG com ml64.exe para especificar como uma função de frame se desenrola. Só pode usar .PUSHREG dentro do prólogo, que se estende da declaração do PROCFRAME até ao . Diretiva ENDPROLOG . Estas diretivas geram metadados de desmantelamento (.xdata e .pdata secções), mas não produzem código executável. Comece .PUSHREG com as instruções que realmente implementam as ações a desenrolar. Para garantir o acordo, envolve tanto as diretivas de desmantelamento como o código que devem desfazer numa macro.
Código
O exemplo seguinte mostra como fazer push em registos não voláteis.
; 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 do Unwind Versão 3
Importante
O suporte ao Unwind Versão 3 é experimental e está sujeito a alterações. Ative-o usando ml64.exe /unwindv3.
Note
No Unwind Versão 1, a diretiva aparece após a instrução correspondente. Na Versão 3 de Desenrolar, a diretiva aparece antes da instrução.
No Unwind Versão 3, .PUSHREG gera uma WOD_PUSH entrada de código de unwind e deve aparecer antes da push reg instrução que descreve. Este requisito é o oposto da Versão 1, onde a diretiva segue a instrução.
Exemplo para unwindv3
; 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
A contraparte do epílogo é . POPREG.
Ver também
x64 Unwind Versão 3 (experimental)
Referência das diretivas
MASM BNF Gramática
MASM para x64 (ml64.exe)