ARM开发中几个常见的寄存器详解
💡
原文中文,约5700字,阅读约需14分钟。
📝
内容提要
本文介绍了ARM的几个特殊寄存器:FP、SP和LR,它们分别用于栈回溯、指向当前栈位置和保存函数返回地址。文章还讨论了与栈帧相关的编译选项和不同处理器架构下SP的作用。
🎯
关键要点
- FP(Frame Pointer)用于指向栈帧顶部,记录栈的起始位置。
- SP(Stack Pointer)指向当前栈的位置,用于栈的存取。
- LR(Link Register)保存函数返回地址,支持程序的调用关系。
- gcc编译器的-fomit-frame-pointer选项可优化栈帧使用,但会影响调试。
- FP的主要作用是栈回溯,帮助找到子程序的调用关系。
- SP在不同处理器架构中有不同的实现,如CortexM3/4的MSP与PSP。
- CortexR5系列支持多种工作模式,每种模式有独立的栈。
- CortexA53的EL1到EL4模式下有不同的SP指针,需注意对齐。
- LR用于保存返回地址,支持程序的跳转和异常处理。
- 程序调用时LR会更新,必要时会将LR保存到栈中以防覆盖。
➡️