伪指令 LOCAL ENTER LEAVE

伪指令


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值