当前位置: 首页 > news >正文

【汇编】关于函数调用过程的若干问题

1. 为什么需要bp指针?

因为bp是栈帧的起始地址,函数内的局部栈变量,采用相对bp的内存寻址。不能相对于sp,sp是一直在变的。

2. 函数调用过程?

  • 函数开始,先压栈bp,保存父函数栈底指针bp;再更新bp为sp;再移动sp,分配局部变量内存;再取参数,执行。
  • 调用子函数时,压栈参数;调用call压栈pc。
  • 子函数重复上述步骤。

其实就是处理好

  • bp,sp,pc的保存与恢复,bp与sp确定一个函数栈帧。
  • 参数传递
  • 局部变量分配

这三件事。


参考
  • 《Linux内核 完全注释》第三章C语言程序
http://www.lryc.cn/news/511268.html

相关文章:

  • 针对Kali 系统进行分区设置
  • C语言简单测试总结
  • Android OpenGl(二) Shader
  • DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(1)
  • 【已解决】“Content-Security-Policy”头缺失
  • win系统B站播放8k视频启用HEVC编码
  • 快速理解24种设计模式
  • 为什么深度学习和神经网络要使用 GPU?
  • Yocto 项目中的交叉编译:原理与实例
  • Python入门:7.Pythond的内置容器
  • sqlserver镜像设置
  • Pandas04
  • 农历节日倒计时:基于Python的公历与农历日期转换及节日查询小程序(升级版)
  • c语言中void关键字的含义和用法
  • 安卓音频之dumpsys audio
  • 玩客云v1.0 刷机时无法识别USB
  • 影刀进阶指令 | Kimi (对标ChatGPT)
  • 前端项目 node_modules依赖报错解决记录
  • 数据科学团队管理
  • 一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
  • 攻防世界web第二题unseping
  • 动手学深度学习-深度学习计算-3延后初始化
  • Linux | 零基础Ubuntu搭建JDK
  • Android `android.graphics` 包深度解析:架构与设计模式
  • WPF使用OpenCvSharp4
  • 你不需要对其他成年人的情绪负责
  • 25秋招面试总结
  • 高斯核函数(深入浅出)
  • 支付宝百宝箱 工具,快速上手制作一个agent
  • 六十:HTTP/2与gRPC框架