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保存到栈中以防覆盖。
➡️

继续阅读