LOCAL (PROC 内)

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

[目次]