main函数intadd(intx,inty){intz0;zxy;teturn z;}intmain(){inta10intb20intc0;cAdd(a,b)}在执行内存分配的时候内存会先进行一些的操作main也是一个函数在执行的时候会被其他函数给调用这个函数就是 _tmainCRTStartup进入main函数在进行main操作的时候首先会有两个指针来进行维护分别是esp–栈高指针ebp–栈低指针这两个指针指向的部分就是当前操作的部分这就是最开始的main被调用的准备第一条指令是进行压栈将ebp放到esp的上面此时压的就是 _tmainCRTStartup函数的ebp第二条指令是将esp的地址放到ebp里面去此时的ebp不再指向原来的位置而是指向的是esp的位置目前esp和ebp同时指向第三条指令是将esp-0E4h并放到esp里面esp就来到了上面的低地址//--------------------------------------------------------------------------------------------------------------//接下来再将这三条指令进行压栈放到esp上方//----------------------------------------------------------------------------------------------------------------这四条指令表示从最开始的ebp-0E4h到ebp这段区间有39个内容全部为cccccccc//----------------------------------------------------------------------------------------------------------------13句表示将0Ah(10)放进ebp-8这个空间里面14句表示将14h(20)放到ebp-14h这个空间里面15句表示将0放到ebp-20h这个空间里面//---------------------------------------------------------------------------------------------------------------第一句表示将ebp-14h里面的值放到eax(寄存器)里面第二句表示将eax压进去第三句表示将ebp-8里面的值放到ecx里面第四句表示将ecx压进去//--------------------------------------------------------------------------------------------------------------进入函数内部call表示存放下一个地址也就是00C21450方便下次能够精确回来此时进入了add函数重复上面的操作进行压栈和创建局部变量和初始化//----------------------------------------------------------------------------------------------------------------第4句将0放到ebp-8的空间里第6句将ebp8的值放到eax第7句将ebp0ch的值放到eax里面第8句将eax的值放到ebp-8里面//-----------------------------------------------------------------------------------------------------------出函数接下就执行出栈先将edi esi ebx给出栈再将esp移动到ebp的位置再将ebp给弹出此时的ebp指向的是main的ebp所以一旦弹出则ebp就回到_tmainCRTStartup函数里面esp接着往下走一步最后一条指令表示回到抓函数并弹出call指向的地址//----------------------------------------------------------------------------------------------------------回到main函数里面将esp8相当于又弹出b和a这两个数表示将eax(寄存器)里面的值30)放到ebp-20h这个空间里面去也就是c那么也就表示函数的栈帧和销毁就已经完成了