PROC
label という名前のプロシージャ ブロックの開始と終了を示します。 ブロック内のステートメントは、CALL 命令または INVOKE ディレクティブで呼び出すことができます。
label PROC [[distance]] [[langtype]] [[visibility]] [[<prologuearg>]]
[[USES reglist]] [[, parameter [[:tag]]]]...
[FRAME [:ehandler-address] ]
statements
label ENDP
パラメーター
label
プロシージャの名前を定義します。 次の名前付け規則langtype。prologuearg
プロローグ プロシージャに渡す引数。 デフォルトのPROLOGUEとEPILOGUE、FORCEFRAME引数は、1 つは必要ではない場合でも、スタック セグメントを生成します。 LOADDS原因で保存するには、DS レジスタ、PROLOGUEおよび復元ので、EPILOGUE。 パラメーターは、コンマで区切る必要があります。 角かっこが必要である渡されない。distance
Can be NEAR, FAR, NEAR16, NEAR32, FAR16, or FAR32. このプロシージャの呼び出しの距離を示します。 場合は、選択NEARまたはFAR、アセンブラーが 16 ビットまたは 32 ビットを選択しますNEARまたはFAR現在のセグメントのサイズによって異なります。 このオプションを指定しない場合は、アセンブラーはメモリとプロセッサの種類からの距離を決定します。 NEAR使用しない場合、既定である、.MODELディレクティブ。langtype
任意の有効な言語の型。 スタイルと呼び出しの名前付け規則を決定します。visibility
Can be PRIVATE, PUBLIC, or EXPORT. 決定の手順どのように他のモジュールを利用可能になります。 PUBLIC標準の既定では、ですが、デフォルトをリセットすることができます、OPTION PROCディレクティブ。 EXPORT意味PUBLICとFARとプロシージャ エントリのエクスポート テーブルに配置する必要があること、リンカーを通知します。reglist
終了時にスタックに保持されますプロローグ エピローグ レジスタの一覧を復元します。 別の複数のスペースを登録します。parameter
プロシージャのパラメーター。 アセンブラーは、引数参照、スタックの場所への直接参照に変換します。 複数の引数をコンマで区切ります。tag
いずれか修飾型またはVARARG。 VARARGカンマで区切られたリストとして < の引数 > に渡される引数の数が変数をできます。 場合VARARGは、それの最後のパラメーターに適用する必要があります、PROCディレクティブ。 VARARGのみを許可されて、C、SYSCALL、およびSTDCALL言語の種類。 場合tagは省略され、アセンブラーの既定値にWORD、16 ビット セグメントまたはDWORD、32 ビット セグメントで。statements
アセンブリ言語のステートメントとディレクティブ。
解説
[FRAME [:ehandler-address] ] は、ml64.exe でのみ有効で、これにより MASM は、関数の構造化例外処理アンワインド動作として、.pdata に関数テーブル エントリを、.xdata にアンワインド情報を生成します。
FRAME 属性を使用する場合、.ENDPROLOG ディレクティブの前に置く必要があります。
ml64.exe の使い方の詳細については、「x64 用 MASM (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