ARM处理器

  • 目录

1,ARM基本概念

2, ARM处理器基础

2.1 ARM处理器的存储器结构

 2.2 ARM处理器的指令存储或数据存储、

2.3 处理器模式 

2.4 ARM内部寄存器 

2.4.1 ARM状态时的寄存器

3,Thumb状态下的寄存器       


1,ARM基本概念

首先要说明的是ARM不是单片机,它是一个只能做单片机内核的中央处理器;它的功能实现都离不开外围设备。ARM采用哈佛结构:数据和地址分开存储,有并发性。

它的主要特点是低功耗,高效能。

广泛应用于移动设备,嵌入式系统的精简指令集RISC架构,能进行独立编址,两倍带宽,执行效率更高。

  • 流水线

ARM一般采用三级流水线,3级流水线是ARM7TDM1的主要特征之一;在一些高级的指令系统中采用五级流水线(例如ARM9)ARM10采用6级,更高级的有13级流水线;流水线越多说明单位时间内执行指令的条数就越多,计算机在执行程序时,要分为3个步骤:

  • RISC/CISC

RISC:精简指令集,是在复杂指令集中选取一些相对比较简单,使用频率较高的指令作为精简指令集。精简指令集的指令周期和指令宽度是固定的

指令周期:执行一条指令所需要的时间,RISC大多属于单周期的指令。

指令宽度:指令被编译生成机器码所占用的内存空间是固定的。

CISC:复杂指令集,复杂指令集更加注重指令的功能性,指令周期和指令宽度不固定

复杂指令集主要应用在电脑CPU上。

2, ARM处理器基础

2.1 ARM处理器的存储器结构

关于指令:ARM的指令系统分为32位的ARM指令集和16位的Thumb指令集(ARM指令集的子集)。所以在存储时也要分为2种不同长度的存储。

关于数据:ARM可以对32bit的数据字进行操作,16bit的数据半字进行操作,8bit的字节进行操作,所以存储器可以分别存储32bit,16bie,8bit,这3种不同长度的数据。

那么怎么对不同长度的数据进行存储呢? 

对于不同长度的数据ARM规定有两种存储格式:分别是大端格式和小端格式

小端格式:在小端存储结构中,对于地址为A的字单元,其中字节单元由低位到高位。

大端格式:在大端存储结构中,对于地址为A的字单元,其中字节单元由高位到低位。

注意:大端格式和小端格式都要地址对准!

 2.2 ARM处理器的指令存储或数据存储、

  • 程序存储器/数据存储器

存储器有数据存储器和程序存储器两种。

  1. 程序存储器:用来存储指令代码
  2. 数据存储器:用来存放数据
  •  地址对准

在ARM中通常把正确的地址入口称为地址对准,把不正确的地址入口称为非地址对准。

32位的地址对准称为字对准;16位的地址对准称为半字对准。

对数据存储区操作时,要注意地址对准,不然会出现无法预测的结果

在对32位数据操作时,地址数据末两位(1:0)要符合为0的基本原则

在对16位的半字进行操作时,地址数据末尾(0)应该为0

2.3 处理器模式 

ARM处理器结构支持7种处理器模式:

  1. 1 用户模式(usr):ARM处理器正常的程序执行状态;
  2. 速中断模式(fiq):用于高速数据传输或通道管理;
  3.  外部中断模式(irq):用于通用/正常的中断处理;
  4. 管理模式(svc):操作系统使用的保护模式;
  5.  数据访问终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护;
  6. 系统模式(sys):运行具有特权的操作系统任务;
  7. 未定义指令中止模式(und):当未定义指令执行时进入该模式,可用于支持硬件协处理器的软件仿真

用户模式是最基本的处理器模式,大多数用户程序都是在用户模式下进行;除用户模式外其余的模式均称为特权模式。

需要注意的是:子啊用户模式下,应用程序不能实现模式的转换,不能访问被保护的某些资源,不能访问某些程序存储区,不能修改某些存储区等。

特权模式可以获得比用户模式更高的权限,在特权模式下可以访问更多的系统资源。

在特权模式中,除了系统模式外(系统模式不属于异常模式,不能通过异常中断进入),其他的5种又称为异常模式,它们可以通过异常中断切换到相应的处理模式中。

2.4 ARM内部寄存器 

ARM处理器有两种工作状态:

  • 工作在32位ARM指令时称为ARM工作状态
  • 工作在16位Thumb指令集时称为Thumb工作状态
2.4.1 ARM状态时的寄存器

ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个位状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。

通用寄存器包括R0~R15,可以分为3类:

  • 未分组寄存器R0~R7
  • 分组寄存器R8~R14
  • 程序计数器PC(R15)

1.未分组寄存器R0~R7

所有模式都可以使用R0~R7,这一组寄存器才是真正意义上的通用寄存器,在任何模式下都可以使用。 在有用户模式进入异常中断时要小心,在终端服务程序中,使用这些寄存器时最好先加以保护,在退出中断服务程序时再重新恢复以避免数据的不慎丢失。


2.分组寄存器R8~R12
对于R8~R12来说:当使用FIQ(快速中断模式)时,专门提供一组R8_fiq~R12_fiq寄存器供FIQ中断使用; 当使用除FIQ模式以外的其他模式时,访问寄存器R8_usr~R12_usr.

  • 关于寄存器R13,R14       

每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用,另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器:

R13_mode
R14_mode
其中mode可为:usr,fiq,irq,svc,abt,und.

寄存器R13在ARM指令中常用作堆栈指针SP,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针,而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针

R14称为子程序链接寄存器LR(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值(即子程序的返回地址)复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。

3,程序计数器PC(R15)

由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器。

寄存器R15用作程序计数器(PC)。

在ARM状态下,位[1:0]为0,位[31:2]用于保存PC。

在Thumb状态下,位[0]为0,位[31:1]用于保存PC。

  • R15是随时变化的:

PC总是指向当前指令的下两条指令的地址,程序每执行一个指令,R15的值都会相应的发生变化。在顺序执行程序时

  1. 如果执行的是ARM指令,则R15会顺序递增,递增值为4
  2. 如果执行的是Thumb指令,则R15会递增2
  3. 当发生异常中断时,R15中的值是中断向量
  4. 当发生程序跳转时,R15中的值是目标地址
  • R15中的地址值不是指向正在执行的指令

ARM处理器是多级流水线结构,ARM处理器在执行第1条指令的时候;第2条指令正在译码;第3条指令正在寻址,所以ARM总是指向第3条指令

假设执行的是ARM指令:

R15的值=当前执行的指令地址+8

假设执行的是Thumb指令:

R15的值=当前执行的指令+4

 4,寄存器R16/程序状态寄存器
寄存器R16用作CPSR(CurrentProgram Status Register,当前程序状态寄存器),

CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。

 每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器)

当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
由于用户模式和系统模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。

3,Thumb状态下的寄存器       

 Thumb状态下的寄存器的定义机器使用和ARM状态都是相同的:

  • 通用寄存器R0~R7只有一组,在物理上是唯一的,在各种模式下都能使用;
  • SP对栈指针寄存器共有6个,系统模式和用户模式共用一个,其他异常模式各有1个;
  • LR链接寄存器也共有6个,系统模式和用户模式共用1个,其他异常模式各有一个;
  • PC程序计数器只有1个,在所有模式下共用;
  • CPSR程序状态寄存器只有1个,各模式共用;
  • SPSR寄存器是一个用于保护状态寄存器的备用寄存器,在5种异常模式下各有1个,在异常中断时保护状态寄存器;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值