ARM内核工作模式及其切换条件

用户模式(User Mode, usr)
权限最低,运行普通应用程序。只能通过异常被动切换到其他模式。

快速中断模式(FIQ Mode, fiq)
处理高速外设中断,专用寄存器减少上下文保存时间,响应周期约4个时钟周期。触发条件为FIQ中断源激活。

外部中断模式(IRQ Mode, irq)
处理通用外设中断,共享寄存器,响应周期约12个时钟周期。触发条件为IRQ中断且未被FIQ抢占。

管理模式(SVC Mode, svc)
系统初始化和内核关键操作模式。上电默认进入,或通过SWI指令触发。

数据访问终止模式(Abort Mode, abt)
处理非法内存访问异常。触发条件为数据指令访问无效地址。

未定义指令模式(Undefined Mode, und)
执行未定义指令时自动切换。

系统模式(System Mode, sys)
特权级系统任务,与用户模式共享寄存器但权限更高。需手动修改CPSR切换。

ARMv7-A/ARMv8-A新增模式

  • 监控模式(Monitor Mode, mon):用于TrustZone安全扩展。
  • Hyp模式:支持虚拟化扩展。

模式切换机制

  1. 异常触发时,硬件自动修改CPSR的M[4:0]位。
  2. 保存PC到对应LR寄存器,CPSR到SPSR。
  3. 跳转至异常处理程序,完成后恢复现场。

异常向量表详解

布局(ARMv7-A)

偏移地址异常类型描述
0x00Reset上电或复位
0x04Undefined Instruction未定义指令异常
0x08SWI (SVC)软件中断(系统调用)
0x0CPrefetch Abort取指异常
0x10Data Abort数据访问异常
0x18IRQ普通中断
0x1CFIQ快速中断

作用

  • 提供固定入口点,减少响应延迟。
  • 自动保存PC和CPSR,提升权限至特权模式。

响应流程

  1. 切换到对应异常模式。
  2. 保存返回地址到LR,CPSR到SPSR。
  3. 跳转至向量表入口执行处理程序。

立即数合法性判断

编码规则

  • 12位字段:低8位为基值(immed_8),高4位为循环右移位数(rotate_imm4)。
  • 生成公式:
    immediate = immed_8 ROR (2 × rotate_imm4)
    

快速判断方法

  1. 统计二进制中1的个数,若>8则非法。
  2. 通过循环左移使高位为0,检查剩余有效位数≤8即为合法。

示例

  • 合法:0x2340010_0011_0100 → 处理后8位)
  • 非法:0x4FF(1的个数为9)

设计原因

  • 指令长度限制(32位中占12位)。
  • 桶形移位器高效实现循环移位。

B、BL、BX指令对比

指令保存返回地址状态切换跳转范围用途
B±32MB短跳转、循环
BL是(到LR)±32MB函数调用
BX寄存器指定地址ARM/Thumb状态切换

关键点

  • BL用于子程序调用,自动保存PC+4LR
  • BX根据目标地址最低位切换指令集(0=ARM,1=Thumb)。

ARM栈类型与操作

栈特性

  • 类型:满降栈(Full Descending, FD)。
  • 增长方向:向低地址扩展。

栈帧结构

  • FP(R11)指向栈帧起始,SP(R13)指向栈顶。
  • 保存内容:局部变量、多余参数、返回地址(LR)。

操作示例

; 函数入口
stmdb sp!, {fp, lr}   ; 压栈保存FP和LR
mov fp, sp            ; 设置新FP
sub sp, sp, #8        ; 分配局部变量空间; 函数退出
mov sp, fp            ; 恢复SP
ldmia sp!, {fp, pc}   ; 弹出FP和PC(返回)

多栈类型(ARM64/Linux)

  • 用户栈(8MB)、内核栈(16KB)、中断栈(32KB/CPU)。

总结

ARM工作模式、异常向量表、立即数编码、跳转指令和栈管理是底层开发的核心内容。理解这些机制有助于优化代码性能和调试系统异常。实际应用中需结合具体架构手册(如Cortex-M/A系列)进行细节调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96055.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96055.shtml
英文地址,请注明出处:http://en.pswp.cn/web/96055.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 性能优化

Flutter 性能优化是一个系统性的工程,涉及多个层面。 一、性能分析工具(Profiling Tools) 在开始优化前,必须使用工具定位瓶颈。切忌盲目优化。 1. DevTools 性能视图 DevTools 性能视图 (Performance View) 作用:…

Spring事件监听机制(三)

为了理解EvenListener注解的底层原理,我们可以自己实现一个类似的注解模拟实现。1.定义MyListener注解Target({ElementType.METHOD})Retention(RetentionPolicy.RUNTIME)public interface MyListener {}2.注解使用Componentstatic class SmsService {private static…

基于Springboot + vue3实现的小区物业管理系统

项目描述本系统包含管理员和用户两个角色。管理员角色:用户管理:管理系统中所有用户的信息,包括添加、删除和修改用户。房屋信息管理:管理房屋信息,包括新增、查看、修改和删除房屋信息。车辆信息管理:管理…

交叉熵和KL散度

这个问题之前我也是傻傻分不清,决定整理一下,用更印象深刻的方式让人记住。核心联系:交叉熵 KL 散度 真实分布的熵 交叉熵作为 “绝对” 度量,会综合真实分布的熵(固有难度)与预测误差,直接体…

HTML 各种事件的使用说明书

HTML 各种事件的使用说明书 1. HTML 事件简介 HTML事件是浏览器或用户在网页上执行的动作或发生的事情。当这些事件发生时,可以通过JavaScript来响应和处理这些事件,从而实现网页的交互功能。事件处理是Web前端开发中实现动态交互的核心机制。 基本概…

Kafka面试精讲 Day 10:事务机制与幂等性保证

【Kafka面试精讲 Day 10】事务机制与幂等性保证 在分布式消息系统中,如何确保消息不丢失、不重复,是系统可靠性的核心挑战。Kafka自0.11版本起引入了幂等性Producer和事务性消息机制,彻底解决了“至少一次”语义下可能产生的重复消息问题&am…

时序数据库简介和安装

一、简介1. 什么是时序数据库?时序数据库是专门用于存储和处理时间序列数据的数据库系统。时间序列数据是指按时间顺序索引的一系列数据点。每个数据点都包含:一个时间戳:记录数据产生的时间。一个或多个指标值:例如温度、湿度、C…

comfyUI 暴露网络restful http接口

https://zhuanlan.zhihu.com/p/686893291 暴露websocket接口。 打开开发者选项 如图

linux系统address already in use问题解决

linux系统上某个端口被占用,如何解决?1.找到占用的进程编号:netstat -tulnp | grep :80002.强制杀死该进程kill -9 80603其他说明:1.查找占用端口的进程,可以用:lsof -i :8001 # 或者使用 netstat -tulnp |…

基于SpringBoot的家政保洁预约系统【计算机毕业设计选题 计算机毕业设计项目 计算机毕业论文题目推荐】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【Linux系统】 4. 权限(一)

一. shell 命令及运行原理基本理解1)广义理解的操作系统包括:操作系统内核、外壳程序(shell命令行、图形化界面)、必要的软件。2)狭义的操作系统:操作系统内核。3)在用户和内核之间有一个外壳程…

6.python——字符串

python中用’ 和" "创建字符串 python的子字符串截取用[]取字符串拼接可以直接用相加。 python三引号允许一个字符串跨多行,其中无需进行转义(所见即所得)。 当你需要一块HTML或者SQL时,这时用字符串组合,特…

足球数据API接口的技术特性与应用价值分析

一、接口概述现代足球数据接口是基于RESTful架构的数据服务,通过标准化方式提供赛事相关信息。这类接口通常采用JSON格式传输数据,支持跨平台调用,为开发者提供结构化的足球赛事数据。二、数据覆盖范围主流足球数据接口通常包含以下数据类型&…

<android>反编译魔改安卓系统应用并替换

我们知道安卓系统基于稳定性、维护便利、性能优化等原因并未对原生系统apk进行混淆加密处理,由此就方便了我们反编译替换原生应用。 首先我们设备需要是root后的,我是使用的是小米5,刷的24.3版本的面具。首先我们需要取系统apk,这…

【Qt】项目的创建 and 各个控件的使用

一、项目的创建🔍然后点击新建项目。📖注意:路径不要带有中文,不然运行不了代码。📖qmake是一个构建工具,在 Qt 写的程序,设计的到一系列的 "元编程" 技术,什么是元编程技…

大模型架构演进全景:从Transformer到下一代智能系统的技术路径(MoE、Mamba/SSM、混合架构)

当前大模型发展正经历着一个关键的技术分水岭。虽然Transformer架构自2017年问世以来主导了整个AI领域,但我们正见证着多种创新架构的涌现,每种都在试图解决Transformer的固有局限。本指南将系统性地解析当前主流架构的技术原理、适用场景与发展趋势&…

画世界笔刷合集(2000 + 款):含宫崎骏森系、鸭风人像、国潮等多风格 + 视频导入教程

预览: https://blog.csdn.net/2501_93092597/article/details/151330089?spm1011.2415.3001.5331 想在画世界创作却缺适配笔刷?手动绘制森系元素、人像细节耗时久,导入笔刷总失败,找配套背景 / 配色还得跨平台搜索?这…

03-Redis 安装指南:从版本选择到多系统部署(Windows+macOS+Linux)

目录引言一、安装 Redis 前必须明确的核心问题二、Redis 版本选择:稳定版 vs 开发版,该怎么选?2.1 版本规则:看 “次版本号” 辨稳定性2.2 稳定版与开发版核心差异2.3 版本选择建议三、多系统安装教程:step-by-step 实…

普通MYSQL数据库是怎么做sum操作的

MySQL 的 SUM()操作实现是一个结合​​执行引擎优化、存储结构利用和分组算法​​的高效过程。以下是其核心实现机制和优化策略:​​1. 执行流程概览​​以查询为例:SELECT department, SUM(salary) FROM employees GROUP BY department;​​执行步骤​​…

Claude-Flow AI协同开发:基础入门之 AI编排

1.1 引言:超越“代码生成器”的革命 在AI辅助开发的浪潮中,我们已经习惯了代码补全、函数生成等“代码生成器”工具。它们极大地提升了我们的编码效率,但通常仅限于解决孤立、单一的问题。当面对一个完整的项目或一个复杂的功能模块时&#x…