プロシージャ内のローカル変数を定義します。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