type
status
date
slug
summary
tags
category
icon
password
ARM架构培训
RISC与CISC
RISC(精简指令集计算机)是一种计算机架构,特点如下:
- 简化的指令集:只包含常用、基本的指令
- 固定的指令长度:通常所有指令都是相同长度
- 更多的通用寄存器:减少内存访问次数
- 加载/存储架构:只有特定指令可以访问内存
- 流水线执行:指令可以在不同阶段并行处理
- 更简单的译码逻辑:减少硬件复杂度
典型代表架构:ARM、RISC-V、MIPS、Power架构
CISC(复杂指令集计算机)是另一种计算机架构,特点如下:
- 复杂的指令集:包含大量专用指令,有些指令能执行复杂操作
- 可变指令长度:指令长度不固定
- 较少的通用寄存器:更多依赖内存操作
- 多种寻址模式:支持复杂的内存访问方式
- 指令可直接在内存上操作:不需要先加载到寄存器
- 硬件实现复杂:需要更多晶体管和复杂控制逻辑
典型代表架构:x86/x64(Intel和AMD)、VAX、IBM System/360和System/370
RISC与CISC对比:
- RISC更适合移动设备(功耗低);CISC更适合复杂计算任务
- 现代处理器往往融合两种架构的优点,如Intel处理器内部将CISC指令转换为RISC微操作
- ARM逐渐向高性能领域拓展,x86也增加了功耗优化,两种架构界限变得模糊
冯诺伊曼架构-哈佛架构
定义
冯诺伊曼架构是经典的计算机体系结构,特点包括:
- 存储程序概念:程序和数据存储在同一个存储器中
- 单一存储器:指令和数据共享同一存储空间和总线
- 顺序执行:指令按顺序一条一条执行
- 统一的寻址方式:程序和数据使用相同的寻址机制
哈佛架构是另一种计算机体系结构,特点包括:
- 分离的存储空间:指令和数据存储在物理上分开的存储器中
- 独立的总线:指令和数据有各自独立的总线
- 并行访问:可以同时访问指令和数据
- 更高的效率:减少了内存访问瓶颈
- 更好的安全性:程序代码与数据分离,降低了被恶意修改的风险
示意图
冯诺伊曼架构与哈佛架构的主要区别:
- 冯诺伊曼架构使用单一存储空间和总线,指令和数据混合存储
- 哈佛架构使用独立的存储空间和总线,指令和数据分开存储
- 哈佛架构允许同时访问指令和数据,提高了执行效率
- 许多现代微控制器使用修改的哈佛架构,特别是ARM处理器
ARM的架构
ARM架构是一系列基于RISC原则的处理器架构,由ARM公司(现为Arm Holdings)开发。以下是几种常见的ARM Cortex-M系列处理器架构:
Cortex-M0/M0+
Cortex-M0是ARM最简单、最小功耗的处理器核心,适用于低成本微控制器和嵌入式应用:
- ARMv6-M架构,16位Thumb指令集(Thumb-1的子集)
- 2级流水线,32位处理器
- 无硬件除法,无DSP扩展
- 最低功耗设计,核心面积小
- 典型应用:简单传感器、IoT设备、低功耗控制系统
M0+是M0的增强版,提供更低的功耗和更好的性能/功耗比
Cortex-M4F
Cortex-M4是针对数字信号控制应用优化的处理器:
- ARMv7-M架构,支持Thumb-2指令集
- 3级流水线设计
- 包含DSP(数字信号处理)指令扩展
- F后缀表示包含FPU(浮点运算单元),支持单精度浮点运算
- 具有MPU(内存保护单元)选项
- SIMD(单指令多数据)指令支持
- 典型应用:电机控制、音频处理、工业控制、汽车电子
Cortex-M33
Cortex-M33是为安全IoT应用设计的处理器:
- 基于ARMv8-M架构,完全支持Thumb-2指令集
- 内置TrustZone安全技术,提供硬件隔离的安全区域
- 可选FPU和DSP扩展
- 包含协处理器接口
- 增强的调试和跟踪功能
- 比M4系列提供更好的性能和功耗比
- 典型应用:需要安全功能的IoT设备、边缘计算、智能传感器
核心架构比较
特性 | Cortex-M0/M0+ | Cortex-M4F | Cortex-M33 |
架构 | ARMv6-M | ARMv7-M | ARMv8-M |
内存架构 | 修改的哈佛架构 | 修改的哈佛架构 | 修改的哈佛架构 |
流水线 | 2级 | 3级 | 3级 |
指令集 | Thumb子集 | Thumb-2 | Thumb-2 |
FPU | 无 | 有(F版本) | 可选 |
DSP | 无 | 有 | 可选 |
TrustZone | 无 | 无 | 有 |
性能 | 基准 | ~2.5倍M0 | ~3倍M0 |
ARM Cortex-M系列的发展体现了从低功耗简单应用到高性能安全应用的演进,每种处理器核心都针对特定应用场景进行了优化。在选择时,需要根据应用需求平衡性能、功耗、安全性和成本等因素。
ARM架构与内存架构
ARM架构与内存架构关系探讨:
ARM架构与冯诺伊曼/哈佛架构的关系
ARM架构是一种处理器指令集架构,而冯诺伊曼架构和哈佛架构是计算机系统的内存组织方式:
- 现代ARM处理器采用的是修改的哈佛架构(Modified Harvard Architecture)
- 这种修改的哈佛架构在物理上分离指令和数据缓存,但在主存储器层面共享同一物理存储空间
- 实际应用中,ARM处理器结合了哈佛架构的高效性和冯诺伊曼架构的灵活性
ARM架构版本与内存架构的演进
ARM架构版本 | 内存架构特点 | 关键改进 | 指令集 | 应用场景 |
ARMv6-M | 简化的修改哈佛架构 | 面向微控制器,简化的内存模型 | 16位Thumb指令集(Thumb-1子集) | 低功耗微控制器,简单传感器应用 |
ARMv7-M | 增强的修改哈佛架构 | 添加了MPU支持,提高内存保护能力 | Thumb-2指令集,支持DSP指令 | 中等复杂度嵌入式系统,实时控制应用 |
ARMv7-A | 更复杂的修改哈佛架构 | 支持虚拟内存(MMU)和多级缓存 | 32位ARM指令集和Thumb-2指令集,NEON SIMD扩展 | 智能手机,平板电脑,高性能嵌入式系统 |
ARMv8-M | 安全增强的修改哈佛架构 | 添加TrustZone技术,支持安全/非安全内存区域隔离 | 增强的Thumb-2指令集,安全扩展指令 | IoT设备,需要安全保障的嵌入式系统 |
ARMv8-A | 高级修改哈佛架构 | 64位支持,增强的内存管理与保护 | AArch64(64位)和AArch32(32位)双指令集,高级SIMD | 服务器,高性能计算,高端移动设备 |
关键差异与联系
内存架构(冯诺伊曼/哈佛)与ARM架构的关系:
- 架构层次不同:ARM架构定义了指令集和寄存器架构;内存架构定义了处理器如何访问内存
- 互补关系:ARM架构规定了"做什么",而内存架构决定了"如何高效地做"
- 实现差异:不同ARM系列采用不同程度的哈佛架构特性:
- Cortex-M系列:更倾向于哈佛架构,有分离的指令和数据总线
- Cortex-A系列:在高速缓存级别使用哈佛架构,但在系统级别更接近冯诺伊曼架构
ARM架构对内存架构的优化
ARM处理器在实现上融合了两种架构的优点:
- L1缓存通常分为指令缓存和数据缓存(哈佛特性)
- 统一的L2/L3缓存和主内存(冯诺伊曼特性)
- 在处理器内部实现了高带宽的总线架构(如AXI、AHB等),优化内存访问
- 现代ARM架构支持统一内存访问(UMA)和非统一内存访问(NUMA)等高级内存组织方式
总结:ARM架构是处理器的指令集架构,而冯诺伊曼/哈佛架构是内存组织方式。现代ARM处理器采用了修改的哈佛架构,在不同层次上结合两种架构的优点,以获得最佳的性能和功耗平衡。
Thumb指令集-以m33为例
Thumb指令集简介
Thumb指令集是ARM架构中的一种指令集,旨在提高代码密度,减少内存占用。对于嵌入式系统特别是存储空间有限的M33等微控制器尤为重要。
为什么需要Thumb指令集?
- 传统32位ARM指令固定长度为4字节
- Thumb指令压缩为16位(2字节),可节省约40%的代码空间
- 特别适合内存受限的嵌入式系统
- 降低了存储器带宽需求,减少功耗
Thumb-2技术(M33采用)
Thumb-2是对原始Thumb指令集的扩展,在Cortex-M33中得到全面支持:
- 混合了16位和32位指令,兼顾代码密度和性能
- 与原始Thumb相比,性能损失几乎为零
- 保持了高代码密度的同时,还提供了完整的32位指令功能
M33中Thumb-2指令集的特点
Cortex-M33使用的Thumb-2指令集包含:
- 基本算术和逻辑操作(加减乘除、与或非等)
- 数据处理指令(移位、位操作、比较等)
- 内存访问指令(加载/存储、多寄存器访问)
- 控制流指令(分支、条件执行、函数调用)
- DSP扩展指令(可选,用于数字信号处理)
- 浮点运算指令(需要FPU支持)
- 安全相关指令(支持TrustZone安全特性)
Thumb指令集实例(从零开始)
下面通过简单例子展示Thumb指令的基本使用:
1. 寄存器和基本算术
2. 内存访问
3. 条件分支
4. 循环结构
Thumb状态与ARM状态切换(M33特性)
Cortex-M33只运行在Thumb状态,无需在ARM和Thumb状态之间切换,这简化了编程模型。
常用指令分类详解
对于初学者,可以按功能将Thumb指令分为以下几类:
1. 数据移动指令
- MOV/MOVS - 将值移动到寄存器
- LDR/LDRB - 从内存加载字/字节到寄存器
- STR/STRB - 存储寄存器值到内存(字/字节)
- PUSH/POP - 入栈/出栈操作
2. 算术指令
- ADD/ADDS - 加法
- SUB/SUBS - 减法
- MUL - 乘法
- SDIV/UDIV - 有符号/无符号除法(M33支持)
3. 逻辑指令
- AND - 按位与
- ORR - 按位或
- EOR - 按位异或
- BIC - 位清除
4. 比较和分支指令
- CMP - 比较
- B - 无条件分支
- BEQ - 相等时分支
- BNE - 不相等时分支
- BL/BLX - 带链接的分支(函数调用)
M33特有的指令(安全扩展)
由于Cortex-M33支持TrustZone安全技术,它添加了一些特有指令:
- SG - 安全门指令(用于切换安全与非安全状态)
- BXNS - 非安全状态下的分支和交换
- BLXNS - 非安全状态下的带链接分支和交换
如何实践学习Thumb指令(从零开始)
- 使用模拟器:如Keil MDK、IAR Embedded Workbench等IDE
- 在线工具:ARM指令集在线模拟器(如godbolt.org)
- 开发板实践:使用基于M33的开发板(如STM32L5系列)
学习路径建议
- 第一步:熟悉寄存器架构和基本指令(MOV, ADD, SUB等)
- 第二步:学习内存访问指令(LDR, STR等)
- 第三步:掌握分支和控制流指令(B, BL, CMP等)
- 第四步:探索更高级的功能(DSP指令、浮点运算等)
- 第五步:了解M33特有的安全特性和相关指令
实际编程示例:计算数组和
注意事项与常见错误
- 注意字节顺序:ARM通常是小端序(低字节在低地址)
- 对齐要求:内存访问通常需要对齐,未对齐访问可能导致异常
- 条件标志位:许多指令(带S后缀)会更新条件标志位
- 函数调用约定:了解参数传递和寄存器使用规则
C与指令集的关系
有文字内容详情不解或业务合作的可以通过以下方式联系本人:微信号:kmkadagarm(请注明称呼与来意)
- 作者:Knight
- 链接:https://www.ale-tech.cn//article/ARM
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。









