cpu

2020-07-12  本文已影响0人  南苑bert

cpu的函数调用

cpu执行过程, 比如我们一个最简单的一个说法,打开一个QQ或者微信,当我点击这个应用的时候,cpu会通知磁盘让他把指令,载入内存中,这个内存的所占用的地方是操作系统分配的.

寄存器

Cpu内部临时的数据存储空间

怎么让一个应用运行起来?(指令操作)

如果遇到写入内存怎么办?

寄存器ebp的值压到栈里面

但是我们每一个函数调用都创建一个

什么是帧?

帧就是我们内存空间一段连续的空间

如: xa-s2F1(函数帧1), xa-s2F2(函数帧2),, xa-s2F3(函数帧2),, xa-s2F4(函数帧4)

还有帧在内存排序是有规律的,他们是排到序,地址从大到小排

什么是栈?

栈就像一条管道,用来装的,但是有个规矩就是,从上往下生长,有点想mq(消息队列),那个先进先后出

image.png
什么是ebp?

edp是一个特殊的寄存器,会一直指向当前函数在一个栈的开始位置(地址),刚刚我们说的,栈是一连续,就像我们数组一样一直key等于0.

当然特殊我们还有一个特殊的寄存器,叫esp

esp的作用,他会随着我们cpu运行指令的时候,会指向函数帧的最后一个地址

在说一下ebp和esp的关系吧,

ebp就像一个数组的开头,esp就像一个数组的结尾,很显然我们中间有个区间,这个区间主要用来运算

如:

压值到栈前:

image.png

压值到栈后:


image.png

注: 我们每次都是操作都是4个字节,原来esp的地方走上804,现在变成800

内存有一条这样的指令,把esp的值减去24

800-24 = 776 单位(esp)

image.png

在这里我们调用了add这个函数,现在需要做的就是,把add这个函数返回值的地址压到栈里面去.

image.png

解释:

  1. 每次操作4个字节所有每次减4
  2. 这个区间在运算
  3. 100,就是我们add函数的return值的地址
  4. esp会指向722,esp会赋给ebp

把esp 指向的数据弹出的ebx寄存器

把esp 指向的数据弹出到ebp寄存器

(1)把参数和返回地址准备好,

(2)然后大家都遵循约定, 每次新函数都要建立新的函数帧:

"把寄存器ebp的值压到栈里去“

"把esp的值赋给ebp"

(3) 函数调用完了, 重置 ebp 和esp ,让他们重新指向调用着的栈帧。

学习总结:码农翻身

上一篇下一篇

猜你喜欢

热点阅读