PROC
Метки начинают и конец блока, называемого процедуры метка. Выписки в блоке можно вызвать с ВЫЗОВ инструкция или INVOKE директива.
label PROC [[distance]] [[langtype]] [[visibility]] [[<prologuearg>]]
[[USES reglist]] [[, parameter [[:tag]]]]...
[FRAME [:ehandler-address] ]
statements
label ENDP
Заметки
[КАДР [:ehandler-адрес]] допустимы только с ml64.exe и вызывает MASM создания записи в таблице функций в .pdata и развернуть сведения в .xdata функции для раскрутки для обработки исключений, состоящей из расширений функциональности.
После Фрейм используется атрибут, он должен следовать .ENDPROLOG директива.
См. MASM для 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