代码

点击查看代码
#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函数的栈底指针和栈顶指针

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

最新文章

  1. [转]struts2处理.do后缀的请求
  2. java方法与构造
  3. 浅析word-break work-wrap区别
  4. CSS应用心得
  5. ckeditor使用
  6. 使用SqlBulkCopy, 插入整个DataTable中的所有数据到指定数据库中
  7. Linux卸载系统自带的JDK
  8. 下载的时候如果文件名是中文就变成zip.zip
  9. .NET中开源CMS目录
  10. (转)《深入理解java虚拟机》学习笔记3——垃圾回收算法
  11. poj 1458 Common Subsequence(区间dp)
  12. 六星经典CSAPP-笔记(3)程序的机器级表示
  13. html2canvas 识别 svg 解决方案
  14. Spring拓展接口之BeanFactoryPostProcessor,占位符与敏感信息解密原理
  15. script 修改 plist遇到的问题
  16. vue学习-自动行合并的table
  17. River Problem HDU - 3947(公式建边)
  18. [转] php die()与exit()的区别实例详解
  19. Day6------------磁盘用满的两种情况
  20. Elasticsearch 开启

热门文章

  1. JavaScript 异步编程(一):认识异步编程
  2. HTML(下)
  3. day31-线程基础01
  4. SpringBoot多重属性文件配置方案笔记
  5. 前端必读:如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件
  6. 【项目实战】pytorch实现逻辑斯蒂回归
  7. kubeadm init 命令执行流程
  8. 常用的清理 Kubernetes 集群资源命令
  9. 第一章:模型层 - 10:不返回QuerySets的API
  10. Kibana插件