3.5.4 技术特征
1)指令长度及数据类型
ARM处理器可支持字节(8位)、半字(16位)、字(32位)3种数据类型,其中字需要4字节对齐、半字需要2字节对齐。所有的数据操作都以字为单位进行处理。加载/存储操作可以以字节、半字和字为单位与存储器间传送数据,加载时自动进行字节或半字的零扩展或符号扩展。
ARM处理器采用32位的体系结构,ARM指令长度为32位,与4字节边界对准;Thumb指令长度为16位,与2字节边界对准。
2)ARM处理器的工作状态
从编程的角度看,ARM处理器的工作状态一般有两种:ARM状态,此时处理器执行32位、字对齐的ARM指令;Thumb状态,此时处理器执行16位、半字对齐的Thumb指令。
ARM指令集和Thumb指令集均有切换处理器状态的指令,在程序执行过程中,处理器可以随时在两种工作状态之间切换,并且处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。但ARM处理器在开始执行代码时,应该处于ARM状态。当操作数寄存器的状态位为1时,可以采用执行BX指令的方法,使处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态发生异常(如IRQ、FIQ、Undef、Abort、Sw1等)时,则异常处理返回,并自动切换到Thumb状态。当操作数寄存器的状态位为0时,执行BX指令可以使处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
3)ARM体系结构的存储器格式
ARM体系结构将存储器看作从0地址开始的字节的线性组合。从第0个字节到第3个字节放置第一个存储的字数据,从第4个字节到第7个字节放置第二个存储的字数据,依次排列。作为32位的处理器,ARM体系结构所支持的最大寻址空间为4 GB。
ARM体系结构可以用两种方法存储字数据,称之为大端存储格式和小端存储格式。大端存储格式中字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。
4)处理器工作模式
用户模式下保护的系统资源是不能被访问的,此时应用程序也不能直接进行处理器模式的改变。当需要进行处理器模式改变时,应用程序可以产生异常处理,在异常处理过程中进行处理器模式的改变。这种体系结构可以使操作系统控制整个系统的资源。除了用户模式以外,其余的所有6种模式称为非用户模式或特权模式。在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的改变。其中FIQ、IRQ、特权模式、中止模式和未定义模式这5种模式又称为异常模式,常用于处理中断或异常,以及需要访问受保护的系统资源等情况。当应用程序发生异常中断时,处理器进入相应的异常模式。每一种异常模式下都有一组相应的寄存器,可以访问所用的系统资源,用来保证用户模式下的寄存器不被破坏。
系统模式仅在ARMV4及其以上版本中存在,该模式不能通过任何异常进入,且与用户模式有完全相同的寄存器,但不受用户模式的限制。它供需要访问系统资源的操作系统任务使用,但需要避免使用与异常模式有关的附加寄存器,以保证在任何异常出现时,都不会使任务的状态不可靠。
5)寄存器组织
ARM处理器共有37个32位寄存器,其中包括1个用作PC、1个用作CPSR、5个用作SPSR和30个通用寄存器。这些寄存器被布置在不同的组,但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决于处理器的工作状态及具体的运行模式。
在ARM状态下,任一时刻可以访问16个通用寄存器和1~2个状态寄存器。在非用户模式(特权模式)下,则可访问到特定模式分组寄存器。在ARM状态下有16个直接访问寄存器R0~R15,除R15寄存器外均为通用目的,可用来存储数据或地址值。除此之外,还有第17个寄存器用来存储状态信息。R14也称为子程序连接寄存或连接寄存器(LR)。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。寄存器R16用作当前程序状态寄存器(current program status register,CPSR),可在任何运行模式下被访问。它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
6)中断和异常管理
ARM处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。ARM对异常的处理按以下步骤操作:
(1)将下一条指令的地址存入相应连接寄存器(LR)。若异常是从ARM状态进入,则LR中保存的是下一条指令的地址;若异常是从Thumb状态进入,则在LR中保存当前PC的偏移量。这样,异常处理程序就不需要确定异常是从何种状态进入,程序在处理异常返回时能从正确的位置重新开始执行。例如在软件中断异常SW1中,指令MOV PC,R14svc总是返回到下一条指令,不管SW1是在ARM状态执行,还是在Thumb状态执行。
(2)将CPSR复制到相应的SPSR中。
(3)根据异常类型,强制设置CPSR的运行模式位。
(4)强制PC从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。进入异常处理前,可以设置中断禁止位,以禁止异常处理对中断的响应。如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态,异常处理完毕之后从异常返回。