tnblog
首页
视频
资源
登录

ARM 工作模式及寄存器

1438人阅读 2024/6/17 0:11 总访问:3467427 评论:0 收藏:0 手机
分类: 嵌入式

ARM 工作模式及寄存器

简单的计算机工作原理

CPU


CPU是计算机的核心部分,用于执行程序指令。它包含以下几个主要组件:

组件名 描述
控制器 负责从内存中获取指令,解释指令,并控制其他几个部分执行指令。
ALU(算数逻辑单元) 负责执行算数和逻辑运算,比如加法、减法、比较等。
寄存器 用于临时存储数据和指令,图中显示了两个寄存器r0和r1

FLASH(闪存)


FLASH存储是一种非易失性存储器,用于存储固件、操作系统和应用程序。
在图中显示了几个指令存储在FLASH中:

mov r0,#1:将数值1加载到r0寄存器中。
add r1,r0,#1:将r0中的值加1,并将结果存储到寄存器r1中。
cmp r1,#0:将寄存器r1中的值与0进行比较。

内存傍边记录了三条指令的

内存


内存(RAM)是易失性存储器,用于临时存储正在运行的程序和数据。CPU从内存中读取数据和指令,并将计算结果写回内存。

总线


总线是连接CPU、内存和FLASH存储器的通信通道。它们通过总线进行数据传输和指令传递。总线确保各个组件可以协调工作,进行数据交换。

ARM处理器的工作模式


三角的是ARM下独有的空间,如果切换模式同样会被改变。

模式 描述
User(用户模式) 非特权模式,大部分普通任务在这个模式下执行。
FIQ(快速中断模式) 处理高优先级的快速中断。
IRQ(普通中断模式) 处理一般优先级的中断。
Supervisor(监控模式) 系统启动或发生软中断时进入的模式。
Abort(异常中止模式) 当发生异常中止时进入这个模式。
Undefined(未定义指令模式) 当执行未定义指令时进入这个模式。
System(系统模式) 与用户模式类似,但有更高的权限。

硬件中断


硬件中断由硬件设备(如键盘、鼠标、网络卡等)发出,用于通知处理器需要立即处理的事件。
举例:键盘中断、定时器中断、网络中断

软件中断


软件中断是由软件程序发出的,用于请求操作系统提供的服务或处理某些异常情况。
举例:系统调用、异常处理

FIQ(快速中断)在ARM处理器中具有比IRQ(普通中断)更高的优先级。

ARM寄存器结构


ARM有37个寄存器,包括:
1个程序计数器(PC,Program Counter)
1个当前程序状态寄存器(CPSR,Current Program Status Register)
5个保存的程序状态寄存器(SPSR,Saved Program Status Registers)
30个通用寄存器

特殊的几个寄存器


R13(SP,Stack Pointer):堆栈指针寄存器,用于指向当前堆栈顶。
R14(LR,Link Register):连接寄存器,用于保存子程序返回地址。
R15(PC,Program Counter):程序计数器,指向当前执行的指令。

简单实践

  1. .text
  2. b main
  3. nop
  4. b back
  5. nop
  6. nop
  7. nop
  8. nop
  9. nop
  10. main:
  11. mov r0,#3
  12. mov r4,#5
  13. mov r0,#3
  14. back:
  15. add r0,#7
  16. mov r1,r0
  17. swi 3
  18. mov r3,#4
  19. loop:
  20. b back
  21. .end


0x00000000是地址。
EA000006是机器码。
这里的b main表示跳转到main方法里面。
0x00000020就是main的位置。


R15(PC)记录的是下一条执行指令的位置。


mov r0,#3表示将3的值赋给r0寄存器,下面的几条指令是相同的操作。


add r0,#7然后add指令表示加法加上7结果值也就是10,16进制也就是A。
mov r1,r0r0的值复制给r1


swi 3触发一个软中断指令。
执行后发现Supervisor里面的值被触发了,切换到了Supervisor模式

CPSR寄存器


这两张图为我们呈现了CPSR寄存器字段。

条件位


N(Negative result from ALU):表示最近一次ALU操作的结果是负数。
Z(Zero result from ALU):表示最近一次ALU操作的结果是零。
C(ALU operation Carried out or borrow):表示最近一次ALU操作有进位或借位。
V(ALU operation oVerflowed):表示最近一次ALU操作发生溢出。

T位和J位


T位(Thumb状态位):决定处理器是工作在ARM状态(T=0)还是Thumb状态(T=1)。
Thumb状态是ARM处理器的一种工作模式,使用更紧凑的指令集。
J位(Jazelle状态位):通常与Java字节码执行有关,在普通应用中很少用到。

中断禁止位


I(IRQ禁止位):当I=1时,禁止普通中断(IRQ)。
F(FIQ禁止位):当F=1时,禁止快速中断(FIQ)。

M模式位(处理器模式位)


处理器可以工作在不同的模式下,不同的模式有不同的特权级和用途。
模式位用5位二进制数表示,如下:

10000(User mode)[10]:用户模式,普通应用程序运行的模式。
10010(IRQ mode)[12]:中断请求模式,用于处理中断。
10011(SVC mode)[13]:超级用户模式,用于操作系统服务。
10111(Abort mode)[17]:数据访问中止模式,用于处理存储器访问错误。
11011(Undefined mode)[1B]:未定义指令模式,用于处理未定义指令。
11111(System mode)[1F]:系统模式,高特权级,用于操作系统。

SPSR与CPSR相同,不同在于SPSR用于处理异常的状态,CPSR记录的是当前的状态


那么我们刚刚执行的swi 3就很好解释了。
由于I = 1,F = 1禁止普通中断和快速中断。
M = 0x13也就是10111切换为Supervisor模式。
R14指向了一个地址,用于保存子程序返回地址。


Internal下面的Mode同样显示出当前的模式。

操作指令


msr指令:将CPSR寄存器的值读到一个通用寄存器中,例如mrs r0, CPSR表示将CPSR的值读到寄存器r0中。
mrs指令:将一个通用寄存器的值写到CPSR寄存器中,例如msr CPSR, r0表示将寄存器r0的值写到CPSR中。

mov指令不能直接操作CPSR。


接下来我们通过msr指令将其切换为User模式。
并将读取到R0寄存器中。

  1. .text
  2. b main
  3. nop
  4. nop
  5. nop
  6. nop
  7. nop
  8. nop
  9. nop
  10. main:
  11. msr CPSR,#0x10
  12. mrs r0,CPSR


可以看到我们操作成功,但是如果想切回Supervisor是不行的,因为权限不够。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Kubernetes AppARMor 简单运用

Kubernetes AppArmor 简单运用[TOC] AppArmor 简介AppArmor 是一个有效且易于使用的 Linux 应用程序安全系统。AppArmor 通...

docker swARM 与 k8s 区别 几种集群方案的对比

下面以docker部署为主,主流的容器化集群部署方案主要有以下几种: Docker Compose:帮助在 同一个节点 上部署多个容器。D...

.net6使用nacos 集群部署,负载均衡调用 。docker swARM 集群部署.net6项目

我们这里的k8s测试环境暂时用不了了,这里先使用docker swarm来进行一下集群部署。.net6使用nacos实现服务注册与服务发现:h...

ARM 常用的指令

ARM 常用的指令[TOC] 搬移指令mov、msr和mrs指令就不讲了,上一篇写得有。and指令将第二个参数和第三个参数进行与运算。我...

ARM LoadStore架构

ARM LoadStore架构[TOC] LoadStore架构 存储器之间不能直接拷贝,必须通过寄存器做中转:在 ARM 架构中,数据传输只能通...

GNU ARM 汇编伪指令

GNU ARM 汇编伪指令[TOC] GNU ARM 汇编伪指令 汇编指令 描述 .section 定义内存段 .text 将定义符...

ARM 异常处理

ARM 异常处理[TOC] ARM 异常处理ARM异常处理是ARM处理器处理特殊事件的机制,这些事件可能来自硬件或软件。ARM异常类型的...

ARM8 64位汇编简介

ARM8 64位汇编简介[TOC] 版本差异 特性 ARM7 ARM8 内存 仅支持 32 位地址空间 支持 64 位和 32 位地址...

ARM8 汇编指令

ARM8 汇编指令[TOC] ARM8 汇编指令参考关于ARM8汇编指令可以参考线上链接:https://developer.arm.com/documentation/ddi0...

ARM8 异常处理

ARM8 异常处理[TOC] ARM8 异常向量表 ARMv8 异常向量表分类4大类(Execution Levels)EL3(Exception Level 3): 安全监...

.net Lib.HARMony框架学习笔记

.net Lib.Harmony框架学习笔记[TOC] Lib.Harmony框架介绍Lib.Harmony 是一个用于 .NET 应用程序的库,主要用于运行时的代...

ARM8 U-boot启动源码分析(学习笔记)

ARM8 U-boot启动源码分析(学习笔记)[TOC] 什么是U-Boot?U-Boot是嵌入式系统中首先执行的程序之一。也是开源引导程序。...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术