嵌入式处理器体系结构.ppt
,UESTC,UESTC,UESTC,UESTC,UESTC,电子科技大学,电子科技大学,电子科技大学,电子科技大学,自动化工程学院,第2章嵌入式处理器体系结构,嵌 入 式 系 统 设 计,(1)处理器设计的两种结构形式 CISC与RISC(2)从计算机系统角度,强调访问存储器的设计原则 冯诺依曼结构与哈佛结构,处理器体系结构概述,CISC和RISC,CISC:复杂指令集(Complex Instruction Set Computer)具有大量的指令和寻址方式,指令长度可变8/2原则:80%的程序只使用20%的指令大多数程序只使用少量的指令就能够运行,RISC:精简指令集(Reduced Instruction Set Computer)只包含最有用的指令,指令长度固定确保数据通道快速执行每一条指令使CPU硬件结构设计变得更为简单,处理器体系结构概述,CISC与RISC的对比,处理器体系结构概述,嵌入式微处理器,传统的微处理器采用的冯诺依曼结构将指令和数据存放在同一存储空间中,统一编址,指令和数据通过同一总线访问。哈佛结构则是不同于冯诺依曼结构的一种并行体系结构,其主要特点是程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编制、独立访问。与之相对应的是系统中设置的两条总线(程序总线和数据总线),从而使数据的吞吐率提高了一倍。,处理器体系结构概述,冯诺依曼体系结构,指令寄存器,控制器,数据通道,输入,输出,中央处理器,存储器,程序,指令0,指令1,指令2,指令3,指令4,数据,数据0,数据1,数据2,处理器体系结构概述,哈佛体系结构,指令寄存器,控制器,数据通道,输入,输出,CPU,程序存储器,指令0,指令1,指令2,数据存储器,数据0,数据1,数据2,地址,指令,地址,数据,处理器体系结构概述,ARM微处理器的特点,采用RISC指令集,1.低功耗、低成本、高性能,使用大量的寄存器,ARM/THUMB指令支持,流水线,ARM处理器的特点,ARM微处理器的特点,固定长度的指令格式,指令归整、简单、基 本寻址 方式有23种;,2.采用RISC体系结构,使用单周期指令,便于流水线操作执行;,大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率。,ARM处理器的特点,ARM微处理器的特点,31个通用寄存器,包括程序计数器(PC 指针),均为32位的寄存器;,3.大量使用寄存器,6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位。,ARM处理器的特点,ARM微处理器的特点,ARM微处理器支持两种指令集:ARM指令集和Thumb指令集。,4.高效的指令系统,ARM指令为32位的长度,Thumb指令为16位长度。Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省3040以上的存储空间,同时具备32位代码的所有优点。,ARM处理器的特点,ARM体系结构版本V1,该版本的ARM体系结构,只有26位的寻址空间,没有商业化,其特点为:基本的数据处理指令(不包括乘法);字节、字和半字加载/存储指令;具有分支指令,包括在子程序调用中使用的分支和链接指令;在操作系统调用中使用的软件中断指令。,ARM体系结构的发展,同样为26位寻址空间,现在已经废弃不再使用,它相对V1版本有以下改进:具有乘法和乘加指令;支持协处理器;快速中断模式中的两个以上的分组寄存器;具有原子性加载/存储指令SWP和SWPB。,ARM体系结构的发展,ARM体系结构版本V2,寻址范围扩展到32位(目前已废弃),具有独立的程序:具有乘法和乘加指令;支持协处理器;快速中断模式中具有的两个以上的分组寄存器;具有原子性加载/存储指令SWP和SWPB。,ARM体系结构版本V3,ARM体系结构的发展,不在为了与以前的版本兼容而支持26位体系结构,并明确了哪些指令会引起未定义指令异常发生,它相对V3版本作了以下的改进:半字加载/存储指令;字节和半字的加载和符号扩展指令;具有可以转换到Thumb状态的指令(BX);增加了用户模式寄存器的新的特权处理器模式。,ARM体系结构的发展,ARM体系结构版本V4,在V4版本的基础上,对现在指令的定义进行了必要的修正,对V4版本的体系结构进行了扩展并增加了指令,具体如下:改进了ARM/Thumb状态之间的切换效率;E-增强型DSP指令集,包括全部算法操作和16位乘法操作;J-支持新的JAVA,提供字节代码执行的硬件和优化软件加速功能。,ARM体系结构版本V5,ARM体系结构的发展,2001年推出ARMv6,它在许多方面做了改进如内存系统、异常处理和较好地支持多处理器。SIMD扩展使得广大的软件应用如Video和Audio codec的性能提高了4倍。Thumb-2和TrustZone 技术也用于ARMv6中。ARMv6第一个实现是2002年春推出的ARM1136J(F)-STM处理器,2003年又推出了ARM1156T2(F)-S和ARM1176JZ(F)-S处理器。,ARM体系结构的发展,ARM体系结构版本V6,ARMv7定义了3种不同的处理器配置(processor profiles):Profile A是面向复杂、基于虚拟内存的OS和应用的Profile R是针对实时系统的Profile M是针对低成本应用的优化的微控制器的所有ARMv7 profiles实现Thumb-2技术,同时还包括了NEON技术的扩展提高DSP和多媒体处理吞吐量400,并提供浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要。,ARM体系结构版本V7,ARM体系结构的发展,ARM Family,ARM7 Family,ARM9 Family,ARM10 Family,ARM11 Family,150DMIPS,300 DMIPS,500 DMIPS,1000 DMIPS,ARM Cortex Family,ARM Architecture,ARM体系结构的发展,ARM7微处理器系列,ARM7系列是为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。ARM7系列有如下特点:,具有嵌入式ICERT逻辑,调试开发方便;,极低的功耗,适合对功耗要求较高的应用,如便携式产品;,能够提供0.9MIPS/MHz的三级流水线结构;,代码密度高,并兼容16位的Thumb指令集;,对操作系统的支持广泛,如Windows CE、Linux、Palm OS等;,指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代;,主频最高可达130M,高速的运算处理能力能胜任绝大多数的复杂应用。,ARM处理器系列,ARM7微处理器系列,主要应用领域:工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。,ARM7系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM处理器核。TDMI的基本含义为:T:支持16为压缩指令集Thumb;D:支持片上Debug;M:内嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上断点和调试点;,ARM处理器系列,ARM9微处理器系列,ARM9系列微处理器在高性能和低功耗特性方面提供最佳的表现。具有以下特点:,5级整数流水线,指令执行效率更高。,提供1.1MIPS/MHz的哈佛结构。,支持32位ARM指令集和16位Thumb指令集。,支持32位的高速AMBA总线接口。,全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。,MPU支持实时操作系统。,支持数据Cache和指令Cache,具有更高的指令和数据处理能力。,ARM处理器系列,ARM9微处理器系列,ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。,ARM处理器系列,ARM9E微处理器系列,ARM9E系列微处理器的主要特点如下:,支持DSP指令集,适合于需要高速数字信号处理的场合。,5级整数流水线,指令执行效率更高。,支持32位ARM指令集和16位Thumb指令集。,支持32位的高速AMBA总线接口。,支持VFP9浮点处理协处理器。,全性能的MMU,支持众多主流嵌入式操作系统。,支持数据Cache和指令Cache,具有更高的处理能力。,主频最高可达300M。,ARM处理器系列,ARM9E微处理器系列,ARM9E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。,ARM9E系列微处理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三种类型,以适用于不同的应用场合。,ARM处理器系列,ARM10E微处理器系列,ARM10E系列微处理器的主要特点如下:,支持DSP指令集,适合于需要高速数字信号处理的场合。,6级整数流水线,指令执行效率更高。,支持32位ARM指令集和16位Thumb指令集。,支持32位的高速AMBA总线接口。,支持VFP10浮点处理协处理器。,全性能的MMU,支持众多主流嵌入式操作系统。,支持数据Cache和指令Cache,具有更高的处理能力,主频最高可达400M。,内嵌并行读/写操作部件。,ARM处理器系列,ARM10E微处理器系列,ARM10E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。,ARM10E系列微处理器包含ARM1020E、ARM1022E和ARM1026EJ-S三种类型,以适用于不同的应用场合。,ARM处理器系列,SecurCore微处理器系列,SecurCore系列微处理器除了具有ARM体系结构各种主要特点外,还在系统安全方面具有如下的特点:,带有灵活的保护单元,确保操作系统和应用数据的安全。,采用软内核技术,防止外部对其进行扫描探测。,可集成用户自己的安全特性和其他协处理器。,ARM处理器系列,SecurCore微处理器系列,SecurCore系列微处理器主要应用于一些对安全性要求较高的应用产品及应用系统,如电子商务、电子政务、电子银行业务、网络和认证系统等领域。,SecurCore系列微处理器包含SecurCore SC100、SecurCore SC110、SecurCore SC200和SecurCore SC210四种类型,以适用于不同的应用场合。,ARM处理器系列,ARM处理器(核)命名规则,ARMxyzTDMIEJF-Sx系列号 y存储管理/保护单元zCacheTThumb指令集DJTAG调试器M快速乘法器I嵌入式跟踪宏单元E增强DSP指令JJazelle技术F向量浮点单元S可综合的内核,2:带MMU4:带MPU6:无MMU和MPU,0:标准cache2:小cache 6:可变cache,ARM7TDMIARM926EJ-SARM966ESARM1022E,ARM处理器系列,ARM处理器的先进技术,(1)流水线技术,流水线(Pipeline)技术:几个指令可以并行执行 提高了CPU的运行效率 内部信息流要求通畅流动,译码,取指,执行add,译码,取指,执行sub,译码,取指,执行cmp,时间,Add,Sub,Cmp,最简单的3级流水线,低功耗嵌入式领域的经典产品ARM7就是采用这种3级流水线结构。,ARM处理器的先进技术,史上最经典的5级流水线,早期的MIPS、ARM9等处理器使用这种流水线,以后的处理器也都能看到它的影子,包括x86处理器等。,ARM处理器的先进技术,ARM处理器的先进技术,(2)超标量执行,超标量(Superscalar)执行:超标量CPU采用多条流水线结构,执行1,取指,指令,译码2,译码1,执行2,执行1,取指,译码2,译码1,执行2,流水线1,流水线2,数据回写,ARM处理器的先进技术,ARM处理器的先进技术,超标量处理器,指令并行,Superscalar超标量,VLIW超长指令字,ARM处理器的先进技术,处理器的并行设计,ARM处理器的先进技术,并行总结,ARM处理器的先进技术,ARM处理器的先进技术,(3)高速缓存(CACHE),ARM处理器的先进技术,Cache的工作原理,ARM处理器的先进技术,ARM处理器的先进技术,四级存储结构寄存器 Cache 主存 辅存,其中:cache-主存结构解决高速度与低成本的矛盾;主存-辅存结构利用虚拟存储器解决大容量与低成本的矛盾;,ARM处理器的先进技术,ARM处理器的先进技术,(4)总线和总线桥,总线是CPU与存储器和设备通信的机制,是计算机各部件之间传送数据、地址和控制信息的公共通道。,片内总线或内部总线:连接CPU内部各主要功能部件,片外总线:CPU与存储器(RAM和ROM)和I/O接口之间进行信息交换的通道,数据总线Dbus,地址总线Abus,控制总线Cbus,按相对于CPU位置划分,按功能和信号类型,总线分类,总线宽度,总线频率,总线带宽,总线带宽(单位:MB/s)=(总线宽度/8)总线频率,如:总线宽度32位,频率66MHZ,则总线带宽=(32/8)*66MHz=264MB/s,总线的主要参数,又称总线位宽,指的是总线能同时传送数据的位数。如16位总线就是具有16位数据传送能力。,总线工作速度的一个重要参数,工作频率越高,速度越快。通常用MHz表示。,又称总线的数据传送率,是指在一定时间内总线上可传送的数据总量,用每秒最大传送数据量来衡量。总线带宽越宽,传输率越高。,ARM处理器的先进技术,总线和总线桥,ARM处理器的先进技术,ARM处理器的先进技术,ARM处理器的先进技术,ARM处理器的先进技术,总线和总线桥,原因:数据宽度:高速总线通常提供较宽的数据连接。成本:高速总线通常采用更昂贵的电路和连接器。桥允许总线独立操作,这样在I/O操作中可提供某些并行性。,一个微处理器系统可能含有多条总线,高速总线,低速总线,高速设备,低速设备,桥,总线互联的电路,ARM处理器的先进技术,总线和总线桥,存储器,高速设备,CPU,低速设备,低速设备,桥,高速总线,低速总线,多总线系统,ARM处理器的先进技术,北桥,南桥,前端总线Front Side Bus,ARM处理器的先进技术,ARM处理器的先进技术,ARM处理器的先进技术,AMBA总线,AMBA(Advanced Microcontroller Bus Architecture)是ARM 公司研发的一种总线规范,目前主要版本为2.0 版本。AHB(Advanced High-performance Bus):用于高性能系统模块的连接,支持突发模式数据传输和事务分割;可以有效地连接处理器、片上和片外存储器,支持流水线操作。APB(Advanced Peripheral Bus):用于较低性能外设的简单连接,一般是接在AHB系统总线上的第二级总线。,ARM处理器的先进技术,测试接口,ARMCPU,SDRAMControl,SRAM,LCDControl,桥,并行接口,串行接口,Timer,UART,基于AMBA总线的典型系统,AMBA总线,ARM微处理器的工作状态,从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:,ARM状态 此时处理器执行32位的字对齐的ARM指令,Thumb状态 此时处理器执行16位的、半字对齐的Thumb指令,ARM处理器的工作状态,ARM与THUMB,THUMB指令是ARM指令的子集,可以相互调用,只要遵循一定的调用规则,Thumb指令与ARM指令的时间效率和空间效率关系为:,存储空间约为ARM代码的6070,指令数比ARM代码多约3040,存储器为32位时ARM代码比Thumb代码快约40,存储器为16位时Thumb比ARM代码快约4050,使用Thumb代码,存储器的功耗会降低约30,ARM处理器的工作状态,ARM处理器的工作状态,Thumb指令集具有灵活、小巧的特点,ARM指令集支持ARM核所有的特性,具有高效、快速的特点,状态切换方法,ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,,在开始执行代码时,应该处于ARM状态。,ARM处理器的工作状态,注意:两个状态之间的切换并不影响处理器模式或寄存器内容。,切换到Thumb状态,当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。,ARM处理器的工作状态,;从Arm状态切换到Thumb状态 LDR R0,=Lable+1 BX R0,地址最低位为1,表示切换到Thumb状态,跳转地址标号,切换到ARM状态,当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。,ARM处理器的工作状态,;从Thumb状态切换到ARM状态 LDR R0,=Lable BX R0,地址最低位为0,表示切换到ARM状态,跳转地址标号,ARM体系结构直接支持的数据类型,字节 8位半字 16位(必须分配为占用两个字节)字 32位(必须分配为占用4个字节),ARM直接支持的数据类型,ARM微处理器的存储器格式,ARM体系结构所支持的最大寻址空间为4GB(232字节),ARM体系结构将存储器看作是从0地址开始的字节的线性组合。从0字节到3字节放置第一个存储的字数据,从第4个字节到第7个字节放置第二个存储的字数据,依次排列。,ARM体系结构可以用两种方法存储字数据,称之为大端格式和小端格式。可以通过硬件的方式设置(没有提供软件的方式)端模式,ARM处理器的存储器组织,大端格式,在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,ARM处理器的存储器组织,大端的数据存放格式,低地址,高地址,地址A,地址A+1,地址A+2,地址A+3,最高有效字节的地址就是该word的地址,最高有效字节位于最低地址,word a=0 x f6 73 4b cd,f6,73,4b,cd,小端格式,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节,ARM处理器的存储器组织,小端的数据格式,低地址,高地址,地址A,地址A+1,地址A+2,地址A+3,最低有效字节的地址就是该word的地址,最低有效字节位于最低地址,word a=0 x f6 73 4b cd,f6,73,4b,cd,数据信息,状态信息,控制信息,数字量,模拟量,开关量,连续几位二进制形式表示的数或字符。如键盘输入的信息以及打印机、显示器输出的信息等,时间上连续变化的量,如温度、压力、流量等,只有两个状态的量,如阀门的合与断、电路的开与关等,CPU与I/O设备之间的接口信息,反映外设当前工作状态的信息,READY信号:输入设备是否准备好BUSY信号:输出设备是否忙,CPU向外部设备发送的控制命令信息,读写控制信号时序控制信号中断信号片选信号其它操作信号,ARM处理器的I/O编址方式,I/O端口的编址方式,I/O端口的编址方法,即I/O端口的地址安排方式,存储器映射编址,I/O映射编址,I/O端口的地址与内存地址统一编址,即I/O单元与内存单元在同一地址空间,I/O端口与内存单元分开编址,即I/O单元与内存单元都有自己独立的地址空间,ARM处理器的I/O编址方式,ARM处理器的I/O编址方式,ARM微处理器I/O编址方式,ARM 的I/O端口都是内存映射的方式,即对I/O端口的访问与内存的访问的方式完全一样。通常将I/O所映射的存储系统标识为非高速缓存(uncachable)和非缓冲(unbufferable)。,ARM处理器的I/O编址方式,七中处理器工作模式,ARM处理器的工作模式,ARM微处理器:CPU模式,User模式,程序不能访问有些受保护的资源,只能通过异常的形式来改变CPU的当前运行模式,特权模式可以存取系统中的任何资源,System模式,与User模式的运行环境一样但是它可以不受任何限制的访问任何资源该模式主要用于运行系统中的一些特权任务,FIQ模式,IRQ模式,Supervisor模式,Abort模式,Undefined模式,异常模式:主要是在外部中断或者程序执行非法操作时会触发,ARM处理器的工作模式,用户模式和特权模式,除了用户模式之外的其他6种处理器模式称为特权模式,特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。,特权模式中,除系统模式外,其他5种模式又称为异常模式,大多数的用户程序运行在用户模式下,此时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。,用户模式下,当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。,ARM处理器的工作模式,ARM处理器的工作模式,特权模式,除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。,ARM处理器的工作模式,异常模式,这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。,ARM处理器的工作模式,用户和系统模式,这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。,寄存器组织,ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14R0、程序计数器PC、一个或两个状态寄存器都是可访问的。,ARM处理器的寄存器组织,ARM状态下的寄存器组织,未分组寄存器R0R7,分组寄存器R8R14,程序计数器PC(R15),ARM处理器的寄存器组织,当前程序状态寄存器CPSR(R16),未分组寄存器R0R7,在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。,ARM处理器的寄存器组织,分组寄存器R8R12,每次所访问的物理寄存器与处理器当前的运行模式有关,R8R12:每个寄存器对应两个不同的物理寄存器,当使用fiq模式时,访问寄存器R8_fiqR12_fiq;,当使用除fiq模式以外的其他模式时,访问寄存器R8_usrR12_usr。,ARM处理器的寄存器组织,分组寄存器R13R14,R13、R14:每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式,采用以下的记号来区分不同的物理寄存器:,R13_,R14_,mode为以下几种之一:usr、fiq、irq、svc、abt、und。,ARM处理器的寄存器组织,堆栈指针R13,R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。,在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。,由于处理器的每种运行模式均有自己独立的物理寄存器R13,在初始化部分,都要初始化每种模式下的R13,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复。,ARM处理器的寄存器组织,子程序连接寄存器R14,R14也称作子程序连接寄存器或连接寄存器LR。当执行BL子程序调用指令时,可以从R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。,在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。,ARM处理器的寄存器组织,程序计数器PC(R15),ARM状态下,位1:0为0,位31:2用于保存PC;,Thumb状态下,位0为0,位31:1用于保存PC;,R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。,由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。,ARM处理器的寄存器组织,程序状态寄存器(CPSR/SPSR),每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(备份的程序状态寄存器),异常发生时,SPSR用于保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR。,由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。,ARM处理器的寄存器组织,寄存器R16用作CPSR(当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。,ARM状态下的寄存器组织,ARM状态各模式下的寄存器,所有的37个寄存器,分成两大类:31个通用32位寄存器;6个状态寄存器。,ARM状态各模式下可以访问的寄存器,一般的通用寄存器,在汇编语言中寄存器R0R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。,一般的通用寄存器,其中R0R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。,一般的通用寄存器,寄存器R8R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器,一般的通用寄存器,寄存器R8R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。,一般的通用寄存器,寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。,堆栈指针寄存器R13(SP),寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。,链接寄存器R14(LR),R14为链接寄存器(LR),在结构上有两个特殊功能:在每种模式下,模式自身的R14版本用于保存子程序返回地址;当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。,R14(LR)寄存器与子程序调用,MOV PC,LR,R14(地址A),1.程序A执行过程中调用程序B;,操作流程,2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14(LR);,3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;,链接寄存器R14(LR),ARM处理器的寄存器组织,程序计数器R15(PC),寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。,读R15的限制,正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。,程序计数器R15(PC),ARM处理器的寄存器组织,当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。,读R15的限制,程序计数器R15(PC),ARM处理器的寄存器组织,计算偏移量(PC值和当前指令地址的差)程序代码:,SUBR1,PC,#4;R1=下面STR指令的地址STRPC,R0;保存STR指令地址+偏移量LDRR0,R0;然后重装SUBR0,R0,R1;计算偏移量,0,4,8,12,ARM状态,程序计数器R15(PC),读R15的限制,ARM处理器的寄存器组织,写R15的限制,正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。,程序计数器R15(PC),ARM处理器的寄存器组织,写R15的限制,由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0 xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。,程序计数器R15(PC),ARM处理器的寄存器组织,当前程序状态寄存器CPSR,寄存器CPSR为当前程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。,Thumb状态下的寄存器组织,程序可以直接访问8个通用寄存器(R0R7)、程序计数器(PC)、堆栈指针(SP)、连接寄存器(LR)和CPSR。,同样,每一种特权模式下都有一组SP、LR和SPSR。,ARM处理器的寄存器组织,Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,Thumb状态下的寄存器组织图,ARM处理器的寄存器组织,Thumb状态下的寄存器与ARM状态下的寄存器关系图,ARM处理器的寄存器组织,低寄存器,高寄存器,在Thumb状态中访问高寄存器,在Thumb状态中,高寄存器(R8R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制。可以使用MOV、CMP和ADD指令对高寄存器操作。,ARM处理器的寄存器组织,当前程序状态寄存器,ARM体系结构包含一个当前程序状态寄存器(CPSR)和五个备份的程序状态寄存器(SPSRs)。备份的程序状态寄存器用来进行异常处理,其功能包括:,保存ALU中的当前操作信息,控制允许和禁止中断,设置处理器的运行模式,ARM处理器的寄存器组织,程序状态寄存器的每一位的安排,ARM处理器的寄存器组织,条件代码标志,保留,控制位,溢出标志 oVerflow,进位或借位扩展 Carry,零 Zero,负或小于 Negative,IRQ禁止 Interrupt,FIQ禁止 Fast,状态位 Thumb,模式位 Mode,N,Z,C,V,I,T,F,CPSR寄存器的格式,程序状态寄存器的条件码标志,在ARM状态下,绝大多数的指令都是有条件执行的。,在Thumb状态下,仅有分支指令是有条件执行的。,ARM处理器的寄存器组织,N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行,程序状态寄存器的控制位,状态寄存器的低8位(I、F、T和M4:0)称为控制位,发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。,T标志位:该位反映处理器的运行状态ARM体系结构v5及以上的版本的T系列处理器,当该位为1时,程序运行于Thumb状态,否则运行于ARM状态。ARM体系结构v5及以上的版本的非T系列处理器,当该位为1时,执行下一条指令以引起为定义的指令异常;当该位为0时,表示运行于ARM状态。,运行模式位M4:0是模式位,决定处理器的运行模式,ARM处理器的寄存器组织,中断禁止位I、F:I=1 禁止IRQ中断;F=1 禁止FIQ中断。,异常(Exceptions),ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。,ARM处理器的异常,当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。,ARM体系结构所支持的异常类型,ARM处理器的异常,对异常的响应,当一个异常出现以后,ARM微处理器会执行以下几步操作,将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。,将CPSR复制到相应的SPSR中。,根据异常类型,强制设置CPSR的运行模式位。,强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。,ARM处理器的异常,注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。,置位中断禁止标志,这样可以防止不受控制的异常嵌套。,从异常返回,异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:,将连接寄存器LR的值减去相应的偏移量后送到PC中。,将SPSR复制回CPSR中。,若在进入异常处理时设置了中断禁止位,要在此清除。,ARM处理器的异常,注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。,进入异常过程,程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态,用户程序运行时发生IRQ中断,硬件完成以下动作:,置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式,将下一条指令的地址存入IRQ模式的LR寄存器,将CPSR寄存器内容存入IRQ模式的SPSR寄存器,将跳转地址存入PC,实现跳转,BackAddr,JumpAddr,“?”表示对该位不关心,ARM处理器的异常,在异常处理结束后,异常处理程序完成以下动作:,退出异常过程,将SPSR寄存器的值复制回CPSR寄存器;,将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。,BackAddr,JumpAddr,return,BackAddr-偏移量,“?”表示对该位不关心,ARM处理器的异常,FIQ(Fast Interrupt Request),若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。,可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均可以执行以下指令从FIQ模式返回:SUBS PC,R14_fiq,#4,ARM处理器的异常,FIQ异常是为了支持数据传输或者通道处理而设计的。,IRQ(Interrupt Request),若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检查IRQ的输入。注意只有在特权模式下才能改变I位的状态。,不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均可以执行以下指令从