汇编心得——函数调用

 

     最近在看王爽的《汇编基础》。通过阅读函数调用那一章,同时结合debug研究C的代码,明白了函数调用时的一些动作。把我的心得写在这里请大家指正。

     程序采用调用者压栈时,一个程序进入后第一件事是将bp寄存器压栈,然后将sp赋给bp,然后sp -=40h。同样函数退出的时候,最后也会反过来执行这套组合。这样做可以一举两得,通过bp我们可以知道调用者的sp,从而获得传入参数地址。而sp自 减40h则是为了在栈空间给这个函数分配新的一段栈内存,以免和调用者的栈内存太近,容易异常。注意,如果函数声明了函数内部的变量,sp则要自减 40h+变量长度。

     接下来函数会将调用者的三个偏移地址寄存器bx,si,di压栈,函数就可以使用这三个寄存器了。同样在函数退出的时候需要出栈。

     然后函数会将bp到sp之间内存赋值为0CCCCCCCCH。

     如果这个函数需要调用另外一个子函数,那么它需要先将参数按照从左到右的顺序挨个赋到ax(或别的寄存器)中并将ax压栈。然后调用子函数,子函数退出后将参数出栈——一般直接sp+参数长度就表示出栈了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值