PROC
Starten und Beenden eines Prozedurblocks Markierungen, der Bezeichnungaufgerufen wird. Die Anweisungen im Block können mit der Aufrufanweisung oder den AUFRUF-Direktive aufgerufen werden.
label PROC [[distance]] [[langtype]] [[visibility]] [[<prologuearg>]]
[[USES reglist]] [[, parameter [[:tag]]]]...
[FRAME [:ehandler-address] ]
statements
label ENDP
Hinweise
[FRAME [:Ehandler ADDRESS]] ist mit ml64.exe nur gültig und veranlasst MASM, einen Funktionstabelleneintrag in .pdata und Informationen in .xdata für Entladungs Verhalten der strukturierten Ausnahmebehandlung eine Funktion zu entladen.
Wenn das FRAME-Attribut verwendet wird, muss es aus .ENDPROLOG-Direktive folgen.
Weitere Informationen finden Sie unter MASM für x64 (ml64.exe) Weitere Informationen über die Verwendung von 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 und entlädt 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