《ARM汇编语言程序设计基础课件第2章ARM体系结构.ppt》由会员分享,可在线阅读,更多相关《ARM汇编语言程序设计基础课件第2章ARM体系结构.ppt(120页珍藏版)》请在三一办公上搜索。
1、第2章 ARM体系结构,2.1 ARM体系结构简介,ARM(Advanced RISC Machines)公司1991年成立于英国剑桥,是专门从事基于RISC技术芯片设计开发的公司,主要出售芯片设计技术的授权,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。目前,全世界有几十家大的半导体公司都使用ARM公司的授权,使得ARM技术获得了更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场,更具
2、有竞争力。目前,ARM微处理器几乎已经深入到工业控制、无线通讯、网络应用、消费类电子产品、成像和安全产品各个领域采用RISC架构的ARM微处理器一般具有如下特点:支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件。Thumb指令集比通常的8位和16位CISC/RISC处理,器具有更好的代码密度;指令执行采用3级流水线/5级流水线技术;带有指令Cache和数据Cache,大量使用寄存器,指令执行速度更快。大多数数据操作都在寄存器中完成。寻址方式灵活简单,执行效率高。指令长度固定(在ARM状态下是32位,在Thumb状态下是16位);支持大端格式和小端格式两种方法存储
3、字数据;支持Byte(字节,8位)、Halfword(半字,16位)和Word(字,32位)三种数据类型。支持用户、快中断、中断、管理、中止、系统和未定义等7种处理器模式,除了用户模式外,其余的均为特权模式;处理器芯片上都嵌入了在线仿真ICE-RT逻辑,便于通过JTAG来仿真调试ARM体系结构芯片,可以避免使用昂贵的在线仿真器。另外,在处理器核中还可以嵌入跟踪宏单元ETM,用于监控内部总线,实时跟踪指令和数据的执行;具有片上总线AMBA(Advanced Micro-controller Bus Architecture)。,AMBA定义了3组总线:先进高性能总线AHB(Advanced Hi
4、gh performance Bus);先进系统总线ASB(Advanced System Bus);先进外围总线APB(Advanced Peripheral Bus)。通过AMBA可以方便地扩充各种处理器及I/O,可以把DSP、其他处理器和I/O(如UART、定时器和接口等)都集成在一块芯片中;采用存储器映像I/O的方式,即把I/O端口地址作为特殊的存储器地址;具有协处理器接口。ARM允许接16个协处理器,如CP15用于系统控制,CP14用于调试控制器;采用了降低电源电压,可工作在3.0V以下;减少门的翻转次数,当某个功能电路不需要时禁止门翻转;减少门的数目,即降低芯片的集成度;降低时钟频
5、率等一些措施降低功耗;体积小、低成本、高性能。ARM微处理器包括ARM7、ARM9、ARM9E、ARM10E、SecurCore、以及Intel的StrongARM、XScale和其它厂商基于ARM体系结构的,处理器,除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。一个典型的ARM体系结构方框图如图所示,包含有32位ALU、31个32位通用寄存器及6位状态寄存器、328位乘法器3232位桶形移位寄存器、指令译码及控制逻辑、指令流水线和数据地址寄存器等。,图2.1.1 ARM体系结构方框图,1ALUARM体系结构的ALU与常用的ALU逻辑结构基本相同,由
6、两个操作数锁存器、加法器、逻辑功能、结果及零检测逻辑构成。ALU的最小数据通路周期包含寄存器读时间、移位器延迟、ALU延迟、寄存器写建立时间、双相时钟间非重叠时间等几部分。2桶形移位寄存器ARM采用了3232位桶形移位寄存器,左移右移n位、环移n位和算术右移n位等都可以一次完成,可以有效的减少移位的延迟时间。在桶形移位寄存器中,所有的输入端通过交叉开关(Crossbar)与所有的输出端相连。交叉开关采用NMOS晶体管来实现。3高速乘法器ARM为了提高运算速度,采用两位乘法的方法,2位乘法可根据乘数的2位来实现“加移位”运算。ARM的高速乘法器采用328位的结构,完成322位乘法也只需5个时钟周
7、期。,4浮点部件在ARM体系结构中,浮点部件作为选件可根据需要选用,FPA10浮点加速器以协处理器方式与ARM相连,并通过协处理器指令的解释来执行。浮点的Load/Store指令使用频度要达到67,故FPA10内部也采用Load/Store结构,有8个80位浮点寄存器组,指令执行也采用流水线结构。5控制器ARM的控制器采用硬接线的可编程逻辑阵列PLA,其输入端有14根、输出端有40根,分散控制Load/Store多路、乘法器、协处理器以及地址、寄存器ALU和移位器。6寄存器ARM内含37个寄存器,包括31个通用32位寄存器和6个状态寄存器。,2.2 ARM微处理器结构,2.2.1 ARM7微处
8、理器 ARM7系列微处理器包括ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ几种类型。其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,主频最高可达130MIPS,采用能够提供0.9MIPS/MHz的三级流水线结构,内嵌硬件乘法器(Multiplier),支持16为压缩指令集Thumb,嵌入式ICE,支持片上Debug,支持片上断点和调试点。指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,支持Windows CE、Linux、Palm OS等操作系统。典型产品如Samsung公司的S3C4510B。1ARM7TDMI处理器内核ARM7TDM
9、I处理器的内核如图所示。,图2.2.1 ARM7TDMI内核结构,ARM7TDMI还提供了存储器接口、MMU接口、协处理器接口和调试接口,以及时钟与总线等控制信号,如图所示。存储器接口包括了32位地址A31:0、双向32位数据总线D31:0、单向32位数据总线DIN31:0与DOUT31:0、以及存储器访问请求MREQ、地址顺序SEQ、存储器访问控制MAS1:0和数据锁存控制BL3:0等控制信号。ARM7TDMI处理器内核也可以ARM7TDMI-S软核(Softcore)形式向用户提供。同时,提供多种组合选择,例如可以省去嵌入式ICE单元等。,图2.2.2 ARM7TDMI的接口,2ARM72
10、0T/ARM740T处理器内核ARM720T处理器内核是在ARM7TDMI处理器内核基础上,增加8KB的数据与指令Cache,支持段式和页式存储的MMU(Memory Management Unit)、写缓冲器及AMBA(Advanced Microcontroller Bus Architecture)接口而构成,如图所示。ARM740T处理器内核与ARM720T处理器内核相比,结构基本相同,ARM740T处理器核没有存储器管理单元MMU,不支持虚拟存储器寻址,而是用存储器保护单元来提供基本保护和Cache的控制。合适低价格低功耗的嵌入式应用。,图2.2.3 ARM720T内核结构,2.2.
11、2 ARM9微处理器 ARM9系列微处理器包含ARM920T、ARM922T和ARM940T几种类型,可以在高性能和低功耗特性方面提供最佳的性能。采用5级整数流水线,指令执行效率更高。提供1.1MIPS/MHz的哈佛结构。支持数据Cache和指令Cache,具有更高的指令和数据处理能力。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA总线接口。全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。MPU支持实时操作系统。ARM920T处理器核在ARM9TDMI处理器内核基础上,增加了分离式的指令Cache和数据Cache,并带有相
12、应的存储器管理单元I-MMU和D-MMU、写缓冲器及AMBA接口等,如图所示。,图2.2.4 ARM920T内核结构,ARM940T处理器核采用了ARM9TDMI处理器内核,是ARM920T处理器核的简化版本,没有存储器管理单元MMU,不支持虚拟存储器寻址,而是用存储器保护单元来提供存储保护和Cache控制。ARM9系列微处理器主要应用于无线通信设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。典型产品如Samsung公司的S3C2410A。,2.2.3 ARM9E微处理器 ARM9E系列微处理器包含ARM926EJ-S、ARM946E-S和ARM966E-S几种类型,使
13、用单一的处理器内核提供了微控制器、DSP、Java应用系统的解决方案。ARM9E系列微处理器提供了增强的DSP处理能力,很适合于那些需要同时使用DSP和微控制器的应用场合。ARM9E系列微处理器支持DSP指令集,适合于需要高速数字信号处理的场合。ARM9E系列微处理器采用5级整数流水线,支持32位ARM指令集和16位Thumb指令集,支持32位的高速AMBA总线接口,支持VFP9浮点处理协处理器,MMU支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统,MPU支持实时操作系统,支持数据Cache和指令Cache,主频最高可达300MIPS。ARM9系列微处理器主要应用
14、于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。,2.2.4 ARM10E微处理器 ARM10E系列微处理器包含ARM1020E、ARM1022E和ARM1026EJ-S几种类型,由于采用了新的体系结构,与同等的ARM9器件相比较,在同样的时钟频率下,性能提高了近50。同时采用了两种先进的节能方式,使其功耗极低。ARM10E系列微处理器支持DSP指令集,适合于需要高速数字信号处理的场合。采用6级整数流水线,支持32位ARM指令集和16位Thumb指令集,支持32位的高速AMBA总线接口,支持VFP10浮点处理协处理器,MMU支持Windows CE、Linux、Pa
15、lm OS等多种主流嵌入式操作系统,支持数据Cache和指令Cache,内嵌并行读/写操作部件,主频最高可达400MIPS。ARM10E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。,2.2.5 SecurCore微处理器 SecurCore系列微处理器包含SecurCore SC100、SecurCore SC110、SecurCore SC200和SecurCore SC210几种类型,提供了完善的32位RISC技术的安全解决方案。SecurCore系列微处理器除了具有ARM体系结构各种主要特点外,在系统安全方面:带有灵活的保护单元,以确保操作
16、系统和应用数据的安全;采用软内核技术,防止外部对其进行扫描探测;可集成用户自己的安全特性和其他协处理器。SecurCore系列微处理器主要应用于如电子商务、电子政务、电子银行业务、网络和认证系统等一些对安全性要求较高的应用产品及应用系统。,2.2.6 StrongARM微处理器 Intel StrongARM处理器是采用ARM体系结构高度集成的32位RISC微处理器,采用在软件上兼容ARMv4体系结构、同时采用具有Intel技术优点的体系结构。典型产品如SA110 处理器、SA1100、SA1110PDA系统芯片和SA1500多媒体处理器芯片等。例如其中的Intel StrongARM SA-
17、1110 微处理器是一款集成了32位StrongARM RISC处理器核、系统支持逻辑、多通信通道、LCD控制器、存储器和PCMCIA控制器以及通用I/O口的高集成度通信控制器。该处理器最高可在206 MHz下运行。SA-1110有一个大的指令Cache 和数据Cache、内存管理单元(MMU)和读/写缓存。存储器总线可以和包括SDRAM、SMROM 和类似SRAM的许多器件相接。软件与ARM V4结构处理器家族相兼容。Intel StrongARM处理器是便携式通讯产品和消费类电子产品的理想选择。,2.2.7 XScale微处理器 Intel XScale微体系结构提供了一种全新的、高性价比
18、、低功耗且基于ARMv5TE体系结构的解决方案,支持16位Thumb指令和DSP扩充。基于XScale技术开发的微处理器,可用于手机、便携式终端(PDA)、网络存储设备、骨干网(BackBone)路由器等。Intel XScale处理器的处理速度是Intel StrongARM处理速度的两倍,数据Cache的容量从8KB增加到32KB,指令Cache的容量从16KB增加到32KB,微小数据Cache的容量从512B增加到2KB;为了提高指令的执行速度,超级流水线结构由5级增至7级;新增乘/加法器MAC和特定的DSP型协处理器,以提高对多媒体技术的支持;动态电源管理,使XScale处理器的时钟可
19、达1GHz、功耗1.6W,并能达到1200MIPS。XScale微处理器架构经过专门设计,核心采用了英特尔先进的0.18m工艺技术制造;具备低功耗特性,适用范围从0.1mW1.6W。同时,它的时钟工作频率将接近1GHz。XScale与,StrongARM相比,可大幅降低工作电压并且获得更高的性能。具体来讲,在目前的StrongARM中,在1.55V下可以获得133MHz的工作频率,在2.0V下可以获得206MHz的工作频率;而采用XScale后,在0.75V时工作频率达到150MHz,在1.0V时工作频率可以达到400MHz,在1.65V下工作频率则可高达800MHz。超低功率与高性能的组合使
20、Intel XScale适用于广泛的互联网接入设备,在因特网的各个环节中,从手持互联网设备到互联网基础设施产品,Intel XScale都表现出了令人满意的处理性能。Intel采用XScale架构的嵌入式处理器典型产品有PXA25x、PXA26x和PXA27x系列。,2.3 ARM微处理器的寄存器结构,ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄器包括:31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。2.3.1 处理器运行模式ARM微处理器支持7种运行模式,分别
21、为:usr(用户模式):ARM处理器正常程序执行模式。fiq(快速中断模式):用于高速数据传输或通道处理 irq(外部中断模式):用于通用的中断处理 svc(管理模式):操作系统使用的保护模式,abt(数据访问终止模式):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。sys(系统模式):运行具有特权的操作系统任务。und(未定义指令中止模式):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
22、除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。,ARM处理器在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0R14)、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。2.3.2 处理器工作状态ARM处理器有32位ARM和16位T
23、humb两种工作状态。在32位ARM状态下执行字对齐的ARM指令,在16位Thumb状态下执行半字对齐的Thumb指令。在Thumb状态下,程序计数器PC(Program Counter)使用位1选择另一个半字。ARM处理器在两种工作状态之间可以切换,切换不影响处理器的模式或寄存器的内容。,(1)当操作数寄存器的状态位(位0)为1时,执行BX指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、FIQ、Undef、Abort和SWI)返回时,自动转换到Thumb状态。(2)当操作数寄存器的状态位(位0)为0时,执行BX指令进入ARM状态,处理器进行异常处理(IRQ、
24、FIQ、Reset、Undef、Abort和SWI)。在此情况下,把PC放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM状态。,2.3.3 ARM处理器的寄存器组织ARM处理器的37个寄存器被安排成部分重叠的组,不能在任何模式都可以使用,寄存器的使用与处理器状态和工作模式有关。如图所示,每种处理器模式使用不同的寄存器组。其中15个通用寄存器(R0R14)、1或2个状态寄存器和程序计数器是通用的。1通用寄存器通用寄存器(R0R15)可分成不分组寄存器R0R7、分组寄存器R8R14和程序计数器R15 三类。(1)不分组寄存器R0R7不分组寄存器R0R7是真正的通用寄存器,可以工作在
25、所有的处理器模式下,没有隐含的特殊用途。(2)分组寄存器R8R14分组寄存器R8R14取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。,寄存器R8Rl2可分为两组物理寄存器。一组用于FIQ模式,另一组国用于除FIQ以外的其他模式。第1组访问R8_fiqR12_fiq,允许快速中断处理。第二组访问R8_usrR12_usr,寄存器R8R12没有任何指定的特殊用途。,表明用户或系统模式使用的一般寄存器己被异常模式特定的另一寄存器所替代。图2.3.1 寄存器组织结构图寄存器R13R14可分为6个分组的物理寄存器。1个用于用户模式和系统模式,而其他5个分别用于svc、abt、und
26、、irq和fiq五种异常模式。访问时需要指定它们的模式,如:R13_mode,R14_mode;其中:mode可以从usr、svc、abt、und、irq和fiq六种模式中选取一个。寄存器R13通常用作堆栈指针,称作SP。每种异常模式都有自己的分组R13。通常R13应当被初始化成指向异常模式分配的堆栈。在入口处,异常处理程序将用到的其他寄存器的值保存到堆栈中;返回时,重新将这些值加载到寄存器。这种异常处理方法保证了异常出现后不会导致执行程序的状态不可靠。寄存器R14用作子程序链接寄存器,也称为链接寄存器LK(Link Register)。当执行带链接分支(BL)指令时,得到R15的备份。在其他
27、情况下,将R14当做通用寄存器。类似地,当中断或异常,出现时,或当中断或异常程序执行BL指令时,相应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。FIQ模式有7个分组的寄存器R8R14,映射为R8_fiqR14_fiq。在ARM状态下,许多FIQ处理没必要保存任何寄存器。User、IRQ、Supervisor、Abort和Undefined模式每一种都包含两个分组的寄存器R13和R14的映射,允许每种模式都有自己的堆栈和链接寄存器。(3)程序计数器R15寄存器R15用作程序计数器(PC)。在ARM状态,位1:0为0,位31:2
28、保存PC。在Thumb状态,位0为0,位31:1保存PC。R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。读程序计数器。指令读出的R15的值是指令地址加上8字节。由于ARM指令始终是字对齐的,所以读出结果值的位1:0总是,0(在Thumb状态下,情况有所变化)。读PC主要用于快速地对临近的指令和数据进行位置无关寻址,包括程序中的位置无关转移。写程序计数器。写R15的通常结果是将写到R15中的值作为指令地址,并以此地址发生转移。由于ARM指令要求字对齐,通常希望写到R15中值的位1:0=0b00。由于ARM体系结构采
29、用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。2程序状态寄存器寄存器R16用作程序状态寄存器CPSR(Current Program Status Register,当前程序状态寄存器)。在所有处理器模式下都可以访问CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每种异常模式都有一个程序状态保存寄存器SPSR(Saved Program Status Register)。当异常出现,SPSR用于保留CPSR的状态。CPSR和SPSR的格式如下:(1)条件码标志N、Z、C、V(Nega
30、tive、Zero、Carry、oVerflow)均为条件码标志位(Condition Code Flags),它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。CPSR中的条件码标志可由大多数指令检测以决定指令是否执行。在ARM状态下,绝大多数的指令都是有条件执行的。在Thumb状态下,仅有分支指令是有条件执行的。通常条件码标志通过执行比较指令(CMN、CMP、TEQ、TST)、一些算术运算、逻辑运算和传送指令进行修改。条件码标志的通常含义如下:N:如果结果是带符号二进制补码,那么,若结果为负数,则N=1;若结果为正数或0,则N0。Z:若指令的结果为0,则置1(通常表
31、示比较的结果为“相等”),否则置0。C:可用如下4种方法之一设置:,一加法(包括比较指令CMN)。若加法产生进位(即无符号溢出),则C置1;否则置0。一减法(包括比较指令CMP)。若减法产生借位(即无符号溢出),则C置0;否则置1。一对于结合移位操作的非加法减法指令,C置为移出值的最后1位。一对于其他非加法减法指令,C通常不改变。V:可用如下两种方法设置,即 一对于加法或减法指令,当发生带符号溢出时,V置1,认为操作数和结果是补码形式的带符号整数。一对于非加法减法指令,V通常不改变。(3)控制位 程序状态寄存器PSR(Program Status Register)的最低8位I、F、T和M4:
32、0用作控制位。当异常出现时改变控制位。处理器在特,权模式下时也可由软件改变。a中断禁止位 I:置1,则禁止IRQ中断;F:置1,则禁止FIQ中断。bT位 T=0 指示ARM执行;T=1 指示Thumb执行。c模式控制位 M4、M3、M2、Ml和M0(M4:0)是模式位,决定处理器的工作模式,如表所列。,表2.3.1 M4:0模式控制位,并非所有的模式位组合都能定义一种有效的处理器模式。其他组合的结果不可预知。(4)其他位 程序状态寄存器的其他位保留,用做以后的扩展。2.3.4 Thumb状态的寄存器集Thumb状态下的寄存器集如图所示,是ARM状态下的寄存器集的子集。程序员可以直接访问8个通用
33、寄存器(R0R7)、PC、SP、LR和CPSR。每一种特权模式都有一组SP、LR和SPSR。Thumb状态R0R7与ARM状态R0R7是一致的。Thumb状态CPSR和SPSR与ARM的状态CPSR和SPSR是一致的。Thumb状态SP映射到ARM状态R13。Thumb状态LR映射到ARM状态R14。Thumb状态PC映射到ARM状态PC(R15)。,图2.3.2 Thumb状态下寄存器组织,Thumb状态与ARM状态的寄存器关系如图所示。,图2.3.3 Thumb状态与ARM状态的寄存器关系,在Thumb状态下,寄存器R8R15(高寄存器)并不是标准寄存器集的一部分。汇编语言编程者访问它虽有
34、限制,但可以将其用做快速暂存存储器,将R0R7(Lo-registers,低寄存器)中的值传送到R8R15(Hi-registers,高寄存器)。,2.4 ARM微处理器的异常处理,在一个正常的程序流程执行过程中,由内部或外部源产生的一个事件使正常的程序产生暂时的停止时,称之为异常。异常是由内部或外部源产生并引起处理器处理一个事件,例如一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,当异常处理完成之后,恢复保留的当前处理器状态,继续执行当前程序。多个异常同时发生时,处理器将会按固定的优先级进行处理。ARM体系结构中的异常,与单片机的中断有相似之处,但异常与中断的概念并不完全等同,
35、例如外部中断或试图执行未定义指令都会引起异常。2.4.1 ARM体系结构的异常类型ARM体系结构支持7种类型的异常,异常类型、异常处理模式和优先级如表所示。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量(Exception Vectors)。,表2.4.1 ARM体系结构的异常类型和异常处理模式,2.4.2 异常类型的含义(1)复位当处理器的复位电平有效时,产生复位异常,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,程序跳转到复位异常处理程序处执行(从地址0 x00000000或0 xFFFF0000开始执行指令)。(2)
36、未定义指令异常当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。当ARM处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。若试图执行未定义的指令,也会出现未定义指令异常。未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。,(3)软件中断异常(SoftWare Interrupt,SWI)软件中断异常由执行SWI指令产生,可使用该异常机制实现系统功能调用,用于用户模式下的程序调用特权操作指令,以请求特定的管理(操作系统)函数。(4)指令预取中止若处
37、理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出存储器中止(Abort)信号,但当预取的指令被执行时,才会产生指令预取中止异常。(5)数据中止(数据访问存储器中止)若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。存储器系统发出存储器中止信号。响应数据访问(加载或存储)激活中止,标记数据为无效。在后面的任何指令或异常改变CPU状态之前,数据中止异常发生。(6)外部中断请求(IRQ)异常当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。IRQ异常的优先级比FIQ异常的低。当进入F
38、IQ处理时,会屏蔽掉IRQ异常。,(7)快速中断请求(FIQ)异常当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。FIQ支持数据传送和通道处理,并有足够的私有寄存器。2.4.3 异常的响应过程当一个异常出现以后,ARM微处理器会执行以下几步操作:将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC4或PC8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。将CPSR状态传送到相应的SPSR中。根据异常类型,强制设置C
39、PSR的运行模式位。强制PC从相关的异常向量地址取下一条指令执行,跳转到相应的异常处理程序。还可以设置中断禁止位,以禁止中断发生。,如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:将连接寄存器LR的值减去相应的偏移量后送到PC中。将SPSR内容送回CPSR中。若在进入异常处理时设置了中断禁止位,要在此清除。可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。,2.4.4 应用程序中的异常处理 在应用程序的设计中,异常处理采用的方式是在异常向量表中的特定
40、位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。,2.5 ARM的存储器结构,ARM体系结构允许使用现有的存储器和I/O器件进行各种各样的存储器系统设计。1地址空间ARM体系结构使用232个字节的单一、线性地址空间。将字节地址做为无符号数看待,范围为02321。2存储器格式对于字对齐的地址A,地址空间规则要求如下:地址位于A的字由地址为A、A1、A2和A3的字节组成;地址位于A的半字由地址为A和A1的字节组成;地址位于A2的半字由地址为A2和A3的字节组成;地址位于
41、A的字由地址为A和A2的半字组成。ARM存储系统可以使用小端存储或者大端存储两种方法,大端存储和小端存储格式如图所示。,ARM体系结构通常希望所有的存储器访问能适当地对齐。特别是用于字访问的地址通常应当字对齐,用于半字访问的地址通常应当半字对齐。未按这种方式对齐的存储器访问称作非对齐的存储器访问。,图2.5.1 大端存储和小端存储格式,若在ARM态执行期间,将没有字对齐的地址写到R15中,那么结果通常是不可预知或者地址的位1:0被忽略。若在Thumb态执行期间,将没有半字对齐的地址写到R15中,则地址的位0通常忽略。3ARM存储器结构ARM处理器有的带有指令Cache和数据Cache,但不带有
42、片内RAM和片内ROM。系统所需的RAM和ROM(包括Flash)都通过总线外接。由于系统的地址范围较大(2324GB),有的片内还带有存储器管理单元MMU(Memory Management Unit)。ARM架构处理器还允许外接PCMCIA。4存储器映射I/OARM系统使用存储器映射I/O。I/O口使用特定的存储器地址,当从这些地址加载(用于输入)或向这些地址存储(用于输出)时,完成I/O功能。加载和存储也可用于执行控制功能,代替或者附加到正常的输入或输出功能。,然而,存储器映射I/O位置的行为通常不同于对一个正常存储器位置所期望的行为。例如,从一个正常存储器位置两次连续的加载,每次返回的
43、值相同。而对于存储器映射I/O位置,第2次加载的返回值可以不同于第1次加载的返回值。,2.6 ARM微处理器指令系统,2.6.1 基本寻址方式寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9 种基本寻址方式。1寄存器寻址操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。例如指令:MOV R1,R2;R1R2 SUB R0,R1,R2;R0R1-R22立即寻址在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为
44、立即数)。立即数要以“”为前缀,表示16进制数值时以“0 x”表示。,例如指令:ADD R0,R0,#1;R0R0+1MOV R0,#0 xff00;R00 xff003寄存器移位寻址寄存器移位寻址是ARM指令集特有的寻址方式。第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。例如指令:MOV R0,R2,LSL#3;R2的值左移3位,结果放入R0,即R0=R2*8ANDS R1,R1,R2,LSL R3;R2的值左移R3位,然后和R1相与操作,结果放入R1可采用的移位操作如下:LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0。,LSR:逻辑右移
45、(Logical Shift Right),寄存器中字的高端空出的位补0。ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位RRX:带扩展的循环右移(Rotate Right extended by 1 place),操作数右移一位,高端空出的位用原C 标志值填充。各移位操作过程如图所示。,图2.6.1 移位操作过程,4寄存器间接寻址指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单
46、元中,即寄存器为操作数的地址指针,操作数存放在存储器中。例如指令:LDR R0,R1;R0R1(将R1中的数值作为地址,取出此地址中的数据保存在R0中)STR R0,R1;R1 R05变址寻址变址寻址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址,变址寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。例如指令:LDR R2,R3,#4;R2R3+4(将R3中的数值加4作为地,址,取出此地址的数值保存在R2 中)STR R1,R0,#-2;R0-2 R1(将R0中的数值减2 作为地址,把R1中的内容保存到此地址位置)6多寄存器寻址采用多寄存器寻址方式
47、,一条指令可以完成多个寄存器值的传送,这种寻址方式用一条指令最多可以完成16个寄存器值的传送。例如指令:LDMIA R0,R1,R2,R3,R5;R1R0;R2R0+4;R3R3+8;R4R3+12 7堆栈寻址堆栈是一种数据结构,堆栈是特定顺序进行存取的存储区,操作,顺序分为“后进先出”和“先进后出”,堆栈寻址时隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元就是堆栈的栈顶。存储器生长堆栈可分为两种:向上生长:向高地址方向生长,称为递增堆栈(Ascending Stack)。向下生长:向低地址方向生长,称为递减堆栈(Decending Stack)。堆栈
48、指针指向最后压入的堆栈的有效数据项,称为满堆栈(Full Stack);堆栈指针指向下一个要放入的空位置,称为空堆栈(Empty Stack)。这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方式,即:满递增堆栈:堆栈指针指向最后压入的数据,且由低地址向高地址生成。如指令LDMFA,STMFA 等。满递减堆栈:堆栈指针指向最后压入的数据,且由高地址向低地址生成。如指令LDMFD,STMFD 等。,空递增堆栈:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生成。如指令LDMEA,STMEA 等。空递减堆栈:堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地
49、址生成。如指令LDMED,STMED 等。8块复制寻址块复制寻址用于把一块从存储器的某一位置复制到另一位置,是一个多寄存器传送指令。例如指令:STMIA R0!,R1-R7;将R1R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,增长方向为向上增长。STMDA R0!,R1-R7;将R1R7的数据保存到存储器中,存储器指针在保存第一个值之后增加,增长方向为向下增长。,9相对寻址相对寻址是变址寻址的一种变通,由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。例如指令:BL ROUTE1;调用到ROUTE1子程序 BEQ LOOP;条件
50、跳转到LOOP标号处 LOOP MOV R2,#2 ROUTE1,2.6.2 ARM 指令集1指令格式(1)基本格式 S,其中,内的项是必须的,内的项是可选的,如是指令助记符,是必须的,而为指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。opcode 指令助记符,如LDR,STR等 cond 执行条件,如EQ,NE等 S 是否影响CPSR 寄存器的值,书写时影响CPSR,否则不影响 Rd 目标寄存器 Rn 第一个操作数的寄存器,operand2 第二个操作数。在ARM指令中,灵活的使用第2个操作数能提高代码效率,第2个操作数的形式如0 x3FC、0、0 xF0000000、2