zoukankan      html  css  js  c++  java
  • 栈-函数调用

    编译以下程序,分析此程序以得出栈的精髓:

    1、主函数被上层调用者调用后,执行PUSH EBP,ESP-4(因为EBP入栈),EBP值没有改变,值得注意的是刚开始分配站的时候,第一个入栈的是return,主函数的返回地址,然后是EBP

     2、然后是MOV EBP,ESP,将ESP的值赋给EBP,该语句未执行时,EBP仍为上层调用者的栈的栈底指针,执行该语句后,EBP变为新栈的栈底指针(先将其入栈,是为了返回上层时,栈的状态也会随之返回,函数调用结束,函数的栈即消失)

    3、然后就是一些函数内部的数据入栈出栈等操作

    4、函数即将结束时,执行MOV ESP,EBP操作,清空该栈,回到第二步的状态2

    5、上步结束后,执行pop ebp操作,此时ebp指向上层调用者的栈底

     

    6、最后一步为return,返回函数调用的地址,函数调用和函数返回的时候会调用栈顶指针ESP

  • 相关阅读:
    Mysql
    Java-多线程
    Java-Spring事务
    上传图片的工具类
    Githup随笔
    JsonArray
    Ajax
    maven的三大生命周期
    Apache与Tomcat
    java json字符串转JSONObject和JSONArray以及取值的实例
  • 原文地址:https://www.cnblogs.com/dx-yll/p/11734971.html
Copyright © 2011-2022 走看看