Udostępnij za pośrednictwem


PROC

Oznacza początek i koniec bloku procedury o nazwie label. Instrukcje w bloku mogą być wywoływane za pomocą instrukcji CALL lub dyrektywy INVOKE .

Składnia

etykieta PROCodległość⟧ ⟦typ języka⟧ ⟦ PUBLICZNY EKSPORT PRYWATNY | | ⟧ <prologuearg>⟧ ⟦UŻYWA listy reglist⟧ ⟦, parametr:tag⟧ ... ⟧
⟦FRAME:ehandler-address⟧ ⟧
Instrukcji
etykieta ENDP

Uwagi

Argumenty ⟦distance⟧ i ⟦language-type⟧ są prawidłowe tylko w 32-bitowym masm.

⟦FRAME:ehandler-address⟧ ⟧ jest prawidłowy tylko w przypadku ml64.exe i powoduje, że program MASM generuje wpis tabeli funkcji w pliku .pdata i odwija informacje w pliku xdata dla zachowania odwijania wyjątku strukturalnego funkcji.

Gdy jest używany atrybut FRAME, musi być zgodny z . ENDPROLOG, dyrektywa.

Aby uzyskać więcej informacji na temat korzystania z ml64.exe, zobacz MASM for x64 (ml64.exe).

Przykład

; 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

Powyższy kod emituje następującą tabelę funkcji i odwija informacje:

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

Zobacz też

Odwołanie do dyrektyw
Gramatyka MASM BNF