Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
etiqueta
PROC⟦distance⟧ ⟦language-type⟧ ⟦PUBLIC| |EXPORTPRIVATE⟧ ⟦<prloguearg>⟧ ⟦USESreglist⟧ ⟦,parameter ⟦:tag⟧ ... ⟧
FRAME⟦ ⟦:ehandler-address⟧ ⟧
statements
etiquetaENDP
Comentarios
Los argumentos ⟦distance⟧ y ⟦language-type⟧ solo son válidos en MASM de 32 bits.
FRAME ⟦ ⟦:ehandler-address⟧ ⟧ solo es válido con ml64.exe, y hace que MASM genere una entrada de tabla de funciones en .pdata e información de desenredado en .xdata para el comportamiento de desenredado estructurado de control de excepciones de una función.
Cuando se usa el FRAME atributo , debe ir seguido de . 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 emite 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