Partilhar via


Operações de Pseudo bruto

Este tópico lista as operações de pseudo.

Comentários

Operação de pseudo

Description

QUADRO de PROC [: ehandler]

Causas MASM para gerar uma função de entrada no .pdata da tabela e desenrolar informações em .xdata para uma função do estruturado comportamento de desenrolamento de manipulação de exceção. Se ehandler estiver presente, esse proc é inserido o .xdata como o manipulador específico do idioma.

Quando o atributo de quadro é usado, ele deve ser seguido por um.Diretiva ENDPROLOG. Se a função é uma função de folha (conforme definido na Tipos de função) o atributo de quadro é desnecessário, pois o restante dessas pseudo-operations.

.PUSHREG reg

Gera uma entrada de código de desenrolamento UWOP_PUSH_NONVOL para o número de registro especificado usando o atual deslocamento no prólogo.

Isso deve ser usado somente com os registradores de inteiro não-volátil. Para as verificações extras de registradores volátil, use um.ALLOCSTACK 8, em vez disso

.SETFRAME reg, deslocamento

Preenchimentos no quadro de registram o campo e o deslocamento nas informações de desenrolamento usando o registrador especificado e o deslocamento. O deslocamento deve ser um múltiplo de 16 e menor ou igual a 240. Essa diretiva também gera uma entrada de código de desenrolamento UWOP_SET_FPREG para o registro especificado usando o atual deslocamento de prólogo.

.Tamanho ALLOCSTACK

Gera um UWOP_ALLOC_SMALL ou um UWOP_ALLOC_LARGE com o tamanho especificado para o atual deslocamento no prólogo.

O operando de tamanho deve ser um múltiplo de 8.

.SAVEREG reg, deslocamento

Gera um UWOP_SAVE_NONVOL ou uma entrada de código de desenrolamento UWOP_SAVE_NONVOL_FAR para o registrador especificado e o deslocamento usando o atual deslocamento de prólogo. MASM escolherá a codificação mais eficiente.

O deslocamento deve ser positivo e um múltiplo de 8. Deslocamento é relativo à base de quadro do procedimento, o que é geralmente em RSP, ou usando um ponteiro de quadro, o ponteiro do quadro de escala.

.SAVEXMM128 reg, deslocamento

Gera um UWOP_SAVE_XMM128 ou uma entrada de código de desenrolamento de UWOP_SAVE_XMM128_FAR para o registrador XMM especificado e o deslocamento usando o atual deslocamento de prólogo. MASM escolherá a codificação mais eficiente.

O deslocamento deve ser positivo e múltiplo de 16. Deslocamento é relativo à base de quadro do procedimento, o que é geralmente em RSP, ou usando um ponteiro de quadro, o ponteiro do quadro de escala.

.PUSHFRAME [código]

Gera uma entrada de código de desenrolamento UWOP_PUSH_MACHFRAME. Se o código opcional for especificado, a entrada de código de desenrolamento é fornecida um modificador de 1. Caso contrário, o modificador é 0.

.ENDPROLOG

Sinaliza o fim das declarações de prólogo. Deve ocorrer nos primeiros 255 bytes da função.

Aqui está um prólogo da função de exemplo com o uso correto da maioria dos opcodes:

sample PROC FRAME   
   db      048h; emit a REX prefix, to enable hot-patching
push rbp
.pushreg rbp
sub rsp, 040h
.allocstack 040h   
lea rbp, [rsp+020h]
.setframe rbp, 020h
movdqa [rbp], xmm7
.savexmm128 xmm7, 020h;the offset is from the base of the frame
;not the scaled offset of the frame
mov [rbp+018h], rsi
.savereg rsi, 038h
mov [rsp+010h], rdi
.savereg rdi, 010h; you can still use RSP as the base of the frame
; or any other register you choose
.endprolog

; you can modify the stack pointer outside of the prologue (similar to alloca)
; because we have a frame pointer.
; if we didn’t have a frame pointer, this would be illegal
; if we didn’t make this modification,
; there would be no need for a frame pointer

sub rsp, 060h

; we can unwind from the following AV because of the frame pointer

mov rax, 0
mov rax, [rax] ; AV!

; restore the registers that weren’t saved with a push
; this isn’t part of the official epilog, as described in section 2.5

movdqa xmm7, [rbp]
mov rsi, [rbp+018h]
mov rdi, [rbp-010h]

; Here’s the official epilog

lea rsp, [rbp-020h]
pop rbp
ret
sample ENDP

Consulte também

Referência

Desenrolar auxiliares para MASM