调用fun()的过程大致如下:
main()========
- 参数拷贝(压栈),注意顺序是从右到左,即c-b-a;
- 保存d = fun(a, b, c)的下一条指令,即cout<<d<<endl(实际上是这条语句对应的汇编指令的起始位置);
- 跳转到fun()函数,注意,到目前为止,这些都是在main()中进行的;
fun()=====
- 移动ebp(某时刻的栈顶指针)、esp(栈顶指针)形成新的栈帧结构;
- 压栈(push)形成临时变量并执行相关操作;
- return一个值;
- 出栈(pop);
- 恢复main函数的栈帧结构;
- 返回main函数;
main()========
- 继续执行main()函数的操作。