函数栈帧的创建与销毁

本文详细解析函数栈帧的创建、执行和销毁过程,通过寄存器、汇编指令的介绍,解释了局部变量的创建、未初始化的随机值、参数传递方式、形参与实参的关系以及函数调用与返回的原理。通过实例代码展示了压栈和出栈的操作,帮助读者深入理解C语言函数调用的底层机制。
摘要由CSDN通过智能技术生成

目录

前言介绍

1.寄存器

2.汇编指令介绍

3.压栈.出栈

函数栈帧的创建与销毁过程

 1.为main函数创建栈帧

 2.执行main函数内部代码

3.为add函数创建栈帧

4.执行add函数内部代码 

5.add函数栈帧出栈

6.返回main函数栈帧


前言介绍

我们学习语法学习编程逻辑都是基于封装好的知识上来进行学习,知其然而不知其所以然,如果想要更好的掌握理解所学知识,我们对知识应该有一个更深层次理解,了解过基本语法的伙伴应该都有过下面这些疑问,这些问题怎么去理解,这里就需要我们去了解函数栈帧的创建与销毁;

1.局部变量是怎么创建的?

2.为什么局部变量不初始化的值是随机值?

3.函数是怎么传参的?传参的顺序是怎么样的?

4.形参和实参是什么关系?

5.函数调用是怎么做的?

6.函数调用结束后怎么返回的?

如果上面问题你都能了解,在此让我叫你一声大佬,不了解的也没关系,下面我会为大家详细的来讲解整个函数栈帧的创建与销毁;

注意:这里我使用vs2019和大家展示,每个编译器上的展示可能略有差异,但是大体逻辑是一样的,版本越低的编译器越好观察,编译器越高级越不容易观看整个创建与销毁的过程,因为它的封装过程会复杂一些;

1.寄存器

理解整个过程我们还需要知道一个知识点----寄存器

寄存器有很多种,例如:eax  ebx  ecx  edx  ebp  esp.....................

和现在内容有关的主要就是ebp esp,这两个寄存器中存放的是地址,这两个地址是用来维护函数栈帧的;

2.汇编指令介绍

  • push----PUSH 指令首先减少 ESP 的值,再将源操作数复制到堆栈。操作数是 16 位的,则 ESP 减 2,操作数是 32 位的,则 ESP 减 4(将对象进行压栈);
  • mov----MOV 指令将源操作数复制到目的操作数;
  • sub----两个操作数的相减,即从A中减去B,其结果放在A中;
  • lea----LEA指令将存储器操作数mem的4位16进制偏移地址送到指定的寄存器;
  • 30
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值