函数的调用
函数在调用的过程中分为三步,第一步是函数的调用,第二步是执行函u数体,第三步是返回。
第一步 函 数的调用
1.将函数调用语句的下一条语句的地址保存到栈中,以便函数调用完返回;
2.将实参从后往前依次入栈;
3.跳转到函数体处。
第二部 函数体执行
1.如果函数体中定义了变量,将变量入栈;
2.将每一个形参用实参的值取代,执行函数体的功能;
3.将函数体中的变量和保存到栈中的实参值,依次从栈中取出,释放栈空间。
第三部 返回
返回的过程是从栈中取出刚开始调用函数时压入的地址,跳转到函数的下一条语句。
栈帧的创建和销毁
从main函数的地方开始,要展开main函数的调用就得为main函数创建栈帧,ebp存放了指向函数栈帧栈底的地址,esp存放了指向函数栈帧栈顶的地址,当main函数调用其他函数时先给函数创建栈帧,当调用完成次函数返回main函数时,被调用的函数的栈帧就会被销毁。