第三章、汇编3

过程

运行时栈

首先看看运行时栈的布局:
在这里插入图片描述
解释一波:

  • 当函数P调用Q的时候,首先为要为Q准备参数,6个参数的时候可以放在寄存器里,当多于6个参数的时候可以暂存在栈里。这里注意,实际Q的第七个参数是从rsp的位置开始往上加, para7=rsp+8, para8=rsp+16(注意,不管参数数据大小,都是8字节往上加,即使不够空着也不用), 这里的参数构造区就是Q函数的参数位置,图里的参数7是P的参数构造区,这里不要误会。
  • 当执行call的时候,会把pc寄存器中的下一条的指令地址暂存在栈中,也就是上图中的返回地址,而ret就是把栈里值pop出去pc寄存器中。
  • 如果Q中要用一些寄存器,但是这个寄存器被P占用了,这个时候需要把寄存器中的值暂存在被保存的寄存器<这个应该放在P桢中,是P的责任>,但是这里要注意了,图中的被保存寄存器是Q要调用其他函数时,提前把一些寄存器值存好,这个责任是调用者的责任,而不是被调用者的责任。
  • 接下来函数Q中的局部变量有些需要放在栈上,1.放一些寄存器不足时的local数据 2.函数中&运算符的变量,毕竟需要拿到地址,不能放在寄存器 3.数组或者数据结构

相关推荐

  1. 汇编2

    2024-05-25 21:12:12       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-25 21:12:12       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-25 21:12:12       97 阅读
  3. 在Django里面运行非项目文件

    2024-05-25 21:12:12       78 阅读
  4. Python语言-面向对象

    2024-05-25 21:12:12       88 阅读

热门阅读

  1. C++11std::bind的简单使用

    2024-05-25 21:12:12       30 阅读
  2. el-select 组件获取整个对象

    2024-05-25 21:12:12       36 阅读
  3. K8S Secret管理之SealedSecrets

    2024-05-25 21:12:12       30 阅读
  4. c++入门

    c++入门

    2024-05-25 21:12:12      36 阅读
  5. 分布式和集群区别

    2024-05-25 21:12:12       30 阅读
  6. 华为校招机试 - 最久最少使用缓存(20240508)

    2024-05-25 21:12:12       27 阅读
  7. 数据仓库、数据中台、大数据平台之间的关系

    2024-05-25 21:12:12       34 阅读
  8. MYSQL课堂练习

    2024-05-25 21:12:12       36 阅读
  9. 向量数据库的使用

    2024-05-25 21:12:12       33 阅读
  10. day50

    2024-05-25 21:12:12       37 阅读