当前位置:首页 » 《资源分享》 » 正文

内功心法秘籍之函数栈帧(附图详解)_wzd547191555的博客

27 人参与  2021年10月31日 13:03  分类 : 《资源分享》  评论

点击全文阅读


C语言内功心法秘籍——函数栈帧

  • 前言
    • 准备工作
    • 寄存器
    • __tmainCRTStartup()函数
    • main()函数建立
    • Add()函数建立
    • Add函数的销毁过程
    • main()函数的销毁过程
    • 全图预览
    • 结语言

前言

在我们学习C语言的时候我们是否对自己进行过以下灵魂拷问
1.局部变量到底是如何建立的呢?
2.函数内存又是如何开辟的?
3.函数传参的过程又是怎样完成的呢?

如果你不太了解,那么我只能说:咦咦咦~~~,还不赶快随我修习这篇心法口诀,带你学习C语言的内功秘籍!!!

准备工作

博主:大大怪先森(记得关注哦!)
编程环境:vs2013
代码案例:

#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;
}

简易图解了解让你不会一脸懵逼
在这里插入图片描述
本文汇编基本语句

push:入栈操作
pop:出栈操作
call:call指令
mov:赋值操作
sub:减法操作
lea:下载有效地址(load effective adress)

寄存器

在了解函数的栈帧问题,我们必然不能不先了解一下寄存器到底是个啥和寄存器有哪些?

  1. 寄存器
    中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。** ,(其实这些也不是重点,看不懂也没关系,说实话我作为一名IT小白的我也看不懂,我们只需要知道寄存器是独立于内存之外,集成到CPU上的就行)
  2. 寄存器的分类
    一般寄存器:AX、BX、CX、DX
    AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器
    索引暂存器:SI、DI
    SI:来源索引暂存器,DI:目的索引暂存器
    堆叠、基底暂存器:SP、BP
    SP:堆叠指标暂存器,BP:基底指标暂存器
    esp:寄存器存放当前线程的栈顶指针
    ebp:寄存器存放当前线程的栈底指针
    本篇文章所用到的全部寄存器,如果想要更加的深入了解寄存器,留下你的一键三连,后续会更新哦!你的支持就是我的动力。

__tmainCRTStartup()函数

看到这个函数我们肯定想这是个啥???
Alt
不用担心这只是一个小小的用来调用主函数main()的一个奇葩函数而已,如图:
在这里插入图片描述
看得到这里通过函数的栈区,我们可以发现原来__tmainCRTStartup()函数原来也是别人来调用的呀!果然计算机也会套娃!但是看到这里我只发现我知道原来main函数也是被这个_tmainCRTStartup()所调用,它自己又是被别人调用,那这些又是如何实现的呢?别急往下看!下面两幅图将带你真正理解main()的创建历程!!!
在这里插入图片描述
在这里插入图片描述

main()函数建立

在这里插入图片描述

在这里插入图片描述

Add()函数建立

建立过程:
在这里插入图片描述
在这里插入图片描述

Add函数的销毁过程

销毁过程:
在这里插入图片描述
在这里插入图片描述

main()函数的销毁过程

跟着小编学习了Add函数的销毁过程你是否也能自己做出main()函数的创建过程呢?
赶紧动动自己的小脑筋思考一下吧!!!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全图预览

在这里插入图片描述

结语言

希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!

在这里插入图片描述


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/30312.html

寄存器  函数  过程  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1