1. 为什么需要bp指针? 因为bp是栈帧的起始地址,函数内的局部栈变量,采用相对bp的内存寻址。不能相对于sp,sp是一直在变的。 2. 函数调用过程? 函数开始,先压栈bp,保存父函数栈底指针bp;再更新bp为sp;再移动sp,分配局部变量内存;再取参数,执行。调用子函数时,压栈参数;调用call压栈pc。子函数重复上述步骤。 其实就是处理好 bp,sp,pc的保存与恢复,bp与sp确定一个函数栈帧。参数传递局部变量分配 这三件事。 参考 《Linux内核 完全注释》第三章C语言程序