您的位置 首页 发布

ARM的2种作业状况,7种作业形式和37个寄存器

一、ARM处理器的两种工作状态:1、ARM状态:32位,ARM状态执行字对齐的32位ARM指令。2、Thumb状态,16位,执行半字对齐的16位注:1、ARM和T…

一、ARM处理器的两种作业状况

1、ARM状况:32位,ARM状况履行字对齐的32位ARM指令。

2、Thumb状况,16位,履行半字对齐的16位

注:1、ARM和Thumb两种状况之间的切换不影响处理器的作业形式寄存器的内容。

2、ARM处理器在处理反常时,不过处理器处于什么状况,则都将切换到ARM状况。

二、ARM处理器的7种形式:

CPSR(其时程序状况寄存器)的低5位用于界说其时操作形式,如图示:

1、用户形式(User,usr)

阐明:正常程序履行的形式

2、体系形式(System,sys)

阐明:用户形式与体系形式两者运用相同的寄存器,都没有SPSR(Saved Program Statement Register,已保存程序状况寄存器),但体系形式比用户形式有更高的权限。3、快间断形式(Fast Interrupt Request,FIR)

4、一般间断形式(IRQ,Interrupt ReQuest)

5、管理形式(Supervisor,SVC)

阐明:体系复位或开机时则进入到SVC形式下

6、间断(abort)

阐明:当遇到软间断(SWI,Software Interrupt)时,也将进入到SVC形式下

7、未界说(undefine)

阐明:用于支撑经过软件政策硬件的协处理器

阐明:1、用户形式外,其它6种形式称为特权形式。所谓特权形式,即具有如下权力:a.MRS(把状况寄存器的内容放到通用寄存器);b.MSR(把通用寄存器的内容放到状况寄存器中)。因为状况寄存器中的内容不能够改动,因而要先把内容仿制到通用寄存器中,然后修正通用寄存器中的内容,再把通用寄存器中的内容仿制给状况寄存器中即可完结“修正状况寄存器”的使命。

2、剩余的六种形式中除掉体系形式外,统称为反常形式。

三、ARM指令中有37个寄存器,有31个通用寄存器和6个状况寄存器。

原因:ARM处理器共有37个寄存器,其间包含:31个通用寄存器,包含程序计数器(PC)在内,这些寄存器都是32位寄存器,以及6个32位状况寄存器。但现在只运用了其间12位。ARM处理器共有7种不同的处理器形式,在每一种处理器形式中有一组相应的寄存器组。恣意时间(也便是恣意的处理器形式下),可见的寄存器包含15个通用寄存器(R0~R14)、一个或两个状况寄存器及程序计数器(PC)。在一切的寄存器中,有些是各形式共用的同一个物理寄存器;有一些寄存器是各形式自己具有的独立的物理寄存器。 体系形式和用户形式同享相同的寄存器。用户、体系形式没有“保存的程序状况寄存器(SPSR)”,而其他5种形式别离有一个对应的“保存的状况寄存器(SPSR)”,即共五个SPSR,七个形式共用一个“其时程序状况寄存器(CPSR)”,即共六个状况寄存器,还有31个通用寄存器。

3.1 ARM作业状况下的寄存器组织
通用寄存器:
通用寄存器包含R0~R15,能够分为三类:
─ 未分组寄存器R0~R7
─ 分组寄存器R8~R14
─ 程序计数器PC(R15)
未分组寄存器R0~R7:
在一切的运转形式下,未分组寄存器都指向同一个物理寄存器,他们未被体系用作特别的用处,因而,在间断或反常处理进行运转形式转化时,因为不同的处理器运转形式均运用相同的物理寄存器,可能会形成寄存器中数据的损坏,这一点在进行程序设计时应引起留意。
分组寄存器R8~R14
关于分组寄存器,他们每一次所拜访的物理寄存器与处理器其时的运转形式有关。
关于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当运用fiq形式时,拜访寄存器R8_fiq~R12_fiq;当运用除fiq形式以外的其他形式时,拜访寄存器R8_usr~R12_usr。
关于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其间的一个是用户形式与体系形式共用,别的5个物理寄存器对应于其他5种不同的运转形式。
选用以下的记号来区别不同的物理寄存器:
R13_
R14_
其间,mode为以下几种形式之一:usr、fiq、irq、svc、abt、und。
寄存器R13在ARM指令中常用作仓库指针,但这仅仅一种习惯用法,用户也可运用其他的寄存器作为仓库指针。而在Thumb指令会集,某些指令强制性的要求运用R13作为仓库指针。
因为处理器的每种运转形式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种形式下的R13,使其指向该运转形式的栈空 间,这样,当程序的运转进入反常形式时,能够将需求维护的寄存器放入R13所指向的仓库,而当程序从反常形式回来时,则从对应的仓库中康复,选用这种方法 能够确保反常产生后程序的正常履行。
R14也称作子程序衔接寄存器(Subroutine Link Register)或衔接寄存器LR。当履行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他状况下,R14用作通用寄存器。与 之相似,当产生间断或反常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的回来 值。
寄存器R14常用在如下的状况:
在每一种运转形式下,都可用R14保存子程序的回来地址,当用BL或BLX指令调用子程序时,将PC的其时值复制给R14,履行完子程序后,又将R14的值复制回PC,即可完结子程序的调用回来。以上的描绘可用指令完结:
1、履行以下恣意一条指令:
MOV PC,LR
BX LR
2、在子程序入口处运用以下指令将R14存入仓库:
STMFD SP!,{,LR}
对应的,运用以下指令能够完结子程序回来:
LDMFD SP!,{,PC}
R14也可作为通用寄存器。
程序计数器PC(R15)
寄存器R15用作程序计数器(PC)。在ARM状况下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状况下,位[0]为0,位 [31:1]用于保存PC;尽管能够用作通用寄存器,但是有一些指令在运用R15时有一些特别约束,若不留意,履行的成果将是不行意料的。在ARM状况 下,PC的0和1位是0,在Thumb状况下,PC的0位是0。
R15尽管也可用作通用寄存器,但一般不这么运用,因为对R15的运用有一些特别的约束,当违反了这些约束时,程序的履行成果是不知道的。
因为ARM体系结构选用了多级流水线技能,关于ARM指令集而言,PC总是指向其时指令的下两条指令的地址,即PC的值为其时指令的地址值加8个字节。

在ARM状况下,任一时间能够拜访以上所评论的16个通用寄存器和一到两个状况寄存器。在非用户形式(特权形式)下,则可拜访到特定形式分组寄存器,上图阐明在每一种运转形式下,哪一些寄存器是能够拜访的。
寄存器R16:
寄存器R16用作CPSR(Current Program Status Register,其时程序状况寄存器),CPSR可在任何运转形式下被拜访,它包含条件标志位、间断制止位、其时处理器形式标志位,以及其他一些相关的操控和状况位。
每一种运转形式下又都有一个专用的物理状况寄存器,称为SPSR(Saved Program Status Register,备份的程序状况寄存器),当反常产生时,SPSR用于保存CPSR的其时值,从反常退出时则可由SPSR来康复CPSR。
因为用户形式和体系形式不属于反常形式,他们没有SPSR,当在这两种形式下拜访SPSR,成果是不知道的。
3.2 Thumb作业状况下的寄存器组织
Thumb状况下的寄存器集是ARM状况下寄存器集的一个子集,程序能够直接拜访8个通用寄存器(R7~R0)、程序计数器(PC)、仓库指针(SP)、 衔接寄存器(LR)和CPSR。一起,在每一种特权形式下都有一组SP、LR和SPSR。图2.4标明Thumb状况下的寄存器组织。

Thumb状况下的寄存器组织与ARM状况下的寄存器组织的联系:
─ Thumb状况下和ARM状况下的R0~R7是相同的。
─ Thumb状况下和ARM状况下的CPSR和一切的SPSR是相同的。
─ Thumb状况下的SP对应于ARM状况下的R13。
─ Thumb状况下的LR对应于ARM状况下的R14。
─ Thumb状况下的程序计数器对应于ARM状况下R15
以上的对应联系如图2.5所示:

拜访THUMB状况下的高位寄存器(Hi-registers):
在Thumb状况下,高位寄存器R8~R15并不是规范寄存器集的一部分,但可运用汇编语言程序受约束的拜访这些寄存器,将其用作快速的暂存器。运用带特 殊变量的MOV指令,数据能够在低位寄存器和高位寄存器之间进行传送;高位寄存器的值能够运用CMP和ADD指令进行比较或加上低位寄存器中的值。

程序状况寄存器
ARM体系结构包含一个其时程序状况寄存器(CPSR)和五个备份的程序状况寄存器(SPSRs)。备份的程序状况寄存器用来进行反常处理,其功用包含:
─ 保存ALU中的其时操作信息
─ 操控答应和制止间断
─ 设置处理器的运转形式
程序状况寄存器的每一位的组织如下图所示:

条件码标志(Condition Code Flags)
N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的成果所改动,而且能够决议某条指令是否被履行。
在ARM状况下,绝大多数的指令都是有条件履行的。
在Thumb状况下,仅有分支指令是有条件履行的。

N  Negative        假如成果是负数则置位Z  Zero            假如成果是零则置位C  Carry           假如产生进位则置位O  Overflow        假如产生溢出则置位

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/274419.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部