ARM 架构中,R13栈指针(SP)是什么?

ARM 架构中,R13栈指针(SP)是什么?

本文来自于我关于 Arm Cortex-M 编程模型的系列文章。欢迎阅读、点评与交流~
1、Arm Cortex-M 处理器的编程模型
2、ARM 架构中,R13栈指针(SP)是什么?

R13 是 ARM 架构中的栈指针寄存器,通常也直接被称为 SP

核心概念

  1. 物理寄存器:在 ARM 中,R13 是16个通用寄存器(R0-R15)中的一个,被专门设计用作栈指针。

  2. 别名 :在大多数 ARM 汇编器和文档中,你更常看到的是它的别名 SP,而不是 R13。

  3. 作用 :SP 指向当前栈的顶部位置,用于:

    • 函数调用时的参数传递和返回地址保存
    • 局部变量的存储
    • 寄存器保存(函数调用前后的现场保护)
    • 中断/异常处理

关键特性

1. 栈增长方向

  • ARM 通常使用满递减栈(Full Descending, FD)
  • 栈向内存地址减小方向增长
  • 入栈时:先减 SP,再存储数据
  • 出栈时:先读取数据,再加 SP

2. 操作示例

assembly 复制代码
PUSH {R0, R1}    ; 等价于 STMDB SP!, {R0, R1}
                 ; 1. SP = SP - 8 (两个寄存器)
                 ; 2. 将 R0, R1 存储到栈中

POP {R0, R1}     ; 等价于 LDMIA SP!, {R0, R1}
                 ; 1. 从栈中读取数据到 R0, R1
                 ; 2. SP = SP + 8

3. 处理器模式下的不同 SP

在某些 ARM 处理器模式中,有多个独立的栈指针

  • SP_usr - 用户模式栈指针
  • SP_svc - 管理模式(用于 SWI、复位等)
  • SP_abt - 中止模式
  • SP_und - 未定义指令模式
  • SP_irq - IRQ 中断模式
  • SP_fiq - FIQ 快速中断模式

这允许不同模式有独立的栈空间,提高系统可靠性。

实际使用注意事项

  1. 对齐要求

    • ARMv7-A/R:SP 必须保持 8 字节对齐
    • ARMv6 及之前:4 字节对齐
    • 某些浮点/NEON 操作需要 16 字节对齐
  2. 初始化

assembly 复制代码
; 系统启动时需要初始化 SP
LDR SP, =0x20008000  ; 设置栈顶地址
  1. 函数调用约定
    • AAPCS(ARM 过程调用标准)规定了 SP 的使用规则
    • 函数必须保持栈平衡
    • SP 在函数入口和出口必须对齐

在 C 语言中的体现

c 复制代码
// 局部变量存储在栈中
void func(void) {
    int x = 10;      // x 存储在栈上,位置由 SP 决定
    char buffer[64]; // buffer 也在栈上
}

总结

R13/SP 是 ARM 架构中管理栈内存的关键寄存器,它:

  • 指向当前栈顶
  • 自动调整以分配/释放栈空间
  • 支持不同处理器模式的独立栈
  • 是函数调用、局部变量和异常处理的基础

理解 SP 对于 ARM 汇编编程、嵌入式系统开发和调试至关重要。

相关推荐
CinzWS2 小时前
A53 FPGA原型验证:从RTL到可运行系统的挑战
arm开发·嵌入式·芯片验证·原型验证·a53
AI服务老曹2 小时前
深度解析:支持 GB28181/RTSP 及异构计算(X86/ARM+GPU/NPU)的 AI 视频管理平台架构方案(附源码交付与 Docker 部署)
arm开发·人工智能·音视频
2302_813806223 小时前
基础环境篇 – 交叉编译环境搭建与NFS服务配置
arm开发
极创信息3 小时前
信创领域五种主流CPU架构(X86 / ARM / RISC-V / MIPS / LoongArch)
java·arm开发·数据库·spring boot·mysql·软件工程·risc-v
AI服务老曹4 小时前
节省95%开发成本:支持X86/ARM与GPU/NPU异构部署的AI视频云网关架构深度解析
arm开发·人工智能·音视频
徐某人..17 小时前
基于i.MX6ULL平台的智能网关系统开发
arm开发·c++·单片机·qt·物联网·学习·arm
2035去旅行18 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
进击的小头21 小时前
20_第20篇:嵌入式外设驱动开发基础:寄存器级开发与库函数开发对比实战
arm开发·驱动开发·单片机
AI服务老曹1 天前
架构实战:如何构建支持X86/ARM及异构GPU/NPU的跨平台企业级AI视频管理系统?
arm开发·人工智能·架构
ai产品老杨1 天前
【架构深研】如何构建兼容X86/ARM与异构算力的AI视频中台?基于GB28181与边缘计算的源码交付实践
arm开发·人工智能·架构