プロシージャ内のローカル変数を定義します。PROC 文の直後に記述する必要があります。この PROC 文は、マクロ内の LOCAL 文とは異なります。
構文 LOCAL name [num]][:type],... 例 LOCAL V1:WORD, V2:DWORD, V3[128]:BYTE
type 型の変数の領域をスタック上に確保し、name で参照できるようにします。type を省略すると、16 ビットモードの場合は WORD、32 ビットモードの場合は DWORD と見なされます。[ ] で囲んで数値を指定すると、その個数分の領域が確保されます。
PROC 文の引数と同様、宣言したラベルへの参照は、 BP(EBP)レジスタ相対アドレス参照に置き換えられます。そのため、args を使用するプロシージャ内では、 BP(EBP)レジスタの値を適切に維持する必要があります。また、args で定義したラベルは、 BP(EBP)レジスタ相対アドレス参照が有効な文脈でのみ使用できます。
例
; ソースコード func proc arg1:word, arg2:word local v1:word,v2:dword,v3[3]:byte mov [v1],1 mov word ptr [v2],2 mov [v3],3 mov [arg1],4 mov [arg2],5 ret func endp ; 生成コード(アセンブルリスト) func PROC NEAR push bp ;-0000 55 mov bp,sp ;-0001 8B EC add sp,-0Ah ;-0003 83 C4 F6 mov WORD PTR [bp-2h],1h ; 0006 C7 46 FE 01 00 (v1) mov WORD PTR [bp-6h],2h ; 000B C7 46 FA 02 00 (v2) mov BYTE PTR [bp-0Ah],3h ; 0010 C6 46 F6 03 (v3) mov WORD PTR [bp+4h],4h ; 0014 C7 46 04 04 00 (arg1) mov WORD PTR [bp+6h],5h ; 0019 C7 46 06 05 00 (arg2) mov sp,bp ;-001E 8B E5 pop bp ;-0020 5D retn ; 0021 C3 func ENDP