汇编语言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 的堆栈帧示意图如下所示:
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算