一个函数的调用过程

1、参数拷贝(参数实例化)。
2、保存当前指令的下一条指令,并跳转到被调函数。
这些操作均在main函数中进行。

1、移动ebp、esp形成新的栈帧结构。
2、压栈(push)形成临时变量并执行相关操作。
3、return一个值。
这些操作在函数中进行。

被调函数完成相关操作后需返回到原函数中执行下一条指令,
1、出栈(pop)。
2、回复main函数的栈帧结构。(pop )
3、返回main函数
这些操作也在函数中进行。

整个过程就三步:
1、根据调用的函数名找到函数入口;
2、在栈中申请调用函数中的参数函数体内定义的变量的内存空间
3、函数执行完后,释放函数在栈中的申请的参数和变量的空间,最后返回值(如果有的话)
函数调用过程和中断处理过程一模一样

总结:每一个函数调用都会分配函数栈,在栈内进行函数执行过程。调用前,先把返回地址压栈,然后把当前函数的esp指针压栈。

你可能感兴趣的:(一个函数的调用过程)