1、第3章 ARM微处理器体系结构与指令集主要内容o ARM体系结构的特点o ARM微处理器体系结构oARM处理器的工作模式oARM处理器的寄存器组织o流水线oARM处理器的存储oARM处理器的异常o ARM处理器的指令系统o ARM处理器的寻址方式o ARM指令集o Thumb指令集3.1 ARM体系结构的特点o RISC型处理器结构o Thumb指令集o 多处理器状态模式o 两种处理器工作状态o 嵌入式在线仿真调试o 灵活方便的接口o 低电压功耗的设计ARM微处理器的特点采用RISC架构的ARM微处理器一般具有如下特点:1、体积小、低功耗、低成本、高性能;3、支持Thumb(16位)/ARM(
2、32位)双指令集,能很好的兼容8位/16位器件;3、大量使用寄存器,指令执行速度更快;4、大多数数据操作都在寄存器中完成;5、寻址方式灵活简单,执行效率高;6、指令长度固定;3.2 ARM处理器体系结构嵌入式处理器的基本结构(1)o微处理器是整个系统的核心,通常由3大部分组成:控制单元、算术逻辑单元和寄存器。算术逻辑单元算术逻辑单元寄存器寄存器控制单元控制单元微处理器微处理器存储器存储器输入输入输出输出嵌入式处理器的基本结构(2)o控制单元:主要负责取指、译码和取操作数等基本动作,并发送主要的控制指令。控制单元中包括两个重要的寄存器:程序计数器(PC)和指令寄存器(IR)。程序计数器用于记录下
3、一条程序指令在内存中的位置,以便控制单元能到正确的内存位置取指;指令寄存器负责存放被控制单元所取的指令,通过译码,产生必要的控制信号送到算术逻辑单元进行相关的数据处理工作。嵌入式处理器的基本结构(2)o算术逻辑单元:算术逻辑单元分为两部分,一部分是算术运算单元,主要处理数值型的数据,进行数学运算,如加、减、乘、除或数值的比较;另一部分是逻辑运算单元,主要处理逻辑运算工作,如AND、OR、XOR或NOT等运算。嵌入式处理器的基本结构(2)o寄存器:用于存储暂时性的数据。主要是从存储器中所得到的数据(这些数据被送到算术逻辑单元中进行处理)和算术逻辑单元中处理好的数据(再进行算术逻辑运行或存入到存储
4、器中。3.2.1 ARM处理器的工作状态o处理器有两种工作状态:nARM:32位,执行字对准的ARM指令nThumb:16位,执行半字对准的Thumb指令oARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容ARM微处理器:处理器工作状态o进入Thumb状态:n执行BX指令,并设置操作数寄存器的状态(位0)为1。n在Thumb状态进入异常(IRQ,FIQ,UNDEF,ABORT,SWI etc.),当异常处理返回时自动转换到Thumb状态o进入ARM状态:n执行BX指令,并设置操作数寄存器的状态(位0)为0。n进入异常时,将PC放入异常模式链接寄存器中,从异常向量地址开始执行也可进
5、入ARM状态3.2.2 寄存器组织oARM处理器有37个寄存器n 3030个通用寄存器:堆栈及其他通用寄存器个通用寄存器:堆栈及其他通用寄存器n 6 6个状态寄存器个状态寄存器n 1 1个个PCPC(程序计数器)(程序计数器)o 这些寄存器不能同时看到o 不同的处理器状态和工作模式确定哪些寄存器是对编程者是可见的ARM微处理器:ARM State寄存器1.ARM状态下的通用寄存器通用寄存器包括R0R15,可以分为三类:o未分组寄存器R0R7;o分组寄存器R8R14o程序计数器PC(R15)未分组寄存器R0R7 n所有模式下,所有模式下,R0-R7R0-R7所对应的物理寄存器都是相所对应的物理寄
6、存器都是相同的同的 n这八个寄存器是真正意义上的通用寄存器,这八个寄存器是真正意义上的通用寄存器,ARMARM体系结构中对它们没有作任何特殊的假设,它体系结构中对它们没有作任何特殊的假设,它们的功能都是等同的。们的功能都是等同的。n在中断或者异常处理程序中一般都需要对这几在中断或者异常处理程序中一般都需要对这几个寄存器进行保存。个寄存器进行保存。分组寄存器R8R14n访问的物理寄存器取决于当前的处理器模式,若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。nR8-R13各有两组物理寄存器:一组为FIQ模式,另一组是除FIQ以外的其他模式。nR13-R14各有6个分组的物理寄
7、存器,一个用于用户模式和系统模式,其他5个分别用于5种异常模式。nR13(也被称为SP指针)被用作栈指针栈指针,通常在系统初始化时需要对所有模式下的SP指针赋值,当CPU在不同的模式时栈指针会被自动切换成相应模式下的值。nR14有两个用途,一是在调用子程序时用于保存调用返回调用子程序时用于保存调用返回地址地址,二是在发生异常时用于保存异常返回地址发生异常时用于保存异常返回地址。程序计数器PC(R15)n用作程序计数器用作程序计数器(PC)(PC),可以被读写,可以被读写n ARM state:bits 1:0ARM state:bits 1:0为为0 0,bits31:3bits31:3即为即
8、为 PC.PC.n THUMB stateTHUMB state:bit 0bit 0为为0 0,bits31:1bits31:1即为即为 PCPC3.ARM状态下的状态寄存器R16 o寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。o每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPS
9、R的当前值,从异常退出时则可由SPSR来恢复CPSR。o由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。CPSRoCPSR(当前程序状态寄存器)在所有的模式下都是可以读写的,它主要包含:n条件标志条件标志n中断使能标志中断使能标志n当前处理器的模式当前处理器的模式n其它的一些状态和控制标志其它的一些状态和控制标志ARM微处理器:程序状态寄存器o置0表示执行32bit的ARM指令o置1表示执行16bit的Thumb指令 NegativeZeroCarryOverflowIRQ中断的响应中断的响应:置置1:禁止响应:禁止响应置置0:允许响应:允许
10、响应FIQ中断的响应中断的响应:置置1:禁止响应:禁止响应置置0:允许响应:允许响应条件标志条件标志模式控制位模式控制位ARM/Thumb控制标志控制标志中断标志中断标志ARM微处理器:程序状态寄存器o 模式控制位M0-M4Thumb状态下的寄存器组织两种状态下的寄存器组织的关系o Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系:Thumb状态下和ARM状态下的R0R7是相同的。Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的。Thumb状态下的SP对应于ARM状态下的R13。Thumb状态下的LR对应于ARM状态下的R14。Thumb状态下的程序计数器对应于AR
11、M状态下R153.2.3 ARM的工作模式o CPU模式的转变:n 软件控制n 异常n 外部中断ARM微处理器:CPU模式UserUser模式模式程序不能访问有些受保护的资源程序不能访问有些受保护的资源只能通过异常的形式来改变只能通过异常的形式来改变CPUCPU的当前运行模式的当前运行模式特权模式特权模式可以存取可以存取系统中的系统中的任何资源任何资源SystemSystem模模式式与与UserUser模式的运行环境一样模式的运行环境一样但是它可以不受任何限制的访问任何资源但是它可以不受任何限制的访问任何资源该模式主要用于运行系统中的一些该模式主要用于运行系统中的一些特权任务特权任务FIQFI
12、Q模式模式IRQIRQ模式模式SupervisorSupervisor模式模式AbortAbort模式模式UndefinedUndefined模式模式异常模式异常模式:主要是在:主要是在外部中外部中断断或者程序执行或者程序执行非法操作非法操作时时会触发会触发3.2.4 流水线1 1 流水线的概念与原理流水线的概念与原理 处理器按照一系列步骤来执行每一条指令,处理器按照一系列步骤来执行每一条指令,典型的步骤如下:典型的步骤如下:(1 1)从存储器读取指令()从存储器读取指令(fetchfetch););(3 3)译码以鉴别它是属于哪一条指令)译码以鉴别它是属于哪一条指令(decodedecode
13、););(3 3)从指令中提取指令的操作数(这)从指令中提取指令的操作数(这些操作数往往存在于寄存器中)(些操作数往往存在于寄存器中)(regreg););(4 4)将操作数进行组合以得到结果或存)将操作数进行组合以得到结果或存储器地址(储器地址(ALUALU););(5 5)如果需要,则访问存储器以存储数)如果需要,则访问存储器以存储数据(据(memmem););(6 6)将结果写回到寄存器堆()将结果写回到寄存器堆(resres)。)。2 2 流水线的分类流水线的分类 到到ARM7ARM7为止的为止的ARMARM处理器使用简单的处理器使用简单的3 3级级流水线,它包括下列流水线级。流水线,
14、它包括下列流水线级。(1 1)取指令()取指令(fetchfetch):从寄存器装载):从寄存器装载一条指令。一条指令。(3 3)译码()译码(decodedecode):识别被执行的指):识别被执行的指令,并为下一个周期准备数据通路的控制信号。令,并为下一个周期准备数据通路的控制信号。在这一级,指令占有译码逻辑,不占用数据通在这一级,指令占有译码逻辑,不占用数据通路。路。(3 3)执行()执行(excuteexcute):处理指令并将结):处理指令并将结果写回寄存器。果写回寄存器。1 1)3 3级流水线级流水线ARMARM组织组织 在在ARM9TDMIARM9TDMI中使用了典型的中使用了典
15、型的5 5级流水线,级流水线,5 5级流水线包括下面的流水线级。级流水线包括下面的流水线级。(1 1)取指令()取指令(fetchfetch):从存储器中取):从存储器中取出指令,并将其放入指令流水线。出指令,并将其放入指令流水线。(3 3)译码()译码(decodedecode):指令被译码,从):指令被译码,从寄存器堆中读取寄存器操作数。在寄存器堆中寄存器堆中读取寄存器操作数。在寄存器堆中有有3 3个操作数读端口,因此,大多数个操作数读端口,因此,大多数ARMARM指令能指令能在在1 1个周期内读取其操作数。个周期内读取其操作数。2 2)5 5级流水线级流水线ARMARM组织组织 (3 3
16、)执行()执行(executeexecute):将其中):将其中1 1个操作个操作数移位,并在数移位,并在ALUALU中产生结果。如果指令是中产生结果。如果指令是LoadLoad或或StoreStore指令,则在指令,则在ALUALU中计算存储器的中计算存储器的地址。地址。(4 4)缓冲)缓冲/数据(数据(buffer/databuffer/data):如果):如果需要则访问数据存储器,否则需要则访问数据存储器,否则ALUALU只是简单地只是简单地缓冲缓冲1 1个时钟周期。个时钟周期。(5 5)回写()回写(write-backwrite-back):将指令的结):将指令的结果回写到寄存器堆,
17、包括任何从寄存器读出的果回写到寄存器堆,包括任何从寄存器读出的数据。数据。在在ARM10ARM10中,将流水线的级数增加到中,将流水线的级数增加到6 6级,级,使系统的平均处理能力达到了使系统的平均处理能力达到了1.3DMIPS/MHz1.3DMIPS/MHz。3 3)6 6级流水线级流水线ARMARM组织组织3.2.5 异常o 当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。o ARM体系结构中的异常,与8位/16位
18、体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。1 ARM体系结构所支持的异常类型o ARM CPU将引起异常的类型分为7种2 异常优先级3 应用程序中的异常处理o 当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。异常向量 地 址异 常进入模式0 x0000,0000复位管理模式0 x0000,0
19、004未定义指令未定义模式0 x0000,0008软件中断管理模式0 x0000,000C中止(预取指令)中止模式0 x0000,0010中止(数据)中止模式0 x0000,0014保留保留0 x0000,0018IRQIRQ0 x0000,001CFIQFIQ4 对异常的响应o 当一个异常出现以后,ARM微处理器会执行以下几步操作:1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。3、将CPSR复制到相应的SPSR中。3、根据异常类型,强制设置CPSR的运行模式位。4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处
20、。ARM微处理器:异常微处理器:异常 当异常出现时,异常模式分组的当异常出现时,异常模式分组的R14和和SPSR用于保用于保存状态,即:存状态,即:R14_=return link SPSR_=CPSR CPSR4:0=exception mode number CPSR5=0 /*在在ARM状态执行状态执行*/if=Reset or FIQ then CPSR6=1 /*禁止快速中断禁止快速中断*/CPSR7=1 /*禁止正常中断禁止正常中断*/PC=exception vector address 当处理异常返回时,将当处理异常返回时,将SPSR传送到传送到CPSR,R14传送传送到到PC
21、5 异常返回1、将连接寄存器LR的值减去相应的偏移量后送到PC中。3、将SPSR复制回CPSR中。3、若在进入异常处理时设置了中断禁止位,要在此清除。6 异常进入/退出时的指令返回指令以前的状态注意ARM R14_xThumb R14_xBLMOV PC,R14PC4PC31SWIMOVS PC,R14_svcPC4PC31UDEFMOVS PC,R14_undPC4PC31FIQSUBS PC,R14_fiq,4PC4PC43IRQSUBS PC,R14_irq,4PC4PC43PABTSUBS PC,R14_abt,4PC4PC41DABTSUBS PC,R14_abt,8PC8PC83RESETNA4注意:1、在此PC应是具有预取中止的BL/SWI/未定义指令所取的地址。3、在此PC是从FIQ或IRQ取得不能执行的指令的地址。3、在此PC是产生数据中止的加载或存储指令的地址。4、系统复位时,保存在R14_svc中的值是不可预知的。