笔者今天来聊聊对于ARM几个特殊寄存器的理解,FP、SP和LR。
ARM特殊寄存器的理解====FP、SP和LR
1、介绍
- FP:栈底指针,指向一个栈帧的底部,当函数发生跳转时,会记录当时的栈的起始位置。
- SP:栈指针(也称为栈顶指针),指向栈当前的位置,
- LR:链接寄存器,保存函数返回的地址。
栈通常情况是向下生长的,即逐渐减小,所以栈顶反而较小,栈底反而大。
关于gcc就有一个关于stack frame的优化选项,加上该选项则忽略掉FP栈底指针,(记得高版本默认是不加FP的,gcc4.8以上吧(待确认))
- -fomit-frame-pointer
Don’t keep the frame pointer in a register for functions that don’t need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions. It also