ARM体系结构介绍

ARM 107浏览

下图所示的是ARM构架图。它由32位ALU、若干个32位通用寄存器以及状态寄存器、32×8位乘法器、32×32位桶形移位寄存器、指令译码以及控制逻辑、指令流水线和数据/地址寄存器组成。

1. ALU:它有两个操作数锁存器、加法器、逻辑功能、结果以及零检测逻辑构成

2. 桶形移位寄存器:ARM采用了32×32位的桶形移位寄存器,这样可以使在左移/右移n位、环移n位和算术右移n位等都可以一次完成。

3. 高速乘法器:乘法器一般采用“加一移位”的方法来实现乘法。ARM为了提高运算速度,则采用两位乘法的方法,根据乘数的2位来实现“加一移位”运算 ;ARM高速乘法器采用32×8位的结构,这样,可以降低集成度(其相应芯片面积不到并行乘法器的1/3)。

4. 浮点部件:浮点部件是作为选件供ARM构架使用。FPA10浮点加速器是作为协处理方式与ARM相连,并通过协处理指令的解释来执行。

5. 控制器:ARM的控制器采用的是硬接线的可编程逻辑阵列PLA。

6. 寄存器:具体的介绍参考下节的相关介绍。

除了用户模式之外的其他6种处理器模式称为特权模式(Privileged Modes)。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。其中,除系统模式外,其他5种特权模式又称为异常模式。

处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。大多数的用户程序运行在用户模式下,这时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。当需要进行处理器模式的切换时,应用程序可以产生异常处理,在异常处理过程中进行模式的切换。这种体系结构可以使操作系统控制整个系统的资源。

当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式中都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器(保证了程序运行状态)不被破坏。

系统模式并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式的切换。它主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式下的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏

2.2.2       ARM寄存器组介绍

ARM处理器一般共有37个寄存器,其中包括:

l         31个通用寄存器,包括程序计数器(PC)在内,这些寄存器都是32位寄存器;

l         6个状态寄存器,这些寄存器也是32位寄存器;

    上一节已经说过,ARM处理器共有7种不同的处理器模式,在每一种处理器模式中有一组相应的寄存器。任意时刻(也就是任意的处理器模式下),可见的寄存器包括15个通用寄存器(R0-R14)、一个或者两个状态寄存器以及程序计数器(PC)。在所有的寄存器中,有些是各模式共用的同一个物理寄存器;有些寄存器是各模式自己拥有的独立的物理寄存器。图3.1表示了各处理器模式下的可见寄存器:

从表3.1中可以看出,通用寄存器R0-R7在所有的处理器模式下指的都是同一个物理寄存器

而对于R8-R12寄存器组,除了在快速中断模式下有自己专有的物理寄存器,其它模式下也共有统一物理寄存器。

R13寄存器对应6个不同的物理寄存器,即除了前面提过的用户模式与系统模式共用一个寄存器外,其它模式都有相应的物理寄存器;一般地,R13寄存器在ARM中通常用作栈指针,在ARM指令中这只是一种习惯的用法,并没有任何指令强制性的使用R13作为栈指针。

R14寄存器又被称为连接寄存器(Link Register,LR),在ARM体系中有下面两种特殊的作用[6]

l         每一种处理器模式自己的物理R14中存放当前子程序的返回地址。当通过跳转指令调用子程序时,R14被设置为该子程序的返回地址;在子程序中,把R14的指赋值到程序计数器PC中时,子程序返回;

l         当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有个常数的偏移量。

       程序计数器R15又被记作PC。由于ARM采用了流水线机制,当正确读取了PC的值时,该值为当前指令地址加8个字节。也就是说,对于ARM指令集来说,PC指向当前指令的下两条指令的地址。由于ARM指令是字对齐的,PC值的第0位和第1位总为0。

CPSR(当前程序状态寄存器)可以在任何处理器模式下被访问。它包含了标志位、中断禁止位、当前处理器模式标志以及其它的一些控制和状态位。每一种处理器异常模式下都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断返回退出时,可以用SPSR种保存的值来恢复CPSR。由于用户模式和系统模式不是异常中断模式,所以它们没有SPSR。当用户模式或者系统模式中访问SPSR,将会产生不可预知的结果。

N(Negative)、Z(Zero)、C(Carry)、V(Overflow)统称为标志位。大部分的ARM指令可以根据CPSR中的这些条件标志位来选择性地执行。各条件标志位的具体含义如下:

N:当两个补码表示的有符号整数运算时,N=1表示运算的结果为负数;N=0表示运算结果为正数或零;

Z:Z=1表示运算结果为零;Z=0表示运算的结果不为零;

C:在加法指令中,当结果产生了进位,则C=1;其他情况下C=0;

   在减法指令中,当运算中发生借位,则C=0;其他情况下C=0;

V:对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出

CPSR的低8位称为控制位,当异常中断发生时这些位发生改变。在特权模式下,软件可以修改这些控制位:

I:普通中断禁止位;I=1时禁止IRQ中断。

F:快速中断禁止位;F=1时禁止FIQ中断。

T:对于ARMv4以及更高的版本的T系列的ARM处理器

l         T=0表示执行ARM指令

l         T=1表示执行Thumb指令

对于ARMv5以及更高版本的非T系列的ARM处理器

l         T=0表示执行ARM指令

l         T=1表示强制下一条执行的指令产生为定义指令中断

   Modes位控制处理器模式,在这不再赘述。