第一问,fp用于保存栈顶地址,这是正确的说法。在进入一个函数时,有这么一句,mov x29, sp,把sp的值放入fp中,而sp此时正好是当前栈顶。
zhiyaluo 建议不再用栈顶和栈底的术语,就用栈指针和帧指针的术语。在函数调用栈中,调用一个函数A需要先建立自己的帧;函数A返回前需要先弹出自己的帧。需要明确的就只是:函数A的帧指针的值就是A被调用时的栈指针的值,通过mov x29,sp建立,在这之前需要保存现场:push{x29,lr}。返回前恢复调用者的栈指针mov sp,x29,并恢复调用者现场 pop{x29,lr}
zhiyaluo 或者说FP用于保存上层调用函数的栈地址,用于下层函数返回时恢复栈地址。
第二问,虽然x86应用广,但同时x86的技术历史包袱也比较大。aarch64架构相对来说较为清晰,现代,和谐。 所以把aarch64做重点讲挺好的。