1.寄存器:
ebp,esp 这两个寄存器中存放的是地址,这两个地址是用来维护函数的。
2.函数栈帧:
每个函数调用,都要在栈区创建一个空间,这个空间叫做这个函数的函数栈帧。
3.main函数栈帧框架:
main函数也是被其他函数调用的。
4.函数栈帧创建销毁过程:
1.esp指针上移一个地址;
2.ebp代替esp;
3.esp继续上移,开辟main函数的栈帧;
4.在esp上加三个值(push):ebx,esi,edi,同时esp上移;
注:压栈(push):在栈顶加一个元素;
出栈(pop):从栈顶减去一个元素。
5.将main函数栈帧内容初始化;
6.传参,将参数加到栈顶,esp上移(图中没画)
7.将main函数执行到的地址和ebp地址存在栈顶:
8.创建main函数内部函数(例:add),同上(1-5);
8.函数运行,返回结果放到一个寄存器中;
9.将三个值减去;再将esp赋给ebp;再根据存的ebp地址将ebp归位;
10.将参数除去,esp下移:
11.将寄存器中的返回值赋给main中变量;
12.销毁main函数,同上(9,10);