最近看汇编语言,开头全是 push ebp ; mov ebp, esp
首先看两个寄存器
ESP:extended stack pointer, 扩展栈指针寄存器,是指针寄存器, 用于存放函数栈顶指针。(我觉得)esp始终指向栈顶。
EBP:extended base pointer , 扩展基址指针寄存器,也叫帧指针寄存器,用于存放函数栈底指针。
栈指针与帧指针标识出了当前活动记录的位置。
在x86里面,reg-reg(从寄存器到寄存器)的移动是可以的,但不可以mem-mem(从内存直接到内存)。
然后解释一下这两句是什么意思
push ebp是把ebp放到stack(栈)里。这步之后,esp的地址应该-4。理由是esp始终指向栈顶,ebp把它的东西放到栈里之后,栈里多的东西占了4个地址,而且栈向低地址增长的,所以地址减4。
mov ebp,esp是把esp里面的东西放到ebp里。这一步做完之后,ebp里面的东西就更新了。
多说一句,pop ebp的意思是:把栈里弹出来的值赋给ebp。(我曾经以为是把ebp从栈里弹出来...)