小弟我根据只用esp就能保存栈帧结构,为什么一定要用ebp呢

我根据只用esp就能保存栈帧结构,为什么一定要用ebp呢?
C/C++代码通常进入函数的时候会有

push ebp
mov ebp,esp

函数退出的时候

mov esp,ebp
pop ebp
ret

我个人的感觉似乎有esp就够了,函数开始的时候push esp,函数结束的时候pop esp;ret;
这样的话有什么问题呢?

为什么一定要弄个ebp来?
谢谢。

------解决方案--------------------
这是函数局部变量的构造方法。用ebp是为了使用局部变量,因为esp在函数中进行栈操作时是会变的,ebp只是记录了进入函数时栈顶(栈数据为:参数->IP->ebp)位置,当函数有局部变量时,编译器会向下移动esp,为变量预留位置,你在函数中使用局部变量时,编译器会编译成[ebp+XXXX]的形式。若只用esp,当函数内有栈操作时,你怎么去访问局部变量呢?mov esp,ebp;pop ebp;这两条可以用leav代替。
------解决方案--------------------
ESP指向栈顶,EBP指向基址。像楼上所说,ESP加上EBP组合起来能更方便的在会变语言里面使用临时变量。