PROC
标记名为标签的过程块的开始和结束。 可以使用 CALL 指令或 INVOKE 指令调用块中的语句。
语法
label PROC ⟦distance⟧ ⟦language-type⟧ ⟦ PUBLIC | PRIVATE | EXPORT ⟧ ⟦<prologuearg>⟧ ⟦USES reglist⟧ ⟦, parameter ⟦:tag⟧ ...⟧
⟦FRAME ⟦:ehandler-address⟧ ⟧
statements
label ENDP
注解
⟦distance⟧ 和 ⟦language-type⟧ 参数仅在 32 位 MASM 中有效。
⟦FRAME ⟦:ehandler-address⟧ ⟧仅在 ml64.exe 中有效,并且可使 MASM 在 .pdata 中生成函数表条目,并在 .xdata 中生成展开信息,以实现函数的结构化异常处理展开行为。
使用 FRAME 特性时,它必须后跟 .ENDPROLOG 指令。
有关使用 ml64.exe 的详细信息,请参阅 MASM for x64 (ml64.exe)。
示例
; 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
上述代码将发出以下函数表并展开信息:
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