80x86汇编语言用栈传递参数的子程序的一般结构

大概分为3个结构,如下图所示。

用栈传递参数的主要思路就是,利用ebp在栈中建立一个参考点,以实现方便地对参数和局部变量进行的存取,同时还不占用寄存器资源。

有几个需要注意的点:

1、pushadpopad)指令可以实现一条指令入(出)栈所有寄存器,非常方便。

但是,如果需要使用寄存器来返回结果,就不可以使用这个语句了。因为,popad时会将想要传出的返回值覆盖。

2、参数越先入栈的,引用时加的const就越大

3、被调用者(子程序)可以使用ret  n指令返回调用者(主程序)并将esp指针加n,以释放参数占用的空间。

除此之外,也可以仅使用ret指令,返回主程序之后,再通过add  esp, n来使esp指针加n。这种做法也有好处,那就是子程序可以接收任意数量的参数,参数数量由主程序控制;如果是第一种方法的话,参数的字节数就只能是n。

但是,如果需要在调用前后保留标志寄存器的值,则应使用第一种方法,因为add指令会改变标志寄存器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值