您的位置 首页 基础

详解ARM处理寄存器与用户形式

ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄器包括:● 31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。● 6个状态寄存器,

ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄器包含:

● 31个通用寄存器,包含程序计数器(PC指针),均为32位的寄存器。

● 6个状况寄存器,用以标识CPU的作业状况及程序的运转状况,均为32位,现在只运用了其间的一部分。

ARM微处理器支撑7种运转形式,别离为:

● usr(用户形式):ARM处理器正常程序履行形式。

● fiq(快速间断形式):用于高速数据传输或通道处理

● irq(外部间断形式):用于通用的间断处理

● svc(管理形式):操作体系运用的维护形式

● abt (数据拜访停止形式): 当数据或指令预取停止时进入该形式,可用于虚拟存储及存储维护。

● sys(体系形式): 运转具有特权的操作体系使命。

● und(未定义指令间断形式):当未定义的指令履行时进入该形式,可用于支撑硬件协处理器的软件仿真。

ARM微处理器的运转形式能够经过软件改动,也能够经过外部间断或反常处理改动。

大多数的应用程序运转在用户形式下,当处理器运转在用户形式下时,某些被维护的体系资源是不能被拜访的。

除用户形式以外,其他的一切6种形式称之为非用户形式,或特权形式(Privileged Modes);其间除掉用户形式和体系形式以外的5种又称为反常形式(Exception Modes),常用于处理间断或反常,以及需求拜访受维护的体系资源等状况。

ARM处理器在每一种处理器形式下均有一组相应的寄存器与之对应。即在恣意一种处理器形式下,可拜访的寄存器包含15个通用寄存器(R0~R14)、一至二个状况寄存器和程序计数器。在一切的寄存器中,有些是在7种处理器形式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器形式下有不同的物理寄存器。

ARM处理器有32位ARM和16位Thumb两种作业状况。在32位ARM状况下履行字对齐的ARM指令,在16位Thumb状况下履行半字对齐的Thumb指令。

在Thumb状况下,程序计数器PC(Program Counter)运用位[1]挑选另一个半字。

ARM处理器在两种作业状况之间能够切换,切换不影响处理器的形式或寄存器的内容。

(1)当操作数寄存器的状况位(位[0])为1时,履行BX指令进入Thumb状况。假如处理器在Thumb状况进入反常,则当反常处理(IRQ、FIQ、Undef、Abort和SWI)回来时,主动转换到Thumb状况。

(2)当操作数寄存器的状况位(位[0])为0时,履行BX指令进入ARM状况,处理器进行反常处理(IRQ、FIQ、Reset、Undef、Abort和SWI)。在此状况下,把PC放入反常形式链接寄存器中。从反常向量地址开端履行也能够进入ARM状况。

n ARM处理器的寄存器安排

ARM处理器的37个寄存器被安排成部分堆叠的组,不能在任何形式都能够运用,寄存器的运用与处理器状况和作业形式有关。如图2.3.1所示,每种处理器形式运用不同的寄存器组。其间15个通用寄存器(R0~R14)、1或2个状况寄存器和程序计数器是通用的。

通用寄存器

通用寄存器(R0~R15)可分红不分组寄存器R0~R7、分组寄存器R8~R14和程序计数器R15 三类。

(1)不分组寄存器R0~R7

不分组寄存器R0~R7是真实的通用寄存器,能够作业在一切的处理器形式下,没有隐含的特别用处。

(2)分组寄存器R8~R14

分组寄存器R8~R14取决于当时的处理器形式,每种形式有专用的分组寄存器用于快速反常处理。

寄存器R8~Rl2可分为两组物理寄存器。一组用于FIQ形式,另一组国用于除FIQ以外的其他形式。第1组拜访R8_fiq~R12_fiq,答应快速间断处理。第二组拜访R8_usr~R12_usr,寄存器R8~R12没有任何指定的特别用处。

标明用户或体系形式运用的一般寄存器己被反常形式特定的另一寄存器所代替。

寄存器R13~R14可分为6个分组的物理寄存器。1个用于用户形式和体系形式,而其他5个别离用于svc、abt、und、irq和fiq五种反常形式。拜访时需求指定它们的形式,如:R13_,R14_;其间:能够从usr、svc、abt、und、irq和fiq六种形式中选取一个。

寄存器R13一般用作仓库指针,称作SP。每种反常形式都有自己的分组R13。一般R13应当被初始化成指向反常形式分配的仓库。在入口处,反常处理程序将用到的其他寄存器的值保存到仓库中;回来时,从头将这些值加载到寄存器。这种反常处理办法确保了反常呈现后不会导致履行程序的状况不可靠。

寄存器R14用作子程序链接寄存器,也称为链接寄存器LK (Link Register)。当履行带链接分支(BL)指令时,得到R15的备份。 在其他状况下,将R14作为通用寄存器。类似地,当间断或反常呈现时,或当间断或反常程序履行BL指令时,相应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的回来值。

FIQ形式有7个分组的寄存器R8~R14,映射为R8_fiq~R14_fiq。在ARM状况下,许多FIQ处理没必要保存任何寄存器。User、IRQ、Supervisor、Abort和Undefined形式每一种都包含两个分组的寄存器R13和R14的映射,答应每种形式都有自己的仓库和链接寄存器。

(3)程序计数器R15

寄存器R15用作程序计数器(PC)。在ARM状况,位[1:0]为0,位[31:2]保存PC。在Thumb状况,位[0]为0,位[31:1]保存PC。R15尽管也可用作通用寄存器,但一般不这么运用,因为对R15的运用有一些特别的约束,当违反了这些约束时,程序的履行成果是不知道的。

① 读程序计数器。指令读出的R15的值是指令地址加上8字节。因为ARM指令始终是字对齐的,所以读出成果值的位[1:0]总是0(在Thumb状况下,状况有所改变)。读PC首要用于快速地对接近的指令和数据进行方位无关寻址,包含程序中的方位无关搬运。

② 写程序计数器。写R15的一般成果是将写到R15中的值作为指令地址,并以此地址产生搬运。因为ARM指令要求字对齐,一般期望写到R15中值的位[1:0]=0b00。

因为ARM体系结构采用了多级流水线技能,关于ARM指令集而言,PC总是指向当时指令的下两条指令的地址,即PC的值为当时指令的地址值加8个字节。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部