当前位置: 首页 > news >正文

备份寄存器

一、什么是ARM备份寄存器

ARM 备份寄存器(Banked Registers)是按处理器模式独立映射的物理寄存器,核心作用是:模式切换时自动隔离寄存器现场,避免数据冲突、加速异常/中断处理。

二、范围与分组(ARMv7-A/R)

通用寄存器里,R8~R14 为备份寄存器,分两组:

- R8~R12:每组对应 2套物理寄存器

- 非FIQ模式:共用 R8~R12

- FIQ(快速中断)模式:专用 R8_fiq~R12_fiq

- 好处:FIQ 处理时不用保存/恢复现场,中断极快

- R13(SP,栈指针)、R14(LR,链接寄存器):每组对应 6套物理寄存器

- Usr/Sys 共用一套

- SVC/IRQ/FIQ/ABT/UND 各一套

- 每种模式有独立栈与返回地址,互不干扰

三、核心作用

1. 现场隔离:模式切换时自动切换物理寄存器,无需软件保存/恢复,避免数据被覆盖

2. 加速FIQ:FIQ 独享 R8~R12,中断响应/处理更快

3. 独立栈/返回:R13(SP)、R14(LR) 按模式独立,异常处理更安全

4. SPSR(备份状态寄存器):每个特权模式有专属 SPSR,保存进入异常前的 CPSR,用于异常返回时恢复状态

FIQ 之所以快,就是因为 R8~R12 不用压栈,直接用自己的备份寄存器。



3. R13(SP)、R14(LR) 全模式备份(最重要)

每个模式都有自己的 SP、自己的 LR:


特点:

- 进 IRQ → 自动切到 R13_irq、R14_irq

- 不会破坏用户模式的 SP/LR → 这就是备份的意义



4. SPSR 也是备份寄存器

每个异常模式都有:

- SPSR_irq

- SPSR_fiq

- SPSR_svc

- SPSR_abt

- SPSR_und

作用:
进入异常时,硬件自动把 CPSR 存到 SPSR_xxx
返回时再从 SPSR 恢复 CPSR。


四、与未备份寄存器(R0~R7)的区别

- 未备份(R0~R7):所有模式共用同一物理寄存器;模式切换时必须软件保存/恢复,否则数据丢失

- 备份(R8~R14):按模式独立物理寄存器;模式切换自动隔离,无需软件操作

实例

;=====================================================================
; IRQ 中断入口
; 一进来就已经在 IRQ 模式,用的是 备份寄存器:LR_irq、SPSR_irq、SP_irq
;=====================================================================
IRQ_Handler:

; 1. 保存现场:R0-R3, LR_irq;

LR_irq 是备份寄存器,存的是“被打断处的下一条指令”
STMFD SP!, {R0-R3, LR} ; 压入中断栈(SP_irq)


; 2. 调用C语言中断处理函数
BL IRQ_Process ; 中段服务程序C函数


; 3. 恢复现场
LDMFD SP!, {R0-R3, LR} ; 弹出 R0-R3, LR_irq


; 4. 中断返回:关键!
; 用 备份寄存器 SPSR_irq 恢复 CPSR
; 用 LR_irq 修正后恢复 PC
SUBS PC, LR, #4 ;

① PC = LR_irq -4(返回被打断的指令 ;

② SPSR_irq → CPSR(自动恢复状态)

http://www.jsqmd.com/news/502816/

相关文章:

  • day15-LangChain高级组件之工具-短期记忆-护栏-MCP-人机交互
  • Go 代码示例:通过 go:embed 将前端资源嵌入 Go 后端
  • ClawdBot应用场景:搭建个人AI助手,用devices命令管理多设备访问
  • 零基础玩转语音识别:Fun-ASR-MLT-Nano-2512多语言识别保姆级教程
  • 这3个Linux发行版安装和维护难度比Arch Linux难得多
  • 一次讲透这4种二层组播技术
  • Win10下用VS2013编译LASTools避坑指南:从下载到测试全流程
  • Whisper实战:基于频域分析的实时恶意流量检测系统设计与评估
  • PCB BGA X射线检测智能化趋势与行业发展新变局
  • 建议收藏|开源免费一键生成论文工具 千笔·专业论文写作工具 VS 文途AI
  • 【数据集】【YOLOv11】【实例分割】路面积水精准分割数据集实战:从数据标注到城市内涝预警系统部署
  • AudioSeal算力适配指南:A10/A100/V100不同GPU上的推理延迟对比分析
  • OpenWRT旁路由+ZeroTier保姆级教程:异地访问家里NAS就这么简单
  • Harness工程:老生常谈
  • EasyAnimateV5-7b-zh-InP开源价值:22GB模型在中小企业内容生产的ROI分析
  • 在gpupixel中自定义锐化filter
  • DeOldify图像上色服务5分钟快速部署:零基础搭建黑白照片修复工具
  • Nanbeige4.1-3B链路监控教程:Prometheus+Grafana监控vLLM服务指标
  • 普通人无条件前程似锦的庖丁解牛
  • Qwen3-ForcedAligner在语音旅游中的应用:实时翻译与导览
  • uniapp 实现高性能固定表头与固定列的表格组件
  • 手把手教你用Docker部署Firecrawl:解决Rust版本错误和Go模块下载超时问题
  • 普通人无条件家和万事兴的庖丁解牛
  • 广州传统养生调理馆推荐|告别痛症,选对馆才有效 - 妙妙水侠
  • buildroot的网络配置
  • 【最新】2026年3月OpenClaw(Clawdbot)华为云2分钟超简单部署步骤
  • Solution - P8903 [USACO22DEC] Bribing Friends G
  • OpenClaw+Qwen3-32B自动化办公:飞书机器人配置全流程
  • MCP中台建设
  • 5分钟搞懂多机器人路径规划(MAPF):从仓储物流到无人机编队的实战应用