伪指令 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位变量,在第一个可用的双字对齐边界地址处为其分配空间。。


0 0
原创粉丝点击