• 汇编语言LOCAL伪指令:声明一个或多个变量名

    不难想象,Microsoft 创建 LOCAL 伪指令是作为 ENTER 指令的高级替补。LOCAL 声明一个或多个变量名,并定义其大小属性。(另一方面,ENTER 则只为局部变量保留一块未命名的堆栈空间。)如果要使用 LOCAL 伪指令,它必须紧跟在 PROC 伪指令的后面。

    其语法如下所示:

    LOCAL varlist

    varlist 是变量定义列表,用逗号分隔表项,可选为跨越多行。每个变量定义采用如下格式:

    label:type

    其中,标号可以为任意有效标识符,类型既可以是标准类型(WORD、DWORD 等),也可以是用户定义类型。

    【示例】MySub 过程包含一个局部变量 var1,其类型为 BYTE:

    MySub PROC
    LOCAL var1:BYTE

    BubbleSort 过程包含一个双字局部变量 temp 和一个类型为 BYTE 的 SwapFlag 变量:

    BubbleSort PROC
    LOCAL temp:DWORD, SwapFlag:BYTE

    Merge 过程包含一个类型为 PTR WORD 的局部变量 pArray,它是一个 16 位整数的指针:

    Merge PROC
    LOCAL pArray:PTR WORD

    局部变量 TempArray 是一个数组,包含 10 个双字。请注意用方括号显示数组大小:

    LOCAL TempArray[10]:DWORD

    MASM 代码生成

    使用 LOCAL 伪指令时,查看 MASM 生成代码是有好处的。下面的过程 Example1 有一个双字局部变量:

    Example1 PROC
        LOCAL temp:DWORD
    
        mov eax,temp
        ret
    Example1 ENDP

    MASM 为 Example1 生成如下代码,展示了 ESP 怎样减去 4,以便为双字变量预留空间:

    push ebp
    mov ebp, esp
    add esp, OFFFFFFFCh     ;ESP 加 -4
    mov eax, [ebp-4]
    leave
    ret

    Example1 的堆栈帧示意图如下所示:

更多...

加载中...