ARM 基础(2)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…