cpu

作者: 南苑bert | 来源:发表于2020-07-12 19:03 被阅读0次

    cpu的函数调用

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

    寄存器

    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就像一个数组的结尾,很显然我们中间有个区间,这个区间主要用来运算

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

    • 把esp的值赋给ebp

    如:

    • 把esp的值赋给ebp

    压值到栈前:

    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
    • 寄存器ebp的值压到栈里去
    • 把esp的值赋给ebp
    • 把寄存器ebx的值压入栈

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

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

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

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

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

    "把esp的值赋给ebp"

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

    学习总结:码农翻身

    相关文章

      网友评论

          本文标题:cpu

          本文链接:https://www.haomeiwen.com/subject/rzdncktx.html