代码

点击查看代码
#include <iostream>
using namespace std;
int sum(int a,int b){	
	int temp=0;
	temp=  a +b;
	return temp;	
}
int main(){	
	int a =10;
	int b=20;
	int ret =sum(a,b);
	return 0;
}

以上代码考虑2个问题:
问题1:main函数调用sum,sum执行完成以后,怎么知道回到哪个函数中?
问题2:sum函数执行完后,回到main后,怎么知道从哪一行指令继续执行的?
//------------------------------------------------------------------------------------------------------------------

<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
函数参数压栈
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
函数参数压栈
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
下一条汇编指令地址入栈
<一>从指令角度了解函数堆栈调用过程
//------------------------------------------------------------------------------------------------------------------
main函数栈底指针入栈
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
移动ebp,进入被调函数
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
为sum函数开辟函数栈帧

<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
将返回值放入寄存器
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
回退esp栈指针
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
将ebp指回main函数栈底
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------
取出下一条执行的汇编指令地址并执行
<一>从指令角度了解函数堆栈调用过程

//------------------------------------------------------------------------------------------------------------------

<一>从指令角度了解函数堆栈调用过程

此时 esp ,ebp 又指向了main函数的栈底指针和栈顶指针
//------------------------------------------------------------------------------------------------------------------

<一>从指令角度了解函数堆栈调用过程

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。