IMX6ULL裸机-ARM内部寄存器

上一篇文章说CPU读取内存的数据在内部进行计算,那么读取到的数据会暂存到CPU内部的寄存器中,内部有R0-R15寄存器,可以用来暂存数据

ARM寄存器介绍

这里指的是内核寄存器,其中R0-R12是通用的寄存器,可以用这13个寄存器来保存其他值,这些值可以来自内存也可以来自其他寄存器,另外3个有特殊用途

比如下图的指令,第一条就是内存a的数值加载到寄存器R0中

对于A7架构的CPU来说,有很多工作模式,就是图中最下面的,对于不同的模式,它会只用不同的寄存器。浅色字体是与 User 模式所共有的寄存器,浅蓝色背景是各个模式所独有 的寄存器,即在所有的模式中,低寄存器组(R0~R7)是共享同一组物理寄存器的, 只是一些高寄存器组在不同的模式有自己独有的寄存器,比如 FIQ 模式下 R8~R14 是独立的物理寄存器。如果某个程序处于 FIQ 模式下访问寄存器 R13(SP),那它实际访问的是他自己寄存器 SP_fiq,并不是R13(SP)

运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。 大多数的程序都运行在用户模式,用户模式下是不能访问系统所有资源的,有些 资源是受限的,要想访问这些受限的资源就必须进行模式切换。但是用户模式是不能直接进行切换的,用户模式下需要借助异常来完成模式切换,当要切换模式 的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换。 所谓"运行模式",可以这样简单理解: ① 板子上电时,CPU处于SVC模式,它用的是SVC模式下的寄存器 ② 程序运行时发生了中断,CPU进入IRQ模式,它用的IRQ模式下的寄存器 ③ CPU处理完中断,它切换回SVC模式,继续使用SVC模式下的寄存器 ④ CPU发生某种异常时,比如读取内存出错,它会进入ABT模式,使用ABT 模式下的寄存器来处理错误。 在某种模式下,CPU执行时使用的是这种模式的资源,比如使用的是这组模

上图可以看到还有xPSR(代指多个),这是程序状态寄存器用来保存某些状态,这些寄存器由多个bits组成,不同的bit位置1代表不同的状态,比如比较两个数值大小等

相关推荐
路溪非溪1 小时前
关于Linux中的日志问题
linux·arm开发·驱动开发
与遨游于天地1 天前
从 BPF 到 eBPF:一场 Linux 内核的“可编程”革命
linux·运维·arm开发
Chuncheng's blog1 天前
Ubuntu 24.04 ISO国内镜像下载(ARM / AMD64)
arm开发·ubuntu
忆和熙2 天前
ARMv8异常的类型与处理
arm开发·arm异常
EnglishJun2 天前
ARM嵌入式学习(二) --- 入门51(中断)
arm开发·学习
头发够用的程序员3 天前
GPU 流水线底层探索:从 SIMT 前端到 SIMD 后端的全链路解析
arm开发·人工智能·嵌入式硬件·深度学习·硬件架构·边缘计算
梁洪飞3 天前
armv7a和uboot里面的重要概念
arm开发·嵌入式硬件·arm
忆和熙4 天前
ARM异常概述与级别(ARMv8异常机制——异常的概述、级别)
arm开发·arm异常
嵌入式学习菌4 天前
用 mDNS 实现逆变器与电表的自动通信
arm开发
fygfh.4 天前
Linux的系统架构浅析
linux·arm开发·系统架构