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

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

1. 为什么需要bp指针?

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

2. 函数调用过程?

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

其实就是处理好

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

这三件事。


参考
  • 《Linux内核 完全注释》第三章C语言程序

http://www.mrgr.cn/news/81449.html

相关文章:

  • EMS(energy managment system)从0到1
  • C/C++应该如何使用NI-488.2库?
  • Centos下的OpenSSH服务器和客户端
  • 【Docker】部署MySQL容器
  • HNUST-数据分析技术课堂实验
  • Python——day09
  • ubuntu22.04上安装win10虚拟机,并采用noVNC+frp,让远程通过web访问桌面
  • pip离线批量安装时报错No matching distribution found for【解决方案】
  • 【ES6复习笔记】箭头函数(5)
  • vulnhub靶场(Os-hacknos-3)
  • 【ES6复习笔记】模板字符串(3)
  • 【C++】设计模式
  • FreeSql
  • 【Rust自学】7.1. Package、Crate和定义Module
  • 【ES6复习笔记】函数参数的默认值(6)
  • 【Rust自学】6.4. 简单的控制流-if let
  • 【ES6复习笔记】let 和 const 命令(1)
  • 【ES6复习笔记】Promise对象详解(12)
  • 重温设计模式--5、职责链模式
  • 实现 QTreeWidget 中子节点勾选状态的递归更新功能只影响跟节点的状态父节点状态不受影响
  • 单片机:实现可调时钟(附带源码)
  • MarkItDown的使用(将Word、Excel、PDF等转换为Markdown格式)
  • Python|Pyppeteer实现自动化获取reCaptcha验证码图片以及提示词(29)
  • echarts地图可视化展示
  • RSICV国产芯片之CHV208
  • Datawhale-AI活动2024.12.24