PROC

标记名为标签 的过程块的开始和 结尾。 可以使用 CALL 指令或INVOKE指令调用 块中的语句。

语法

labelPROCdistancelanguage-type⟦⟦ | | | | ⟧⟦<>⟧⟦⟦<⟧⟦>⟧⟦⟦⟧⟧ ...⟧
⟦⟦⟦⟦:ehandler-address
语句
labelENDP

注解

distance ⟦⟦⟧⟦⟧⟧ 参数仅在 32 位 MASM 中有效。

⟦⟦⟦⟦:ehandler-address仅对 ml64.exe 有效,并且会导致 MASM 在 .pdata 中生成函数表条目,在 .xdata 中为函数的结构化异常处理展开行为生成展开 ⟧ 信息。

使用 FRAME 属性时,它必须后跟 。ENDPROLOG 指令。

请参阅 MASM for x64 (ml64.exe) , 详细了解使用 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

另请参阅

指令参考
MASM BNF 语法