函数战争,哦,不不不,是函数栈帧!

编程入门 行业动态 更新时间:2024-10-07 10:17:48

<a href=https://www.elefans.com/category/jswz/34/1771370.html style=函数战争,哦,不不不,是函数栈帧!"/>

函数战争,哦,不不不,是函数栈帧!

初学C语言听到这个四个字时,对,没错,一直以为时函数战争,当时还以为编程界发生了一场什么惊天动地大变革,当真正看到并且重新听到这四个字时才知道,一切都是—-错觉……


要想了解了解函数在程序底部实现过程,得先普及一下栈帧和一些小知识点。
栈,程序运行时系统为该程序分配的内存区;
帧,则是每个函数从该栈获得的空间,是针对函数而言的。因此每个函数都有自己独立的栈帧,栈帧维护着该函数调用的各种信息。
另外再说两个两个寄存器:
ESP:当前栈的栈顶,指向高地址
EBP:当前帧的底部,指向低地址
地址使用规则:先使用高地址再使用低地址,故先进栈的后出栈,后进栈的先出栈
PUSH:压栈操作 POP:出栈操作


## 比较重要的例子 ##

    lea     edi,[ebp-0C0h] mov     ecx,30h mov     eax,CCCCCCCCh rep stos dword ptr es:[edi]

rep指令的目的是重复其上面的指令。
exc的值是重复的次数.
stos(store into String)指令的作用是将eax中的值拷贝到ES:EDI指向的地址。
dword ptr:在没有寄存器名存在的情况下,用操作符“X ptr”指明内存单元的长度,X在汇编指令中可以为word 或者byte。dword是指一次拷贝双字(四字节)的数据到目的地址, ptr即pointer (既指针)得缩写 (ptr和 dword一般一起使用定义传输类型)


下面就用图来解释下,先友情提醒,图,真的画的不好看,因为是第一次用电脑画图…../手动笑哭

——————————–我是分割线—————————————


最后的啰嗦

这个博客本应在一礼拜前就写出来,奈何事情比较多,自我学习较慢,导致拖更。额,说歪了,写小说的名词都涌进来了(额,我不写小说,不用留言问我写的什么小说),其实说到底是自己懒了。因为时间就像那个啥,哈,挤一挤还是有的…
这篇博客自我感觉写的比较简单。如果哪里写错了,希望各位看官不吝自己的想法,能私信或者评论回复,指出我的错误。再说下,我是很建议评论提出问题的。不论是否认识,我想博主都蛮希望大家能提出自己的见解的。嗯,话太多了,就这样吧。

更多推荐

函数战争,哦,不不不,是函数栈帧!

本文发布于:2024-02-28 09:48:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769413.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   不不   战争

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!