PROC

Marca el inicio y el final de un bloque de procedimiento denominado label. Se puede llamar a las instrucciones del bloque con la instrucción CALL o la directiva INVOKE.

Sintaxis

labelPROCdistance⟧ ⟦language-type⟧ ⟦ PUBLIC | PRIVATE | EXPORT ⟧ ⟦<prologuearg>⟧ ⟦USESreglist⟧ ⟦,parameter:tag⟧ ...⟧
FRAME:ehandler-address⟧ ⟧
statements
labelENDP

Comentarios

Los argumentos ⟦distance⟧ y ⟦language-type⟧ solo son válidos en MASM de 32 bits.

FRAME:ehandler-address⟧ ⟧ solo es válido en ml64.exe, y hace que MASM genere una entrada de tabla de función en .pdata y que desenrede información en .xdata para una excepción estructurada de una función que manipula el comportamiento de desenredado.

Cuando se usa el atributo FRAME, debe ir seguido de una directiva .ENDPROLOG.

Consulte MASM para x64 (ml64.exe) para obtener más información sobre el uso de ml64.exe.

Ejemplo

; 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

El código anterior emitirá la siguiente tabla de funciones e información de desenredado:

FileHeader->Machine 34404
Dumping Unwind Information for file ex2.exe

.pdata entry 1 0x00001000 0x00001023

  Unwind data: 0x00002000

    Unwind version: 1
    Unwind Flags: None
    Size of prologue: 0x08
    Count of codes: 3
    Frame register: rbp
    Frame offset: 0x0
    Unwind codes:

      Code offset: 0x08, SET_FPREG, register=rbp, offset=0x00
      Code offset: 0x05, ALLOC_SMALL, size=0x10
      Code offset: 0x01, PUSH_NONVOL, register=rbp

Consulte también

Referencia de directivas
Gramática BNF de MASM