第2章ARM体系结构课件.ppt
第2章 ARM体系结构,第2章 ARM体系结构,ARM概述,ARMAdvanced RISC Machines ARM 公司从事基于RISC芯片技术开发的公司,是IP供应商。该企业设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器。公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。IP(Intellectual Property)知识产权。Fabless(无生产线)RISC(Reduced Instruction Set Computer)ARM:RISC处理器IP核Fabless,ARM概述 ARMAdvanced RISC Machin,ARM公司成立于1981年,最初与英国广播公司合作为英国教育界设计小型机,当时采用的是美国的6502芯片。取得成功后,他们开始设计自己的芯片,受当时美国加洲大学伯克利分校提出的RISC思想的影响,他们设计的芯片也采用RISC体系结构,并命名为“Acorn RISC Machine”。ARM公司的第一款芯片ARM1在1985年被设计出来,次年又设计了真正实用的ARM2。ARM2具有32位数据总线和24位地址总线,带有16个寄存器。ARM2可能是当时最简化的32位微处理器,上面仅有30000个晶体管(4年前Motorola公司的68000则有68000个晶体管)。这种精简的结构使ARM2具有优异的低功耗特性,而性能则超过了同期Intel公司的286(134K个晶体管)。1990年ARM公司另外组建了一个名为“Advanced RISC Machines”的公司,专门从事ARM系列微处理器的开发。1998年ARM公司在伦敦证券交易所和NASDAQ上市。,ARM公司成立于1981年,最初与英国广播公司合作为英国教育,ARM微处理器的特点,体积小、低功耗、低成本、高性能支持Thumb(16位)/ARM(32位)双指令集大量使用寄存器,指令执行速度更快大多数数据操作都在寄存器中完成寻址方式灵活简单,执行效率高指令长度固定,ARM微处理器的特点体积小、低功耗、低成本、高性能,2.1 RISC技术和流水线技术,2.1.1 计算机体系结构1.冯诺依曼体系结构 冯诺依曼机:将数据和指令都存储在存储器中的计算机。(延用至今)计算系统由一个中央处理单元(CPU)和一个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进行读或写。,冯诺依曼简化了十进制的第一台计算机,最大的贡献:提出了二进制的存储程序模式,2.1 RISC技术和流水线技术2.1.1 计算机体系结构冯,2.1.1 计算机体系结构(2),2.哈佛体系结构为数据和程序提供了各自独立的存储器。程序计数器只指向程序存储器而不指向数据存储器 两组数据线允许同时访问指令和数据(访问指令和数据互不干扰),2.1.1 计算机体系结构(2)2.哈佛体系结构,2.1.2 RISC技术,CISC:复杂指令集计算机(Complex Instruction Set Computer)计算机性能的提高往往是通过增加硬件的复杂性来获得。随着集成电路技术,特别是 VLSI(超大规模集成电路)技术的迅速发展,为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加可实现复杂功能的指令和多种灵活的编址方式。甚至某些指令可支持高级语言语句归类后的复杂操作。至使硬件越来越复杂,造价也相应提高。为实现复杂操作,微处理器除向程序员提供类似各种寄存器和机器指令功能外CISC不适用于嵌入式系统,因为嵌入式要求精简指令。,2.1.2 RISC技术CISC:复杂指令集计算机(Comp,RISC:1979年美国加州大学伯克利分校提出精简指令集计算机(Reduced Instruction Set Computer,RISC)RISC的目标:设计出简单有效的指令集。(需要用软件降低硬件执行的指令的复杂度。)RISC能够精简指令集的复杂度,简化指令实现的硬件设计,硬件只执行很有限的最常用的的那部分指令,大部分复杂的操作则由简单指令合成。80%的程序只用到了20%的指令。,RISC:,编译器,处理器(复杂性高),编译器(复杂性高),处理器,CISC,RISC,CISC和RISC的不同,编译器处理器编译器处理器CISCRISCCISC和RISC的,RISC体系结构特点:大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率(优点:大部分的操作可在寄存器内执行,不需经过处理器,提高了处理速度,寄存器的速度比存储器快。)在进行指令系统设计时,只选择使用频率很高的指令,在此基础上增加少量能有效支持操作系统和高级语言实现以及其他功能的指令,使指令条数大大减少简单的寻址模式采用固定长度的指令格式,指令归整、简单、基本寻址方式有23种使用单周期指令,便于流水线操作执行为提高指令执行速度,大部分指令直接采用硬件电路实现,少量采用微码实现,RISC体系结构特点:,RISC体系结构特点,ARM体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗。大多数的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率可用加载/存储指令批量传输数据,以提高数据的传输效率可在一条数据处理指令中同时完成逻辑处理和移位处理在循环处理中使用地址的自动增减来提高运行效率,RISC体系结构特点ARM体系结构还采用了一些特别的技术,,2.1.3 流水线技术,2.指令的二级流水,1.指令的串行执行,取指令 取指令部件 完成,总有一个部件 空闲,指令预取,若 取指 和 执行 阶段时间上 完全重叠,指令周期 减半 速度提高 1 倍,执行指令 执行指令部件 完成,取指令 3执行指令 32.1.3 流水线技术2.指令的二,指令的三级流水线,取指,译码,执行,从存储器取指,指令译码,从寄存器组中读寄存器,移位和ALU操作,将寄存器写回到寄存器组,取指,译码,执行,取指,译码,执行,取指,译码,执行,t,指令,1,2,3,三级指令流水线功能段划分如下:,ARM单周期指令3级流水线操作,指令的三级流水线取指译码执行从存储器取指指令译码从寄存器组中,三级流水线如何在实际指令中体现?ADD R0,R1,R2SUB R3,R4,#2CMP R5,R1第一个周期:第二个周期:第三个周期:执行完上述指令需要几个周期?,三级流水线如何在实际指令中体现?,流水线技术(3),ARM7系列微处理器采用3级流水线结构(取指、译码、执行)ARM9系列微处理器采用5级流水线结构(取指、译码、执行、存储器访问、回写)ARM10系列微处理器采用6级流水线结构PXA270微处理器采用7级超级流水线结构 注:流水线级数增加,每一段的工作量减小,处理器可工作在更高的频率,性能得到改善,流水线技术(3)ARM7系列微处理器采用3级流水线结构,2.2 ARM体系结构简介,ARM命名规则:ARM xyzTDMIEJFS x:系列 y:存储管理/保护单元 z:Cache(高速缓冲存储器),2.2 ARM体系结构简介ARM命名规则:ARM xyzTD,2.2.1 ARM体系结构的演变(V1、V2、V3、V4、V5、V6、cortex)一、版本V1本版本包括下列指令:1、乘法指令之外的基本数据处理指令;2、基于字节、字和多字的存储器访问操作指令(Load/Sore);3、子程序调用指令BL在内的跳转指令;4、完成系统调用的软件中断指令SWI。,2.2.1 ARM体系结构的演变,二、版本V2它仍然26位地址的机器,但包含了对32位结果的乘法指令和协处理器的支持。与版本1相比,版本2(2a)增加了下列指令:1、乘和乘加指令;2、支持协处理器的指令;3、对于FIQ模式,提供了额外的影子寄存器;4、SWP指令及SWPB指令。,二、版本V2,三、版本V3版本3较以前的版本发生了大的变化,具体的改进如下:1、地址空间扩展到了32位,但除了版本3G外的其他版本是向前兼容的,也支持26位的地址空间;2、分开的当前程序状态寄存器CPSR(Current Program Status Register)和备份的程序状态寄存器SPSR(Saved Program Status Register),SPSR用于在程序异常中断时保存被中断的程序状态;3、增加了两种异常模式,使操作系统代码可方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常;4、增加MRS指令和MSR指令,用于完对CPSR和SPSR寄存器的读/写;5、修改了原来的从异常中返回的指令。,三、版本V3,四、版本V4与版本3相比,版本4增加了下列指令:1、有符号、无符号的半字和有符号字节的Load和Store指令。2、增加了T变种,处理器可工作于Thumb状态,在该状态下的指令集是16位的Thumb指令集。3、增加了处理器的特权模式。在该模式下,使用的是用户模式下的寄存器。版本4不再强制要求与26位地址空间兼容,而且还明确了那些指令会引起未定义指令异常。,四、版本V4,五、版本V5ARM10处理器是最早支持版本5T的(很快也会支持5TE版本)处理器。与版本4相比,版本5的指令集有了如下变化:1、提高了T变种中ARM/Thumb混合使用的效率;2、增加前导零记数(CLZ)指令,该指令可使整数除法和中断优先级排队操作更为有效;3、增加了BKPT(软件断点)指令;4、为协处理器设计提供了更多的可供选择的指令;5、更加严格地定义了乘法指令对条件码标志位的影响。,五、版本V5,六、版本V6ARM体系版本6是2001年发布的。新架构V6在降低耗电量的同时,还强化了图形处理性能。通过追加有效进行多媒体处理的SIMD功能,将语音及图象的处理功能提高到了原机型的4倍。V6还支持微处理器内核。七、版本V7-Cortex前所未有的低成本实现,六、版本V6,表 ARM体系结构总结 核 体系结构,第2章ARM体系结构课件,2.2.2 ARM体系结构的特征一些特定指令的周期数可变内嵌桶形移位寄存器产生了更为复杂的指令Thumb16位指令集条件执行增强指令:DSP的应用,2.2.2 ARM体系结构的特征,2.2.3 ARM体系的变种 T变种:16位指令集 M变种:长乘法指令 E变种:增强型DSP指令 J变种:JAVA加速器 SIMD变种:媒体功能扩展,2.2.3 ARM体系的变种,2.2.4 ARM系列 ARM7 ARM9 ARM9E ARM10E ARM11 strongARM、XScale,2.2.4 ARM系列,2.2.5 ARM存储数据类型,字(Word)在ARM体系结构中,字的长度为32位 半字(Half-Word)在ARM体系结构中,半字的长度为16位 字节(Byte)在ARM体系结构中,字节的长度为8位。字对齐:四字节对齐半字对齐:两字节对齐,2.2.5 ARM存储数据类型字(Word),练习:1.哈佛体系结构和冯诺依曼体系结构有何不同?,冯诺依曼机:将数据和指令都存储在存储器中的计算机。计算系统由一个中央处理单元(CPU)和一个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进行读或写。哈佛机:为数据和程序提供了各自独立的存储器。程序计数器只指向程序存储器而不指向数据存储器,练习:1.哈佛体系结构和冯诺依曼体系结构有何不同?,练习:,2.ARM7TDMI中的T、D、M、I的含义是什么?ARM7TDMI采用几级流水线?使用何种体系结构?高密度 16 位的Thumb指令机扩展(带T 后缀的)支持片上调试(带D 后缀的)、64 位乘法指令(带M 后缀的)、嵌入式ICE,支持片上断点和调试点(带I 后缀的)三级流水线(取指 译码 执行);使用了冯诺依曼(Von Neumann)结构,指令和数据共用一条32 位总线。,练习:2.ARM7TDMI中的T、D、M、I的含义是什么?,2.3 ARM微处理器工作状态,2.3.1 两种工作状态:ARM状态:处理器执行32位的字对齐的ARM指令Thumb状态:处理器执行16位的、半字对齐的Thumb指令在程序的执行过程中,微处理器可以随时在上述两种状态之间切换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。,2.3 ARM微处理器工作状态 2.3.1 两种工作状态:,2.3 ARM微处理器的工作状态(2),2.3.2 工作状态的切换:ARM指令集和Thumb指令集均有切换处理器状态的指令。通过这些指令就可以在两种工作状态之间切换。V4版本中,BX指令可以实现程序间处理器工作状态切换(BX:带状态切换的跳转指令)V5版本中,BLR、LDR、LDM指令可以实现程序间处理器工作状态切换(BLR:带返回和状态切换的跳转指令),2.3 ARM微处理器的工作状态(2)2.3.2 工作状态,ARM微处理器的工作状态(2),2.3.2 状态切换:BX 指令的条件码。忽略时无条件执行。寄存器中为跳转的目标地址当寄存器的bit0为0时,目标地址处的指令为ARM指令当寄存器的bit0为1时,目标地址处的指令为Thumb指令。注意:ARM微处理器在复位或上电时处于ARM状态,发生异常时也处于ARM状态。如果处理器在Thumb状态进入异常,当异常处理返回时,处理器仍然处在Thumb状态,ARM微处理器的工作状态(2)2.3.2 状态切换:,2.4 ARM微处理器工作模式,ARM系统结构支持7种处理器模式:用户模式(usr):用户应用程序系统模式(sys):特权模式快速中断模式(fiq):用于快速数据传输中断模式(irq):通用的中断处理管理模式(svc):操作系统使用的保护模式终止模式(abt):数据访问中止或指令预取中止未定义指令模式(und):未定义的指令执行时管理模式(svc)是系统复位后的默认模式特权模式(Privileged Modes)异常模式(Exception Modes),异常模式,特权模式,2.4 ARM微处理器工作模式ARM系统结构支持7种处理器模,ARM微处理器的运行模式可以通过两种方式改变:软件(特权模式)外部中断或异常处理大多数的应用程序运行在用户模式下,当处理器运行在用户模式下,某些被保护的系统资源不能被访问,也不能改变模式,除非异常发生 特权模式可以自由地访问系统资源和改变模式。,ARM微处理器的处理器模式(2),ARM微处理器的运行模式可以通过两种方式改变:ARM微处理器,2.5 ARM处理器寄存器组织,ARM处理器共有37个32位的寄存器:31个通用寄存器,分为三类:未分组寄存器(Unbanked Register):R0R7分组寄存器(Banked Register):R8R14程序计数器R15(PC指针)6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,目前只使用了其中的一部分在每一种处理器模式下均有一组相应的寄存器与之对应。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器,写汇编程序时都会用到,2.5 ARM处理器寄存器组织ARM处理器共有37个32位,2.5 ARM处理器寄存器组织,ARM处理器共有37个32位的寄存器:31个通用寄存器,分为三类:未分组寄存器(Unbanked Register):R0R7分组寄存器(Banked Register):R8R14程序计数器R15(PC指针)6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,目前只使用了其中的一部分在每一种处理器模式下均有一组相应的寄存器与之对应。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器,2.5 ARM处理器寄存器组织ARM处理器共有37个32位,2.5.1 ARM状态下的寄存器组织,未分组寄存器(Unbanked Register)R0R7同一个寄存器名,在ARM微处理器内部只有一个独立的物理寄存器与之对应。在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途。在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。任何可采用通用寄存器的应用场合都可以使用未分组寄存器。,2.5.1 ARM状态下的寄存器组织未分组寄存器(Unban,2.5.1 ARM状态下的寄存器组织(2),分组寄存器(Banked Register)R8R14同一个寄存器名,在ARM微处理器内部存在多个独立的物理寄存器对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。R8R12:对应两个不同的物理寄存器,有两种不同的模式:fiq模式(快速中断):R8_fiqR12_fiq非fiq模式:R8_usrR12_usr,2.5.1 ARM状态下的寄存器组织(2)分组寄存器(Ban,2.5.1 ARM状态下的寄存器组织(2),分组寄存器(Banked Register)R8R14(2)R13、R14:每个寄存器对应6个不同的物理寄存器用户模式与系统模式共用一个物理寄存器另外5个物理寄存器对应于其他5种不同的运行模式可用下面的方式区分不同的物理寄存器R13_R14_mode为模式:usr、fiq、irq、svc、abt、und,2.5.1 ARM状态下的寄存器组织(2)分组寄存器(Ban,未分组寄存器,分组寄存器,程序计数器PC,异常模式,System,特权模式,未分组寄存器分组寄存器程序计数器PC异常模式System特权,2.5.1 ARM状态下的寄存器组织(3),寄存器R13寄存器R13在ARM指令中常用作堆栈指针SP。在用户应用程序的初始化部分,一般都要初始化每种模式下的R13(R13_svc、R13_irq、R13_fiq、R13_abt和R13_und),使其指向该运行模式的栈空间。当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。,2.5.1 ARM状态下的寄存器组织(3)寄存器R13,2.5.1 ARM状态下的寄存器组织(4),寄存器R14又称子程序链接寄存器(Subroutine Link Register)或链接寄存器LR。作用1.子程序调用时:当执行BL(BLX)子程序调用指令时R14自动被设置成当前子程序的返回地址;当子程序返回时,R14中得到R15(程序计数器PC)的备份。完成子程序返回。(BL 为带返回的跳转指令)2.中断或异常时:对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。R14可以作为通用寄存器使用,2.5.1 ARM状态下的寄存器组织(4)寄存器R14,2.5.1 ARM状态下的寄存器组织(5),程序计数器PC:寄存器R15 寄存器R15用作程序计数器(PC)。在ARM状态下,位1:0为0,位31:2用于保存PC;在Thumb状态下,位0为0,位31:1用于保存PC。由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。,R15在程序运行中起到至关重要的作用,存储着下一条要执行的指令的地址,2.5.1 ARM状态下的寄存器组织(5)程序计数器PC:寄,R14寄存器与子程序调用,MOV PC,LR,R14(地址A),程序A执行过程中调用程序B;,操作流程,程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14;,程序B执行完后,将R14寄存器的内容放入PC,返回程序A;,Lable程序A程序BR14R14寄存器与子程序调用BL,2.5.1 ARM状态下的寄存器组织(6),程序状态寄存器:包含一个当前程序状态寄存器CPSR和五个备份的程序状态寄存器SPSR当前程序状态寄存器 CPSRCPSR(Current Program Status Register)CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。备份的程序状态寄存器SPSR(Saved Program Status Register),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。,非常重要,反应了当前的状态,2.5.1 ARM状态下的寄存器组织(6)程序状态寄存器:包,2.5.1 ARM状态下的寄存器组织(8),条件码标志(Condition Code Flags)(2831位)N、Z、C、V:条件码标志位。可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。在ARM状态下,绝大多数的指令都是有条件执行的。在Thumb状态下,仅有分支指令是有条件执行的。,2.5.1 ARM状态下的寄存器组织(8)条件码标志(Con,2.5.1 ARM状态下的寄存器组织(9),在ARM v5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其他版本的处理器中,Q标志位无定义。,Q(第27位),对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。对于其他的非加/减运算指令,C的值通常不改变。,V,加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。对于包含移位操作的非加/减运算指令,C为移出值的最后一位。对于其他的非加/减运算指令,C的值通常不改变。,C,Z=1 表示运算的结果为零;Z=0表示运算的结果为非零。,Z,N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零。,N,含 义,标志位,2.5.1 ARM状态下的寄存器组织(9)在ARM v5及,2.5.1 ARM状态下的寄存器组织(10),CPSR控制位(70位)CPSR的低8位(包括I、F、T和M4:0)称为控制位,当发生异常时这些位可以被改变。如果处理器处于特权模式,这些位也可以由程序修改。中断禁止位I、F:I=1 禁止IRQ中断(外部中断)F=1 禁止FIQ中断(快速中断)T标志位:T=1Thumb状态T=0 ARM状态,2.5.1 ARM状态下的寄存器组织(10)CPSR控制位(,2.5.1 ARM状态下的寄存器组织(11),M4:0运行模式位:这些位决定了处理器的运行模式。,2.5.1 ARM状态下的寄存器组织(11)M4:0运行,2.5.1 ARM状态下的寄存器组织(12),保留位CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。,2.5.1 ARM状态下的寄存器组织(12)保留位,2.5.2 Thumb 状态下的寄存器组织,R0-R7与ARM状态一致CPSR、SPSR与ARM状态一致SP映射到R13LR映射到R14PC映射到R15,2.5.2 Thumb 状态下的寄存器组织R0-R7与ARM,练习,1、ARM处理器模式和ARM处理器状态有何区别?处理器模式指的是处理器在执行程序时在不同时刻所处的不同状态,处理器状态指的是处理器当前所执行的指令集。2、分别列举ARM的处理器模式和状态。状态:ARM 状态:32 位,这种状态下执行的是字方式的ARM 指令 Thumb 状态:16 位,这种状态下执行半字方式的 Thumb 指令 模式:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。,练习1、ARM处理器模式和ARM处理器状态有何区别?,练习,(1)ARM模式中有多少通用寄存器?31个通用寄存器(2)CPRS作用是什么?寄存器CPSR为当前程序状态寄存器,可以在任何工作模式下被访问。状态标志:5个,N符号位,Z零标志,C进位,V溢出位,Q DSP运算溢出位。控制标志:4个,I中断允许,F快速中断允许,T状态选择,M4:0 处理器工作模式(3)Z位的作用是什么?Z=1 表示运算的结果为零;Z=0表示运算的结果不为零;(4)程序计数器保存在何处?寄存器R15为程序计数器(PC),它指向正在取指的地址。,练习(1)ARM模式中有多少通用寄存器?,练习,5、PC和LR分别使用哪个寄存器?PC使用R15寄存器,LR使用R14寄存器6、R13寄存器的通用功能是什么?堆栈,练习5、PC和LR分别使用哪个寄存器?,2.6 ARM异常,只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外设的中断。在处理异常之前,ARM内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,详见“异常优先级”部分。,2.6 ARM异常 只要正常的程序流被暂时中止,2.6 ARM异常,ARM程序执行流程 顺序执行:执行一条ARM指令,PC+4,执行一条Thumb指令,PC+2 跳转:PC=目标地址 异常中断:PC=异常中断处理程序入口,2.6 ARM异常ARM程序执行流程,2.6 ARM异常,异常中断:PC=异常中断处理程序入口当异常中断发生时:系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行;在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行;进入异常中断处理程序时,要保存被中断的程序的执行现场,从异常中断处理程序退出时,要恢复被中断的程序的执行现场。,2.6 ARM异常异常中断:PC=异常中断处理程序入口,2.6.1 ARM微处理器的异常概述(1),异常(Exception)当正常的程序执行流程发生改变时,称之为异常。异常类型(7种)运行模式复位svc(管理模式)未定义指令und(未定义指令中止模式)软件中断svc(管理模式)指令预取中止abt(数据访问中止模式)数据中止abt(数据访问中止模式)IRQ(外部中断请求)irq(外部中断模式)FIQ(快速中断请求)fiq(快速中断模式),异常可通过内部或外部中断源产生。,2.6.1 ARM微处理器的异常概述(1)异常(Except,ARM微处理器的异常概述(2),ARM微处理器的异常概述(2)当处理器的快速中断请求引脚有,在异常发生后,ARM内核自动完成以下动作:在适当的LR中保存下一条指令的地址。将CPSR复制到适当的SPSR中。将CPSR模式位强制设置为与异常类型相对应的值。强制PC从相关的异常向量处取指。,2.6.2 ARM异常处理,注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址加载入PC时,会自动切换到ARM状态。,在异常发生后,ARM内核自动完成以下动作:2.6.2 AR,2.6.2 ARM异常处理,对异常的响应ARM微处理器对异常的响应过程用伪码可以描述为:(1)R14_=Return Link(2)SPSR_=CPSR(3)CPSR4:0=Exception Mode NumberCPSR5=0/*在ARM状态执行*/If=Reset or FIQ thenCPSR6=1/*禁止快速中断*/*否则CPSR6 不变*/CPSR7=1/*禁止外部中断*/(4)PC=Exception Vector Address,将下一条指令的地址存入相应连接寄存器LR,以便程序 在处理异常返回时能从正确的位置重新开始执行。,将CPSR复制到相应的SPSR中。,根据异常类型,强制设置CPSR的运行模式位。,强制PC从相关的异常向量地址取下一条指令执行,从而 跳转到相应的异常处理程序处。,2.6.2 ARM异常处理对异常的响应将下一条指令的地址存入,M4:0处理器模式可访问的寄存器0b10000用户模式P,2.6.2 ARM异常处理(3),复位复位完成下列操作:R14_svc=UNPREDICTABLE valueSPSR_svc=UNPREDICTABLE valueCPSR4:0=0b10011/*进入管理模式*/CPSR5=0/*在ARM状态执行*/CPSR6=1/*禁止快速中断*/CPSR7=1/*禁止正常中断*/If high vectors configured thenPC=0 xFFFF0000elsePC=0 x00000000 复位不需要返回。,2.6.2 ARM异常处理(3)复位,2.6.2 ARM异常处理(4),未定义指令异常未定义指令异常出现时,执行下列操作:R14_und=address of next instruction after the undefined instructionSPSR_und=CPSRCPSR4:0=0b11011/*进入未定义模式*/CPSR5=0/*在ARM状态执行*/*CPSR6 不变*/CPSR7=1/*禁止正常中断*/If high vectors configured thenPC=0 xFFFF0004elsePC=0 x00000004 返回:MOVS PC,LR设置“S”bit,PC做为目的寄存器,在特权模式不仅仅更新PC,而且拷贝SPSR 到 CPSR。,2.6.2 ARM异常处理(4)未定义指令异常,2.6.2 ARM异常处理(5),软件中断(SWI)管理异常管理异常异常出现时,执行下列操作:R14_svc=address of next instruction after the SWI instructionSPSR_svc=CPSRCPSR4:0=0b10011/*进入管理模式*/CPSR5=0/*在ARM状态执行*/*CPSR6 不变*/CPSR7=1/*禁止正常中断*/If high vectors configured thenPC=0 xFFFF0008elsePC=0 x00000008 返回:MOVS PC,LR,2.6.2 ARM异常处理(5)软件中断(SWI)管理异常,2.6.2 ARM异常处理(6),预取中止异常预取中止异常出现时,执行下列操作:R14_abt=address of the aborted instruction+4SPSR_abt=CPSRCPSR4:0=0b10111/*进入指令预取中止模式*/CPSR5=0/*在ARM状态执行*/*CPSR6 不变*/CPSR7=1/*禁止正常中断*/If high vectors configured thenPC=0 xFFFF000CelsePC=0 x0000000C 返回:SUBS PC,LR,#4,2.6.2 ARM异常处理(6)预取中止异常,2.6.2 ARM异常处理(7),数据中止异常预取中止异常出现时,执行下列操作:R14_abt=address of the aborted instruction+8SPSR_abt=CPSRCPSR4:0=0b10111/*进入中止模式*/CPSR5=0/*在ARM状态执行*/*CPSR6 不变*/CPSR7=1/*禁止正常中断*/If high vectors configured thenPC=0 xFFFF0010elsePC=0 x00000010 返回:SUBS PC,LR,#8,2.6.2 ARM异常处理(7)数据中止异常,2.6.2 ARM异常处理(8),中断请求(IRQ)异常通过处理器上的IRQ输入引脚,由外部产生IRQ异常。IRQ异常的优先级比FIQ异常低。当进入FIQ处理时,会屏蔽掉IRQ异常。若CPSR的I位为1,则禁止IRQ异常。若I位为0,则ARM在指令执行完之后检查IRQ输入。IRQ异常出现时,执行下列操作:R14_irq=address of next instruction to be executed+4SPSR_irq=CPSRCPSR4:0=0b10010/*进入IRQ模式*/CPSR5=0/*在ARM状态执行*/*CPSR6 不变*/CPSR7=1/*禁止正常中断*/If high vectors configured thenPC=0 xFFFF0018elsePC=0 x00000018 返回:SUBS PC,LR,#4,2.6.2 ARM异常处理(8)中断请求(IRQ)异常,2.6.2 ARM异常处理(9),快速中断请求(FIQ)异常通过处理器上的FIQ输入引脚,由外部产生FIQ异常。若CPSR的F位为1,则禁止FIQ异常。若F位为0,则ARM在指令执行完之后检查FIQ输入。FIQ异常出现时,执行下列操作:R14_fiq=address of next instruction to be executed+4SPSR_fiq=CPSRCPSR4:0=0b10001/*进入FIQ模式*/CPSR5=0/*在ARM状态执行*/CPSR6=1/*禁止快速中断*/CPSR7=1/*禁止正常中断*/If high vectors configured thenPC=0 xFFFF001CelsePC=0 x0000001C 返回:SUBS PC,LR,#4,2.6.2 ARM异常处理(9)快速中断请求(FIQ)异常,当异常结束时,需要执行以下操作:1.恢复用户寄存器值;2.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;3.将SPSR的值复制回CPSR;4.清零在进入异常时置位的中断禁止标志。,退出异常,当异常结束时,需要执行以下操作:退出异常,2.6.2 ARM异常处理(10),从异常返回异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:1、将连接寄存器LR的值减去相应的偏移量后送到PC中2、将SPSR复制回CPSR中3、若在进入异常处理时设置了中断禁止位,要在此清除,2.6.2 ARM异常处理(10)从异常返回,图示进入异常过程,1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;,2.用户程序运行时发生IRQ中断,硬件完成以下动作:,置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式,将下一条指令的地址存入IRQ模式的LR寄存器,将CPSR寄存器内容存入IRQ模式的SPSR寄存器,将跳转地址存入PC,实现跳转,BackAddr,JumpAddr,Jump,“?”表示对该位不关心,程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异,在异常处理结束后,异常处理程序完成以下动作:,图示退出异常过程,将SPSR寄存器的值复制回CPSR寄存器;,将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。,BackAddr,JumpAddr,return,BackAddr-4,Jump,“?”表示对该位不关心,在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务,2.6.2 ARM异常处理(11),异常进入/退出小结,2.6.2 ARM异常处理(11)返回指令BLMOV PC,2.6.3 ARM异常向量表,异常向量(Exception Vectors)异常出现后强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量。,管理模式,管理模式,中止模式,2.6.3 ARM异常向量表异常向量(Exception V,32 Mbytes,4 Kbytes,Literal pool containing address of Undef Handler,IRQ handler within 32MBytes Branch instruction range,SWI Exception handler placed on applicable address boundary,FIQ handler follows vector table,Unde