汇编语言LOCAL伪指令:声明一个或多个变量名
不难想象,Microsoft 创建 LOCAL 伪指令是作为 ENTER 指令的高级替补。LOCAL 声明一个或多个变量名,并定义其大小属性。(另一方面,ENTER 则只为局部变量保留一块未命名的堆栈空间。)如果要使用 LOCAL 伪指令,它必须紧跟在 PROC 伪指令的后面。
其语法如下所示:
【示例】MySub 过程包含一个局部变量 var1,其类型为 BYTE:
其语法如下所示:
LOCAL varlist
varlist 是变量定义列表,用逗号分隔表项,可选为跨越多行。每个变量定义采用如下格式:label:type
其中,标号可以为任意有效标识符,类型既可以是标准类型(WORD、DWORD 等),也可以是用户定义类型。【示例】MySub 过程包含一个局部变量 var1,其类型为 BYTE:
MySub PROC
LOCAL var1:BYTE
BubbleSort PROC
LOCAL temp:DWORD, SwapFlag:BYTE
Merge PROC
LOCAL pArray:PTR WORD
LOCAL TempArray[10]:DWORD
MASM 代码生成
使用 LOCAL 伪指令时,查看 MASM 生成代码是有好处的。下面的过程 Example1 有一个双字局部变量:Example1 PROC LOCAL temp:DWORD mov eax,temp ret Example1 ENDPMASM 为 Example1 生成如下代码,展示了 ESP 怎样减去 4,以便为双字变量预留空间:
push ebp mov ebp, esp add esp, OFFFFFFFCh ;ESP 加 -4 mov eax, [ebp-4] leave retExample1 的堆栈帧示意图如下所示: