伪指令 LOCAL ENTER LEAVE
来源:互联网 发布:淘宝病假条暗语 编辑:程序博客网 时间:2024/05/17 02:03
伪指令
ENTER
ENTER指令自动为被调用过程创建堆栈框架,为局部变量保留堆栈空间并在堆栈空间上保存EBP
执行动作为:
1.在堆栈上压入ebp
2.把ebp设为堆栈的基指针
3.为局部变量保留空间
格式: ENTER numbytes,nestinglevel
eg:
MySub PROC
enter 8,0
等价于
MySub PROC
push ebp
mov ebp,esp
sub esp,8
LEAVE
LEAVE指令释放一个过程的堆栈框架 与enter执行相反的动作
eg:
MySub PROC
enter 8,0
leave
ret
MySub ENDP
等价于
MySub PROC
push ebp
mov ebp,esp
sub esp,8
mov esp,ebp
pop ebp
ret
MySub ENDP
LOCAL
LOCAL在过程内声明一个或多个命名局部变量,并同时赋予变量相应的尺寸属性
语句必须紧接在PROC伪指令所在行后
格式: LOCAL 变量列表
LOCAL 标号:类型
Example PROC
LOCAL temp:DWORD
mov eax,temp
ret
Example ENDP
masm生成的代码如下:
push ebp
mov ebp,esp
add esp,0FFFFFFFFCh ;esp-4
mov eax,[ebp-4]
leave
ret
对于非双字局部变量,LOCAL的分配行为也是非常有趣的
对于8位变量,在第一个可用的字节处为其分配空间,对于16位变量,在第一个可用的偶数地址为其分配空间
对于32位变量,在第一个可用的双字对齐边界地址处为其分配空间。。
ENTER
ENTER指令自动为被调用过程创建堆栈框架,为局部变量保留堆栈空间并在堆栈空间上保存EBP
执行动作为:
1.在堆栈上压入ebp
2.把ebp设为堆栈的基指针
3.为局部变量保留空间
格式: ENTER numbytes,nestinglevel
eg:
MySub PROC
enter 8,0
等价于
MySub PROC
push ebp
mov ebp,esp
sub esp,8
LEAVE
LEAVE指令释放一个过程的堆栈框架 与enter执行相反的动作
eg:
MySub PROC
enter 8,0
leave
ret
MySub ENDP
等价于
MySub PROC
push ebp
mov ebp,esp
sub esp,8
mov esp,ebp
pop ebp
ret
MySub ENDP
LOCAL
LOCAL在过程内声明一个或多个命名局部变量,并同时赋予变量相应的尺寸属性
语句必须紧接在PROC伪指令所在行后
格式: LOCAL 变量列表
LOCAL 标号:类型
Example PROC
LOCAL temp:DWORD
mov eax,temp
ret
Example ENDP
masm生成的代码如下:
push ebp
mov ebp,esp
add esp,0FFFFFFFFCh ;esp-4
mov eax,[ebp-4]
leave
ret
对于非双字局部变量,LOCAL的分配行为也是非常有趣的
对于8位变量,在第一个可用的字节处为其分配空间,对于16位变量,在第一个可用的偶数地址为其分配空间
对于32位变量,在第一个可用的双字对齐边界地址处为其分配空间。。
0 0
- 伪指令 LOCAL ENTER LEAVE
- ENTER指令和LEAVE指令小结
- Whats Enter指令,Whats Leave指令
- 汇编中Enter和Leave指令
- 汇编中Enter和Leave指令(转)
- 汇编中Enter和Leave指令
- 汇编中Enter和Leave指令
- 汇编的Enter, leave, return 指令
- 汇编中Enter和Leave指令
- 汇编中Enter和Leave指令
- AT&T汇编指令enter、leave、call、ret
- AT&T汇编enter、leave、call、ret指令
- ENTER和leave
- ENTER 和 LEAVE
- enter-leave的使用
- Trace Function Enter, Exit and Leave
- CriticalSection的Enter/Leave次数问题
- 汇编关键字enter和leave详解?
- HDU 4819 Mosaic (二维线段树)
- android:layout_weight的用法
- TOS/DSCP 对照表
- 最小值最大化问题(贪心系列)
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- 伪指令 LOCAL ENTER LEAVE
- Android popupwindow弹出对话框
- Ubuntu 10.04安装GCC 4.8.2
- Android4.4 Telephony流程分析——彩信(MMS)发送过程
- 嵌入式 apt-get与yum的区别
- HDU 5086 Revenge of Segment Tree
- 我的迷茫日记!!!(程序员)
- JBoss和Tomcat版本、及Servlet、JSP规范版本对应一览
- C++中基类的析构函数为什么要用virtual虚析构函数