ARM的编程模型

ARM的编程模型

ARM 的编程模型指的是从程序员(特别是汇编程序员和编译器设计者)视角所看到的 ARM 处理器架构。它定义了程序员可以使用的资源、数据操作方式以及规则,主要包括:寄存器组、数据类型、内存访问方式、执行状态和异常处理

这是一个结构化的总结,便于理解:

在这里插入图片描述

一、核心组成部分

1. 寄存器组

这是编程模型的核心,是 CPU 内部的高速存储单元,用于存放指令、数据和地址。

AArch32 (ARMv7 / ARMv8 AArch32 状态)

  • 16个 32位 通用寄存器:R0 - R12, R13, R14, R15。
    • R0-R12:通用目的寄存器,用于数据操作。
    • R13 / SP堆栈指针 (Stack Pointer),指向当前栈顶。
    • R14 / LR链接寄存器 (Link Register),用于保存子程序或函数调用的返回地址。
    • R15 / PC程序计数器 (Program Counter),指向下一条要执行的指令。
  • 1个 32位 程序状态寄存器CPSR (Current Program Status Register)
    • 条件标志位 (Condition Flags)N (Negative), Z (Zero), C (Carry), V (oVerflow)。这些位会根据算术或逻辑运算的结果自动改变,用于条件分支判断。
    • 中断禁用位I (IRQ disable), F (FIQ disable)。
    • 执行状态位T (Thumb state bit),J (Jazelle state bit)。
    • 处理器模式位:指定当前处于哪种模式(User, FIQ, IRQ, etc.)。
  • Banked Registers:在不同处理器模式下(如 FIQ, IRQ, SVC),某些寄存器(如 R13, R14)有自己独立的副本。这避免了在处理异常时破坏用户模式的寄存器状态,实现了快速上下文切换。

AArch64 (ARMv8 64位状态)

  • 31个 64位 通用寄存器:X0 - X30。
    • X0-X7:常用于参数传递和返回值。
    • X8:间接结果寄存器。
    • X9-X15:临时寄存器。
    • X16-X17:内部过程调用临时寄存器。
    • X18:平台保留寄存器。
    • X19-X28:被调用者保存寄存器。
    • X29:帧指针 (FP)。
    • X30:链接寄存器 (LR)。
  • 1个 64位 堆栈指针 (SP):专用寄存器,不再是通用寄存器之一。
  • 1个 64位 程序计数器 (PC):无法被软件直接访问,只能通过特殊指令(如 BL)修改。
  • NZCV 寄存器PSTATE(相当于 CPSR 的分布式视图)的一部分,独立保存条件标志位。
2. 数据类型与内存访问
  • 数据类型
    • 基本类型:字节 (8-bit)、半字 (16-bit)、字 (32-bit)、双字 (64-bit)。
    • 浮点数:半精度 (16-bit)、单精度 (32-bit)、双精度 (64-bit)。
  • 内存访问
    • 对齐访问:强烈建议字(4字节)访问在4字节对齐的地址上,双字在8字节对齐的地址上,否则可能影响性能或导致异常。
    • 端序 (Endianness):ARM 处理器通常为小端序 (Little-Endian),但许多架构也支持可配置的端序或大端序(BE8)。
3. 执行状态与异常级别 (ARMv8-A)
  • AArch64:64位执行状态。
    • 提供 31 个 64 位通用寄存器。
    • 使用异常级别 (EL0 - EL3) 来定义特权级别,替代了传统的处理器模式概念。
  • AArch32:32位执行状态,提供与 ARMv7-A 的兼容性。
    • 运行传统的 ARM/Thumb 指令。
    • 仍然使用传统的处理器模式(User, FIQ, IRQ, etc.)。
4. 操作模式 (AArch32)
  • 用户模式 (User):非特权模式,运行应用程序。
  • 特权模式:包括 FIQ, IRQ, Supervisor (SVC), Abort, Undefined 和 System 模式。用于运行操作系统和异常处理程序。

二、编程特点

  1. 加载/存储架构 (Load/Store Architecture)

    • 这是 ARM 架构的一个基本原则
    • 数据处理指令(如 ADD, SUB)只能操作寄存器,不能直接操作内存中的数据。
    • 必须使用专门的加载 (LDR) 指令将数据从内存读到寄存器,处理完后,再用存储 (STR) 指令将结果写回内存。
  2. 条件执行 (Conditional Execution)

    • ARM 指令集中的大多数指令都可以条件化执行
    • 通过在指令后添加条件码后缀(如 ADDEQ, BNE),指令仅在 CPSR 中的条件标志满足指定条件时才会执行。
    • 这可以减少分支指令的数量,提高代码密度和性能。
  3. 桶式移位器 (Barrel Shifter)

    • 许多 ARM 数据处理指令(如 ADD, MOV)可以将一个操作数进行移位或循环移位后再参与运算,无需额外的时钟周期
    • 例如:MOV R1, R0, LSL #2 将 R0 的值左移2位(即乘以4)后存入 R1。
  4. Thumb / Thumb-2 指令集

    • Thumb:16位指令集,代码密度高,用于节省内存空间。
    • Thumb-2:混合了 16 位和 32 位指令,在保持高代码密度的同时,提供了接近 ARM 32 位指令集的性能。是现代 ARM Cortex-M 等嵌入式处理器的默认指令集。

总结

ARM 的编程模型以其简洁、高效和灵活著称。其核心特点包括:

  • 规整的寄存器文件加载/存储架构
  • 强大的条件执行集成桶式移位器,提高了指令效率。
  • 通过 Banked Registers 实现高效的异常处理。
  • 提供 Thumb 指令集以实现高代码密度。
  • 在 ARMv8 中演进为 AArch64/AArch32 双执行状态异常级别 (EL) 模型,以支持更复杂的应用场景(如服务器、虚拟化)。

理解 ARM 的编程模型是进行底层系统编程、驱动开发、性能优化和体系结构研究的基础。

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

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

相关文章

最大熵强化学习相比传统强化学习,有什么缺点?

要理解最大熵强化学习(MaxEnt RL)相比传统强化学习(如DQN、PPO、DDPG等)的缺点,首先需要明确两者的核心差异:传统RL的目标是“最大化累积奖励”,而MaxEnt RL在该目标基础上额外增加了“最大化策…

python生成器与协程深度剖析

目录 生成器 传统列表 vs 生成器对比 yield机制深度解析 生成器的高级用法 协程的演进:从yield到async/await 基于yield的协程 现代async/await语法 协程的错误处理和超时控制 异步生成器与异步迭代器 异步生成器 异步迭代器实现 实战案例:异步爬虫框架设计 生成器…

论文解读:基于 77 GHz FMCW 毫米波雷达的舱内占位检测

毫米波 (mm-Wave) 雷达是汽车应用(例如高级驾驶辅助系统 (ADAS))的一种解决方案。本研究探索了商用毫米波雷达技术在车内应用领域的应用。本文提出了一种基于 77 GHz 毫米波雷达的车辆占用检测器框架。本研究采用了德州仪器 (Texas Instruments) 的多输入…

进程优先级(Process Priority)

🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 文章目录进…

OpenCV的轮廓检测

1. 轮廓检测的基本概念轮廓是图像中连续的、闭合的曲线段,代表物体的边界(如圆形的轮廓是一条闭合曲线)。OpenCV 的轮廓检测通过 cv2.findContours() 实现,可用于形状识别、物体计数、图像分割等场景。2. 核心函数与参数&#xff…

亚信安全亮相鸿蒙生态大会2025 携手鸿蒙生态绘就万物智联新蓝图

8 月30 日,以 “新场景・新体验” 为主题的鸿蒙生态大会 2025 在深圳福田会展中心隆重开幕。本次大会由全球智慧物联网联盟(GIIC)主办、鸿蒙生态服务(深圳)有限公司承办,旨在搭建全球鸿蒙生态伙伴的高层次交…

Linux内核进程管理子系统有什么第四十回 —— 进程主结构详解(36)

接前一篇文章:Linux内核进程管理子系统有什么第三十九回 —— 进程主结构详解(35) 本文内容参考: Linux内核进程管理专题报告_linux rseq-CSDN博客 《趣谈Linux操作系统 核心原理篇:第三部分 进程管理》—— 刘超 《…

面试问题:进程和线程,编译步骤,const,map和unordered_map,深入理解unordered_map

目录 进程和线程的区别 const修饰指针(左边内容,右边指向) 1. const 修饰指针指向的内容(指向常量) 2. const 修饰指针本身(常量指针) 3. const 同时修饰指针本身和指向的内容(指向常量的常量指针&…

利用棒棒糖图探索Office (US)的IMDB评分

利用棒棒糖图探索Office (US)的IMDB评分 import numpy as np import pandas as pd import matplotlib.colors as mc import matplotlib.image as image import matplotlib.pyplot as pltfrom matplotlib.cm import ScalarMappable from matplotlib.lines import Line2D from m…

Zephyr如何注册设备实例

设备树 → 编译期生成 → 运行时访问 流程图&#xff1a;Zephyr dev->config 工作流程设备树 (.dts) ───────────────────────────── anx745139 {compatible "analogix,anx7451";reg <0x39>;reset-gpios <&gpio1 5 …

Spring Boot 日志框架选择指南:Logback vs Log4j2

在 Spring Boot 应用中&#xff0c;您需要明确选择一个日志框架 - ​​不能同时使用两种日志实现​​。以下是关于 spring-boot-starter-log4j2和 spring-boot-starter-logging的全面比较和选择建议&#xff1a;核心区别特性spring-boot-starter-log4j2(Log4j2)spring-boot-sta…

Axure科技感可视化原型案例:赋能设计与研发的宝藏资源

在当今数字化浪潮中&#xff0c;数据可视化已成为企业洞察市场、优化运营、快速决策不可或缺的工具。Axure&#xff0c;作为原型设计领域的领航者&#xff0c;凭借其强大的功能和丰富的资源&#xff0c;为数据可视化大屏的设计注入了科技活力与创新元素。本文将深入探讨Axure科…

跨境电商账号风控核心:IP纯净度与浏览器指纹的防护策略

对跨境电商从业者而言&#xff0c;账号突然被封是常见却令人头痛的问题。即便严格遵守平台规则、使用代理IP&#xff0c;账号仍可能因风控策略而受限。这背后&#xff0c;IP纯净度与浏览器指纹识别是两大常被忽视却至关重要的技术因素。本文将从技术角度解析其原理&#xff0c;…

daily notes[7]

文章目录perl notereferencesperl note A hash in perl can be initialized with array,for example: my %numbers ("one", 1, "two", 2); print $fruit_color{"one"}; it is wonderful that the hash can be sliced to result in an array …

WPF迁移avalonia之图像处理(一)

从WPF迁移到avalonia中&#xff0c;对于图像处理部分&#xff0c;在WPF常用System.Windows.Drawing中图像处理元素&#xff0c;但是在开发avalonia应用时考虑跨平台特性&#xff0c;则必须有对应的跨平台替换方案。主要考虑Avalonia.Media.Imaging.Bitmap和SkiaSharp.SKBitmap …

242. 有效的字母异位词| 349. 两个数组的交集

242. 有效的字母异位词 nums [0]*26 : 这行代码创建了一个包含26个0的列表&#xff0c;这个列表通常用于计数或者作为某种映射的基础&#xff0c;比如统计字符串中每个字母出现的次数&#xff08;假设只考虑小写字母a-z&#xff09;。 ord() Python 中的一个内置函数&#x…

HTML第二课:块级元素

HTML第二课&#xff1a;块级元素块级元素块级元素 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang"zh-CN"> <head><meta http-equiv"Content-…

微论-突触的作用赋能思考(可能是下一代人工智能架构的启发式理论)

突触智能&#xff1a;微观结构与宏观智慧的桥梁摘要&#xff1a;传统人工智能模型&#xff0c;尤其是深度学习&#xff0c;将突触简单抽象为一个静态的权重参数&#xff0c;这极大地简化了生物计算的复杂性。本文受启发于生物突触的微观功能&#xff0c;提出了一种新的智能架构…

ARM - GPIO 标准库开发

一、STM32MP157AAA开发板套件介绍1.1 核心板 - 主板如图所示&#xff1a;主板各部分介绍1.2 IO 拓展板如图所示&#xff1a;IO拓展板各部分介绍开发板名称&#xff08;硬件平台&#xff09;&#xff1a;FS-MP1A主控制器&#xff1a;STM32MP157AAA3 Cortex-A7 * 2 Cortex-M4 -…

橙武低代码:不仅仅是云SaaS,更是云端开发+本地部署的新范式

版权归作者所有&#xff0c;转载请注明出处。 一、低代码的时代背景 在过去十年里&#xff0c;软件研发模式经历了巨大的演变。从传统的瀑布开发&#xff0c;到敏捷、DevOps&#xff0c;再到如今的低代码/无代码平台&#xff0c;研发效率和交付模式发生了根本性变化。低代码的…