函数调用堆栈的过程

int sum(int a,int b){
//函数左括号:给当前函数开辟栈帧空间
//函数右括号:归还栈空间,并回到原来调用它的函数
	int temp=0;
	temp = a+b;
	return temp;
}
/*
sum的汇编代码
push ebp;
mov ebp,esp;   将ebp指向esp的位置,并将ebp的原地址保存
sub esp,4Ch;   开辟栈帧空间
mov dword ptr[ebp-4],0;   存temp=0
mov eax,dword ptr[ebp+0Ch];    取b放入eax
add eax,dword ptr[ebp+8];   取a和eax的值相加
mov dword ptr[ebp-4];   将计算结果放入temp
mov eax, dword ptr[ebp-4];   return
mov esp,ebp;   esp回退到ebp,开辟的栈空间归还系统
pop ebp
*/
int main(){
	int a=10;
	int b=20;
	int ret = sum(a,b);
	cout << "ret: " << ret << endl;
	
	return 0;
}
/*
main汇编代码
mov dword ptr[ebp-4], 0Ah;   int占4个字节,将10压入ebp所指向的位置
mov dword ptr[ebp-8], 14h;   int占4个字节,将20压入ebp所指向的位置
mov eax,dword ptr[ebp-8];   将a,b压入栈内
push eax;
mov eax,dword ptr[ebp-4];
push eax;
call sum;   调用sum函数
add esp,8;   保存call的下一行地址
mov dword ptr[ebp-0Ch],eax;   将经过sum函数的计算结果eax返回给ret
*/

在这里插入图片描述


版权声明:本文为qq_43788498原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。