第2章ARM技术概述2.ppt
嵌入式原理及应用第二章 ARM技术概述廖京盛茂名学院计算机与电子信息学院自动化系电气教研室2.8 ARM920T内部功能及特点2.6 数据类型n字节(字节(ByteByte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位。n字(字(WordWord):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位。(注:字必须与(注:字必须与4 4字节的边界对准。)字节的边界对准。)n半字(半字(Half-WordHalf-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。(注:半字必须与(注:半字必须与2 2字节的边界对准。)字节的边界对准。)1112342ARMARM的体系结构的体系结构ARMARM的指令存储结构的指令存储结构THUMBTHUMB的指令存储结构的指令存储结构3232位位存储存储结构结构1616位位存存储储结结构构2.6.3 存储器格式ARM体系结构所支持的最大寻址空间为体系结构所支持的最大寻址空间为4GB(232字节)字节)u大端格式(大端格式(Big Endian)字数据的高字节存储在低地址中,而字数据的低字节则存字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。放在高地址中。u小端格式小端格式(Little Endian)低地址中存放的是字数据的低字节,高地址存放的是字数低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。据的高字节。2.6.3 存储器格式(0H)=0123H(4H)=4567H(8H)=89ABHBig Endian(0H)=3210H(4H)=7654H(8H)=BA98HLittle Endian字地址字地址0123456789AB048低低高高字地址字地址0123456789AB048低低高高r0=0 x11223344STR r0,r1LDRB r2,r1r1=0 x100Memory3 2 1 0 0 1 2 3Byte Lane3124 2316 158 70112233443124 2316 158 70112233443124 2316 158 70112233443124 2316 158 70000000443124 2316 158 7000000011Little endianBig endianR2=0 x44R2=0 x11n简介 ARM体系结构支持7种处理器(内核工作)模式,分别为:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。这样的好处是可以更好的支持操作系统并提高工作效率。2.7 处理器模式处理器模式 处理器模式处理器模式说明说明备注备注 用户用户 (usr)正常程序工作模式正常程序工作模式不能直接切换到其它模式不能直接切换到其它模式 系统系统 (sys)用于支持操作系统的特权用于支持操作系统的特权任务等任务等与用户模式类似,但具有可以与用户模式类似,但具有可以直接切换到其它模式等特权直接切换到其它模式等特权 快中断快中断 (fiq)支持高速数据传输及通道支持高速数据传输及通道处理处理FIQ异常响应时进入此模式异常响应时进入此模式 中断中断 (irq)用于通用中断处理用于通用中断处理IRQ异常响应时进入此模式异常响应时进入此模式 管理管理 (svc)操作系统保护代码操作系统保护代码系统复位和软件中断响应时进系统复位和软件中断响应时进入此模式入此模式 中止中止 (abt)用于支持虚拟内存和用于支持虚拟内存和/或或存储器保护存储器保护在在ARM7TDMI没有大用处没有大用处 未定义未定义(und)支持硬件协处理器的软件支持硬件协处理器的软件仿真仿真未定义指令异常响应时进入此未定义指令异常响应时进入此模式模式n处理器模式2.7 处理器模式处理器模式 n特权模式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。未定义 (und)中止 (abt)管理 (svc)中断 (irq)快中断 (fiq)系统 (sys)2.4 处理器模式 n异常模式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 未定义 (und)中止 (abt)管理 (svc)中断 (irq)快中断 (fiq)这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。2.4 处理器模式 n用户和系统模式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。系统 (sys)用户 (usr)2.7 处理器模式 处理器启动时的模式转换图处理器启动时的模式转换图管理模式管理模式SVC(Supervisor)多种特权模式变化多种特权模式变化用户程序的运行模式用户程序的运行模式 复位后复位后缺省模式缺省模式主要完成各主要完成各模式的堆栈模式的堆栈设置,注意设置,注意不要进入用不要进入用户模式户模式一般为用户一般为用户模式模式UserARM微处理器的处理器模式(2)ARM微处理器的运行模式可以通过软件改变(特权模式),微处理器的运行模式可以通过软件改变(特权模式),也可以通过外部中断或异常处理改变。也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。也户模式下时,某些被保护的系统资源是不能被访问的。也不能改变模式。除非异常发生。不能改变模式。除非异常发生。特权模式可以自由地访问系统资源和改变模式。特权模式可以自由地访问系统资源和改变模式。ARM ARM存储系统有非常灵活的体系结构,可存储系统有非常灵活的体系结构,可以适应不同的嵌入式应用系统的需要。以适应不同的嵌入式应用系统的需要。ARMARM存存储器系统可以使用简单的平板式地址映射机制储器系统可以使用简单的平板式地址映射机制(就像一些简单的单片机一样,地址空间的分(就像一些简单的单片机一样,地址空间的分配方式是固定的,系统中各部分都使用物理地配方式是固定的,系统中各部分都使用物理地址),也可以使用其他技术提供功能更为强大址),也可以使用其他技术提供功能更为强大的存储系统。的存储系统。2.8 ARM2.8 ARM存储系统存储系统 例如:例如:(1 1)系统可能提供多种类型的存储器件,)系统可能提供多种类型的存储器件,如如FlashFlash、ROMROM、SRAMSRAM等;等;(2 2)CacheCache技术;技术;(3 3)写缓存技术()写缓存技术(write bufferswrite buffers););(4 4)虚拟内存和)虚拟内存和I/OI/O地址映射技术。地址映射技术。大多数的系统通过下面的方法之一可实大多数的系统通过下面的方法之一可实现对复杂存储系统的管理。现对复杂存储系统的管理。(1 1)使用)使用CacheCache,缩小处理器和存储系统,缩小处理器和存储系统速度差别,从而提高系统的整体性能。速度差别,从而提高系统的整体性能。(2 2)使用内存映射技术实现虚拟空间到)使用内存映射技术实现虚拟空间到物理空间的映射。物理空间的映射。(3 3)引入存储保护机制,增强系统的安)引入存储保护机制,增强系统的安全性。全性。(4 4)引入一些机制保证将)引入一些机制保证将I/OI/O操作映射成操作映射成内存操作后,各种内存操作后,各种I/OI/O操作能够得到正确的结操作能够得到正确的结果。果。(1 1)内核级的寄存器。)内核级的寄存器。(2 2)芯片级的紧耦合存储器)芯片级的紧耦合存储器TCMTCM。(3 3)芯片级的片上)芯片级的片上CacheCache存储器的容量在存储器的容量在8 832KB32KB之间,访问时间大约为之间,访问时间大约为10ns10ns。(4 4)板卡级的)板卡级的DRAMDRAM。(5 5)外设级的后援存储器,通常是硬盘,)外设级的后援存储器,通常是硬盘,可能从几百可能从几百MBMB到几个到几个GBGB,访问时间为几十,访问时间为几十msms。ARM的存储器系统由多级构成(图2-4)2.8.1 协处理器(协处理器(CP15)ARM ARM处理器支持处理器支持1616个协处理器。个协处理器。CP15CP15,即通常所说的系统控制协处理器,即通常所说的系统控制协处理器(System Control CoprocesssorSystem Control Coprocesssor),它负责),它负责完成大部分的存储系统管理。完成大部分的存储系统管理。CP15CP15包含包含1616个个3232位寄存器,其编号为位寄存器,其编号为0 01515。CP15CP15中的寄存器可能是只读的,也可能中的寄存器可能是只读的,也可能是只写的,还有一些是可读可写的。是只写的,还有一些是可读可写的。2.8.2 存储管理单元(存储管理单元(MMU)在创建多任务嵌入式系统时,最好有一个在创建多任务嵌入式系统时,最好有一个简单的方式来编写、装载及运行各自独立的任简单的方式来编写、装载及运行各自独立的任务。目前大多数的嵌入式系统不再使用自己定务。目前大多数的嵌入式系统不再使用自己定制的控制系统,而使用操作系统来简化这个过制的控制系统,而使用操作系统来简化这个过程。较高级的操作系统采用基于硬件的存储管程。较高级的操作系统采用基于硬件的存储管理单元(理单元(MMUMMU)来实现上述操作。)来实现上述操作。MMU MMU提供的一个关键服务是使各个任务作提供的一个关键服务是使各个任务作为各自独立的程序在其自己的私有存储空间中为各自独立的程序在其自己的私有存储空间中运行。在带运行。在带MMUMMU的操作系统控制下,运行的任的操作系统控制下,运行的任务无须知道其他与之无关的任务的存储需求情务无须知道其他与之无关的任务的存储需求情况,这就简化了各个任务的设计。况,这就简化了各个任务的设计。MMU MMU提供了一些资源以允许使用虚拟存储提供了一些资源以允许使用虚拟存储器(将系统物理存储器重新编址,可将其看成器(将系统物理存储器重新编址,可将其看成一个独立于系统物理存储器的存储空间)。一个独立于系统物理存储器的存储空间)。MMUMMU作为转换器,将程序和数据的虚拟地址作为转换器,将程序和数据的虚拟地址(编译时的连接地址)转换成实际的物理地址,(编译时的连接地址)转换成实际的物理地址,即在物理主存中的地址。这个转换过程允许运即在物理主存中的地址。这个转换过程允许运行的多个程序使用相同的虚拟地址,而各自存行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置。储在物理存储器的不同位置。这样存储器就有两种类型的地址:虚拟地这样存储器就有两种类型的地址:虚拟地址和物理地址。址和物理地址。2.8.3 高速缓冲存储器(高速缓冲存储器(Cache)Cache Cache是一个容量小但存取速度非常快的是一个容量小但存取速度非常快的存储器,它保存最近用到的存储器数据副本。存储器,它保存最近用到的存储器数据副本。CacheCache经常与写缓存器(经常与写缓存器(write bufferwrite buffer)一起)一起使用。使用。通过引入通过引入CacheCache和写缓存区,存储系统的和写缓存区,存储系统的性能得到了很大的提高,但同时也带来了一些性能得到了很大的提高,但同时也带来了一些问题。问题。2.9 2.9 流流 水水 线线2.9.1 流水线的概念与原理流水线的概念与原理 处理器按照一系列步骤来执行每一条指令,处理器按照一系列步骤来执行每一条指令,典型的步骤如下:典型的步骤如下:(1 1)从存储器读取指令()从存储器读取指令(fetchfetch););(2 2)译码以鉴别它是属于哪一条指令)译码以鉴别它是属于哪一条指令(decodedecode););(3 3)从指令中提取指令的操作数(这些)从指令中提取指令的操作数(这些操作数往往存在于寄存器中)(操作数往往存在于寄存器中)(regreg););(4 4)将操作数进行组合以得到结果或存)将操作数进行组合以得到结果或存储器地址(储器地址(ALUALU););(5 5)如果需要,则访问存储器以存储数)如果需要,则访问存储器以存储数据(据(memmem););(6 6)将结果写回到寄存器堆()将结果写回到寄存器堆(resres)。)。2.9.2 流水线的分类流水线的分类 到到ARM7ARM7为止的为止的ARMARM处理器使用简单的处理器使用简单的3 3级级流水线,它包括下列流水线级。流水线,它包括下列流水线级。(1 1)取指令()取指令(fetchfetch):从寄存器装载):从寄存器装载一条指令。一条指令。(2 2)译码()译码(decodedecode):识别被执行的指):识别被执行的指令,并为下一个周期准备数据通路的控制信号。令,并为下一个周期准备数据通路的控制信号。在这一级,指令占有译码逻辑,不占用数据通在这一级,指令占有译码逻辑,不占用数据通路。路。(3 3)执行()执行(excuteexcute):处理指令并将结):处理指令并将结果写回寄存器。果写回寄存器。1 13 3级流水线级流水线ARMARM组织组织 在在ARM9TDMIARM9TDMI中使用了典型的中使用了典型的5 5级流水线,级流水线,5 5级流水线包括下面的流水线级。级流水线包括下面的流水线级。(1 1)取指令()取指令(fetchfetch):从存储器中取出):从存储器中取出指令,并将其放入指令流水线。指令,并将其放入指令流水线。(2 2)译码()译码(decodedecode):指令被译码,从):指令被译码,从寄存器堆中读取寄存器操作数。在寄存器堆中寄存器堆中读取寄存器操作数。在寄存器堆中有有3 3个操作数读端口,因此,大多数个操作数读端口,因此,大多数ARMARM指令能指令能在在1 1个周期内读取其操作数。个周期内读取其操作数。2 25 5级流水线级流水线ARMARM组织组织 (3 3)执行()执行(executeexecute):将其中):将其中1 1个操作个操作数移位,并在数移位,并在ALUALU中产生结果。如果指令是中产生结果。如果指令是LoadLoad或或StoreStore指令,则在指令,则在ALUALU中计算存储器的地中计算存储器的地址。址。(4 4)缓冲)缓冲/数据(数据(buffer/databuffer/data):如果):如果需要则访问数据存储器,否则需要则访问数据存储器,否则ALUALU只是简单地只是简单地缓冲缓冲1 1个时钟周期。个时钟周期。(5 5)回写()回写(write-backwrite-back):将指令的结果):将指令的结果回写到寄存器堆,包括任何从寄存器读出的数回写到寄存器堆,包括任何从寄存器读出的数据。据。在在ARM10ARM10中,将流水线的级数增加到中,将流水线的级数增加到6 6级,级,使系统的平均处理能力达到了使系统的平均处理能力达到了1.3DMIPS/MHz1.3DMIPS/MHz。3 36 6级流水线级流水线ARMARM组织组织图图图图2-4 62-4 6级级级级流水流水流水流水线线线线指令的指令的指令的指令的执执执执行行行行过过过过程程程程2.9.3 影响流水线性能的因素影响流水线性能的因素1 1互锁互锁2 2跳转指令跳转指令简介简介2.10 寄存器组织寄存器组织nARM处理器有处理器有37(31+6)个物理寄存器个物理寄存器,有有18个可编程访问的寄存器。个可编程访问的寄存器。n寄存器被安排成部分重叠的组。在不同的寄存器被安排成部分重叠的组。在不同的工作模式和处理器状态下,程序员可以访工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。问的寄存器也不尽相同。n分组的寄存器在处理处理器异常和特权操分组的寄存器在处理处理器异常和特权操作时可得到快速的上下文切换。作时可得到快速的上下文切换。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiqARM状态各模式下的寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abt SPSR_undSPSR_irqSPSR_fiqARM状态各模式下的寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_svcCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有的37个寄存器,分成两大类:31个通用32位寄存器;6个状态寄存器。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abt SPSR_undSPSR_irqSPSR_fiq无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用户用户无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系统系统SPSR_svcCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定义未定义SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中断中断SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中断快中断ARM状态各模式下可以访问的寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0 在汇编语言中寄存器R0R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0 其中R0R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8 寄存器R8R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8 寄存器R8R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiq一般的通用寄存器 寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiq堆栈指针寄存器R13(SP)寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_svcSPSR_abt SPSR_undSPSR_irqSPSR_fiq链接寄存器R14(LR)R14为链接寄存器(LR),在结构上有两个特殊功能:在每种模式下,模式自身的R14版本用于保存子程序返回地址;当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。Lable程序A程序BR14nR14寄存器与子程序调用BL Lable地址A?MOV PC,LRR14(地址A)Lable?1.程序A执行过程中调用程序B;操作流程2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;2.10 寄存器组织寄存器组织nR14寄存器与异常发生 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。2.10 寄存器组织寄存器组织nR14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。2.10 寄存器组织寄存器组织nR14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB.XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏nR14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AaB.XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏IRQ模式下的程序BareturnB.XA地址B地址B4.如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序;5.硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;被破坏6.在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;returnreturn 解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。2.10 寄存器组织寄存器组织寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abt SPSR_undSPSR_irqSPSR_fiq程序计数器R15(PC)寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。n读R15的限制 正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDR R0,PC?PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码2.10 寄存器组织寄存器组织n写R15的限制 正常操作时,写入正常操作时,写入R15 R15 的值被当作一个的值被当作一个指令地址,程序从这个地址处继续执行(相指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。当于执行一次无条件跳转)。2.10 寄存器组织寄存器组织n写R15的限制 由于ARM指令以字为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0 xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。2.10 寄存器组织寄存器组织寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R