打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上)

这篇具有很好参考价值的文章主要介绍了打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

🌈个人主页: Aileen_0v0
🔥系列专栏:C语言学习
💫个人格言:"没有罗马,那就自己创造罗马~"

待解决疑惑:

局部变量是怎么创建的?
为什么局部变量的值是随机值?
函数是怎么传参的?传参的顺序是怎样的?
形参和实参是什么关系?
函数调用是怎么做的?
函数调用是结束后怎么返回的?

1.寄存器 

寄存器是计算机中的一种内部存储器件。它是位于CPU内部的一组存储单元,用于暂时存储指令执行过程中的数据,如算术运算的操作数、地址等。寄存器的容量很小,通常只有几十个字节,但它的数据传输速度非常快,因此能够快速地完成指令的执行。寄存器的种类有很多,如通用寄存器、指令指针寄存器、程序计数器寄存器等。不同的指令需要使用不同类型的寄存器,这样可以提高计算机的运行效率。

C语言的寄存器包括:eax , ebx , ecx , edx , ebp , esp

函数栈帧

ebp ,esp 这两个寄存器中存放的是地址,这两个地址是用来维护函数栈帧的.

每一个函数调用,都要在栈区创建一个空间.

调用哪个函数,ebp和esp就维护哪个函数

演示代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int Add(int x, int y)
{
	int z = 0;
	z = x + y;
	return z;
}

int main()
{
	int a = 10;
	int b = 20;
	int c = 0;

	c = Add(a, b);

	printf("%d\n", c);

	return 0;
}

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

学习基础

在学习这个执行过程之前,我们需要找到反汇编 ,我们需要通过打断点运行并调试代码后在调试处,点击窗口然后就能够找到反汇编,此外我们还可以通过调试的监视窗口监视数据变化过程.

若对调试步骤有疑惑可以点击👉🔗:

 学习开始

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

首先,为main函数先开辟栈帧空间

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

根据逐步运行结果可以发现esp地址减小了,说明ebp被压入栈内,esp上移

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

move是 将esp的值给ebp

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

给esp的地址减0E4h

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

将ebx压入栈顶,esp上移

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

将esi压入栈顶,esp上移

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

将edi压入栈顶,esp上移

动态理解 

 简化版过程动图:打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发

打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上),C语言学习,学习,c语言,开发语言,前端,算法,c#,个人开发文章来源地址https://www.toymoban.com/news/detail-744910.html

到了这里,关于打通你学习C语言的任督二脉-函数栈帧的创建和销毁(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言:函数栈帧

    寄存器: eax ebx ecx edx ebp esp 必须理解这两个寄存器(寄存器是独立于内存的) 这两个寄存器存放的是地址,用来维护函数栈帧(正在调用哪个函数,两个寄存器就维护哪个函数的栈帧) 每一个函数都要创建一个空间(栈区创建,栈区的使用是先使用高地址,后使用低地址)

    2024年02月07日
    浏览(29)
  • 【C语言】函数栈帧的创建与销毁

    今天我们要学习的是函数栈帧的创建与销毁,学完这部分内容,我们可以解决下面的几个问题: 局部变量是怎么创建的? 为什么局部变量的值是随机值? 函数是怎么传参的?传参顺序是怎样的? 形参和实参是什么关系? 函数调用是怎么做的? 函数调用是怎么做的? 函数调

    2024年02月09日
    浏览(34)
  • 【C语言】函数栈帧的创建和销毁

    👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍 在学习C语言的时候,我们可能有很多困惑。比如: 局部变量

    2024年02月13日
    浏览(35)
  • c语言(函数栈帧的创建和销毁)

    前沿:         可能很多人也是第一次听说函数栈帧这个词,想问什么是函数栈帧,理解函数栈帧有什么作用,函数栈帧的创建销毁是什么呢?这章节我们就来了解一下c语言中函数栈帧的创建和销毁。 思维导图: 目录   一、什么是函数栈帧  1.1   函数栈帧: 1.2  栈:  

    2024年02月07日
    浏览(34)
  • 【C语言】函数栈帧的创建和毁销

    大家好,我是深鱼~ 目录 一、寄存器 二、栈区  三、函数栈帧的创建 1.为main函数开辟栈帧  2.在main函数中创建变量 3.调用Add函数前的准备  4.为Add函数开辟栈帧  5.在Add函数中创建变量并运算 四、函数栈帧的销毁 6.Add函数栈帧的销毁 7.返回main函数栈帧 【前言】 前期学习的时

    2024年02月14日
    浏览(31)
  • C语言——详解函数栈帧的创建和销毁

    为了深入学习C语言,也为了方便理解,我学习了函数栈帧。函数栈帧的创建和销毁能够让我更加深刻的了解编程逻辑和语法。我们学习语法和编程逻辑都是基于封装好的知识上得。因此,我们有必要对函数栈帧的创建和销毁进行学习。本篇博客将用来介绍函数栈帧的创建和销

    2024年02月12日
    浏览(37)
  • 函数栈帧的创建和毁销【C语言版】

    大家好,我是深鱼~ 目录 一、寄存器 二、栈区  三、函数栈帧的创建 1.为main函数开辟栈帧  2.在main函数中创建变量 3.调用Add函数前的准备  4.为Add函数开辟栈帧  5.在Add函数中创建变量并运算 四、函数栈帧的销毁 6.Add函数栈帧的销毁 7.返回main函数栈帧 【前言】 前期学习的时

    2024年02月15日
    浏览(38)
  • C语言-------函数栈帧的创建和销毁------剖析描骨

    🎂        ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂    🎂      作者介绍:                              🎂🎂        🎂 🎉🎉🎉🎉🎉🎉🎉              🎂           🎂作者id:老秦包你会,         🎂 简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

    2024年02月14日
    浏览(33)
  • C语言之反汇编查看函数栈帧的创建与销毁

    函数栈帧是用于在计算机程序中实现函数调用的一种数据结构。在函数调用过程中,每个函数都需要在内存中创建一个栈帧,用于存储局部变量、返回地址和参数等。 具体来说,函数栈帧通常包含以下部分: 局部变量表:存储函数的局部变量,包括基本数据类型(如整数、

    2024年01月23日
    浏览(37)
  • 【C语言__函数栈帧的创建和销毁__复习篇9】

    目录 前言 一、知识补充 二、分析创建和销毁的过程 三、前言问题回答 本篇主要讨论以下问题: 1. 编译器什么时候为局部变量分配的空间 2. 为什么局部变量的值是随机的 3. 函数是怎么传参的,传参的顺序是怎样的 4. 形参和实参是什么关系 5. 函数调用是怎么做的 6. 函数调

    2024年04月25日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包