PROC
Markiert den Anfang und das Ende eines Prozedurblocks, der als Bezeichnung bezeichnet wird. Die Anweisungen im Block können mit der CALL-Anweisung oder DER INVOKE-Direktive aufgerufen werden.
Syntax
label PROC ⟦distance⟧ ⟦language-type⟧ ⟦ PUBLIC | PRIVATE | EXPORT ⟧ ⟦<prologuearg>⟧ ⟦USES reglist⟧ ⟦, parameter ⟦:tag⟧ ... ⟧
⟦FRAME ⟦:ehandler-address⟧ ⟧
Aussagen
Bezeichnung ENDP
Hinweise
Die Argumente ⟦Abstand⟧ und ⟦Sprachtyp⟧ sind nur in 32-Bit-MASM gültig.
⟦FRAME ⟦:ehandler-address⟧ ⟧ ist nur für ml64.exe gültig und bewirkt, dass MASM einen Funktionstabelleneintrag in .pdata generiert und Informationen in XData für das strukturierte Ausnahmebehandlungsverhalten einer Funktion entspannt.
Wenn das FRAME-Attribut verwendet wird, muss es von einem . ENDPROLOG-Direktive .
Weitere Informationen zur Verwendung von ml64.exe finden Sie unter MASM für x64 (ml64.exe ).
Beispiel
; 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
Der obige Code gibt die folgende Funktionstabelle aus und entspannt Informationen:
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