ARM体系结构笔记①---(ARM的7种模式、寄存器、存储空间、指令、中断、最小系统)

本文所有资料来至互联网,笔者加以整理和归纳,仅供以后复习

一、ARM处理器共有7种运行模式,如下表示:

处理器模式

处理器模式描述

用户模式(User,usr)

正常程序执行的模式

快速中断模式(FIQ,fiq)

用于高速数据传输和通道处理

普通中断模式(IRQ,irq)

用于通常的中断处理

监管模式(Supervisor,svc)

供操作系统使用的一种保护模式

数据访问中止模式(Abort,abt)

用于虚拟存储及存储保护

未定义指令中止模式(Undefined,und)

用于支持通过软件方针硬件的协处理器

系统模式(System,sys)

用于运行特权级的操作系统任务












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

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

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

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

二、ARM寄存器

ARM共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器. 都是32位寄存器,但目前状态寄存器只使用了其中12位

任意时刻(也就是任意的处理器模式下),可见的寄存器包括15个通用寄存器(R0~R14)、一个或两个状态寄存器及程序计数器(PC)。

a、寄存器R14又被称为连接寄存器(Link Register,LR),在ARM体系中具有下面两种殊的作用:

i. 每一种处理器模式自己的物理R14中存放当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。

ii. 当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移量。具体的返回方式与子程序返回方式基本相同。


b、每一种异常模式拥有自己的物理的R13。应用程序初始化该R13,使其指向该异常模式专用的栈地址。当进入异常模式时,可以将需要使用的寄存器保存在R13所指的栈中;当退出异常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使异常处理程序不会破坏被其中断程序的运行现场。


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


d、状态寄存器

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

每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program StatusRegister,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。由于用户模式和系统模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。


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处理器

    T=0表示执行ARM指令

    T=1表示执行Thumb指令

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

    T=  0表示执行ARM指令

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

三、ARM存储空间

        ARM的地址空间也可以看作是230个32位的字单元(4字节)。这些字单元的地址可以被4整除,也就是说该地址的低两位为0b00。地址为A的字数包括地址A、A+1、A+2、A+3这4个字节单元的内容。但是在字单元中,4个字节哪一个是高位字节,哪一个是低位字节,则有两种不同的格式:big-endian格式和little-endian格式。

四、ARM指令

ARM指令系统属于RISC指令系统。标准的ARM指令每条都是32位,有些ARM核还可以执行16位的Thumb指令集。一般地,ARM指令具有以下特点[9]

a、指令的条件执行

ARM指令都是条件执行,条件标志位位于程序代码字节的cond位(位28-31,下文会介绍)。根据cond的不同编码,可以选择根据条件码标志决定指令的执行。


b、  灵活的第二操作数

ARM指令的另一个重要的特点是数据处理类指令有灵活的第二操作数operand2(位与程序代码的位0-11)。它既可以是立即数,也可以是逻辑运算数,使得ARM指令可以在读取数值的同时进行算术和移位操作。


c、协处理器的作用

ARM内核可提供协处理接口,通过扩展协处理器完成更加复杂的功能。因此ARM

指令中还包括了多条协处理器指令,使用多达16个协处理器,允许将其他处理器通过协处理器接口进行紧耦合;ARM还包括几种内存管理单元的变种,包括简单的内存保护到复杂的页面层次。


d、Thumb指令

ARM在有的版本支持16位Thumb指令。Thumb指令集的整体执行速度比ARM

32位指令集快,而且提高了代码密度。


e、具有RISC指令的特点

由于ARM指令属于RISC指令,所以多具有RISC指令的特点,指令少,且等长,便于充分利用流水线技术,使用多寄存器,且为简单的Load和Store指令。

        ARM指令按功能大致可以分为跳转指令、数据处理指令、乘法类指令、数据传送指令、协处理器类指令以及杂项指令(包括状态寄存器传送指令、乘法类指令、软件中断指令和断点指令)。 ARM指令包括60多个指令,并且支持多种寻址方式:寄存器寻址、立即数寻址、寄存器间接寻址、寄存器变址寻址、多寄存器寻址、堆栈寻址、块拷贝寻址以及相对寻址等。对于具体的指令集,可以参考相关文档。

五、ARM中断

        ARM体系中中断向量表中指定了各异常中断及处理程序的对应关系。它可以放在存储地址的低端,也可以放在存储地址的高端。异常中断向量表的大小位32字节,其中每个异常中断占据4个字节大小,保留了4个字节空间。

        每个异常中断对应的中断向量表中的4个字节的空间中放了一个跳转指令或者一个向PC寄存器中赋值的数据访问指令。通过这两种指令,程序将跳转到相应的异常中断处理程序处执行。

下表为中断向量表 :

中断向量偏移地址     异常中断类型            异常中断模式    优先级(6最低)

0x00                                    复位                    监管模式                         1

0x04                            未定义的指令            未定义指令中止模式      6

0x08                                软件中断                监管模式                          6

0x0c                            指令预取中止            中止模式                          5

0x10                            数据访问中止            中止模式                          2

0x14                                   保留                     未使用                          未使用

0x18                           普通中断请求             外部中断模式                 4

0x1c                           快速中断请求             快速中断模式                 3

六、ARM最小系统



参考资料来源:图片http://www.cnblogs.com/armlinux/archive/2011/03/23/2396833.html

                          文档:Bootloard的研究与实现.doc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章