引文
在日常学习c语言的过程中,你可能有许许多多的疑问:
- 局部变量是怎么创建的
- 为什么局部变量的值不做初始化就是随机值
- 函数是怎么传参的?传参的顺序是怎么样的?
- 形参和实参是什么关系?
- 函数调用是怎么做的?
- 函数调用结束后是怎样返回的?
要想了解其中的原因,我们就不可避免去研究c语言中更深层次的原理--汇编
为了清晰的入手深层原理,我们用加法函数做一个实验
目录:
1.栈帧的管理工具——寄存器
2.数据存储——内存知识
3.简易函数——加法函数
4.进入——反汇编
5.调用——main函数
6.结果传回——返回值
1.寄存器
esp |
栈指针寄存器:该指针指向栈帧的栈顶(栈顶指针) |
---|---|
ebp |
栈指针寄存器:该指针指向栈帧的底部(栈顶指针) |
eax |
累加器 (算数运算) |
2.内存知识
3.加法函数
4.进入反汇编
调试过程中右击鼠标——反汇编
调试过程中右击鼠标——不勾选符号名
此时,符号名会转换为地址
注:
mov :数据传送指令
sub:减法指令
push:压栈操作
pop:弹出操作的指令
call:保存当前指令的下一条指令并跳转到目标函数
大致框架:
5.main函数的调用
6.结果传回