版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章ARM体系结构1ARM体系结构简介2ARM微处理器的寄存器结构3ARM微处理器的异常处理45ARM微处理器结构ARM微处理器指令系统6ARM的存储器结构第二章ARM体系结构1ARM体系结构简介2ARM微处理器的寄存器结构3ARM微处理器的异常处理45ARM微处理器结构ARM微处理器指令系统6ARM的存储器结构2.1ARM体系结构简介什么是ARM?公司名称微处理器的通称ARM技术成立于1990年11月前身为Acorn计算机公司AdvanceRISCMachine(ARM)主要设计ARM系列RISC处理器内核授权ARM内核给生产和销售半导体的合作伙伴ARM公司不生产芯片IP(IntelligenceProperty)另外也提供基于ARM架构的开发设计技术软件工具,评估板,调试工具,应用软件,总线架构,外围设备单元,等等2.1.1什么是ARM5ARM授权费IPARM创造和设计IPPartner产品,例如:芯片Partner把ARMIP和其他IP集成进产品OEMCustomer版权费单价OEM用来自ARMPartner的芯片设计制造最终用户产品业务拓展/市场格局ARM的业务模型ARMPartnershipModel有多个版本,除了一些Unix图形工作站之外,大多数ARM核心的处理器都是用在嵌入式领域。ARM既可以认为是一个公司的名字,也可认为是对一类微处理器的通称,还可以认为是一种技术的名字。2.1.1什么是ARM2.1.2ARM体系结构特点支持Thumb/ARM双指令集;指令执行采用3级/5级流水线;带有指令和数据cache,大量使用寄存器,指令执行速度更快;支持大端格式和小端格式两种方法储字数据;支持字节、半字和字3种数据类型;支持七种处理器模式;嵌入了在线仿真ICE-RT逻辑;具有片上总线AMBA(AdvancedMicrocontrollerBusArchitecture);采用存储器映像I/O的方式;具有协处理器接口;采用降低电源电压;体积小,成本低,性能高。2.1.2ARM体系结构组成32位的ALU37个32位寄存器组织32*8位乘法器32*32位桶形移位寄存器指令译码及控制逻辑指令流水线数据/地址寄存器图2.1.1ARM体系结构方框图2.1.2ARM体系结构组成第二章ARM体系结构1ARM体系结构简介2ARM微处理器的寄存器结构3ARM微处理器的异常处理45ARM微处理器结构ARM微处理器指令系统6ARM的存储器结构2.2ARM微处理器系列
ARM7系列ARM9系列ARM9E系列ARM10E系列SecurCore系列Intel
XscaleCortex系列ARM7TDMI4T1支持Halfword和signedhalfword/byte和Systemmode支持Thumb指令集24ARM9TDMIARM720TARM940T改良的ARM/Thumb交互作用以及CLZ指令5TESaturatedmathsDSPmultiply-accumulateinstructionsXScaleARM1020EARM9E-SARM966E-S3早期的ARMsARM9EJ-S5TEJARM7EJ-SARM926EJ-SJazelle支持Java字节码
6ARM11SIMD2.2.1ARM版本ARM处理器架构进化史ARM处理器核心技术演进路线数据源:ARM,三星,DIGITIMES整理,2009/9ARMv5指令集ARM926EJ-SARM1026EJ-SARMv6指令集ARM1136J(F)-SARM11MPCore(1~4核心)ARMv7-Cortex指令集Cortex-A8Cortex-A9MPCore(1~4核心)400MHz600MHz800MHz200MHz20052006200720082009130nm制程90nm制程65nm制程45nm制程1GHzARM公司开发了很多系列的ARM处理器核,目前最新的系列已经是ARM11。ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列。每个系列提供一套相对独特的性能来满足不同应用领域的需求。2.2.2ARM处理器系列17命名的含义标志含义说明T支持Thumb指令集Thumb指令集版本1:ARMv4TThumb指令集版本2:ARMv5TThumb-2:ARMv6TD片上调试M支持长乘法32位乘32位得到64位,32位的乘加得到64位IEmbeddedICEEDSP指令增加了DSP算法处理器指令:16位乘加指令,饱和的带符号数的加减法,双字数据操作,cache预取指令JJava加速器Jazelle提高java代码的运行速度S可综合提供VHDL或Verilog语言设计文件ARM7微处理器系列ARM7系列是低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。ARM7系列有如下特点:具有嵌入式ICE-RT逻辑,调试开发方便;极低的功耗,适合对功耗要求较高的应用,如便携式产品;能够提供0.9MIPS/MHz的三级流水线结构;兼容16位的Thumb指令集,代码密度高;对操作系统的支持广泛,如WindowsCE、Linux、PalmOS等;指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代;主频最高可达130M,高速的运算处理能力能胜任绝大多数的复杂应用。ARM7微处理器系列主要应用领域:工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体等。ARM7系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM处理器核。TDMI的基本含义为:T:支持16位压缩指令集Thumb;D:支持片上Debug;M:内嵌硬件乘法器(Multiplier)I:嵌入式ICE,支持片上断点和调试点;ARM7微处理器系列主要应用领域:工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体等。ARM7系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM处理器核。ARM7TDMI-SARM7TDMI的可综合(synthesizable)版本(软核),对应用工程师来说其编程模型与ARM7TDMI一致;嵌入式Embedded-ICE,支持片上断点和调试点;支持64位乘法;支持片上调试Debug;支持高密度16位的压缩Thumb指令集ARM7的产品线。ARM7TDMI:同时具备四个模块,当然用户也可选择其中的几个或一个。ARM7TDMI-S:软件与ARM7TDMI完全兼容,硬件预留功能扩展口。ARM710T:ARM7TDMI+8KCache+MMU,Cache:片内缓存,提高CPU性能,MMU:内存管理单元。ARM740T:ARM7TDMI+8KCache+ProtectionUnit。ARM720T:ARM7TDMI+8KCache+WinCESupport。ARM7微处理器系列ARM9微处理器系列
ARM9系列微处理器在高性能和低功耗特性方面提供最佳的表现。具有以下特点:5级流水线,指令执行效率更高。提供1.1MIPS/MHz的哈佛结构。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA总线接口。全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。MPU支持实时操作系统。支持数据Cache和指令Cache。ARM9微处理器系列ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。ARM9系列微处理器包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。ARM9E微处理器系列ARM9E系列微处理器的主要特点如下:支持DSP指令集,适合于需高速数字信号处理的场合。5级流水线,指令执行效率更高。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA总线接口。支持VFP9浮点处理协处理器。全性能的MMU,支持众多主流嵌入式操作系统。支持数据Cache和指令Cache,具有更高的处理能力。ARM9E微处理器系列ARM9E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。ARM9E系列微处理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三种类型,以适用于不同的应用场合。ARM10E微处理器系列ARM10E系列微处理器的主要特点如下:支持DSP指令集,适合于需要高速数字信号处理的场合。6级流水线,指令执行效率更高。支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA总线接口。支持VFP10浮点处理协处理器。全性能的MMU,支持众多主流嵌入式操作系统。支持数据Cache和指令Cache,具有更高的处理能力主频最高可达400M。内嵌并行读/写操作部件。ARM10E微处理器系列ARM10E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。ARM10E系列微处理器包含ARM1020E、ARM1022E和ARM1026EJ-S三种类型,以适用于不同的应用场合。SecurCore微处理器系列SecurCore系列微处理器除了具有ARM体系结构各种主要特点外,还在系统安全方面具有如下的特点:带有灵活的保护单元,确保操作系统和应用数据的安全。采用软内核技术,防止外部对其进行扫描探测。可集成用户自己的安全特性和其他协处理器。SecurCore微处理器系列SecurCore系列微处理器主要应用于一些对安全性要求较高的应用产品及应用系统,如电子商务、电子政务、电子银行业务、网络和认证系统等领域。SecurCore系列微处理器
SecurCoreSC100、SecurCoreSC110、SecurCoreSC200和SecurCoreSC210四种类型。StrongARM微处理器系列
IntelStrongARM处理器是便携式通讯产品和消费类电子产品的理想选择,已成功应用于多家公司的掌上电脑系列产品。IntelStrongARMSA-1100处理器是采用ARM体系结构高度集成的32位RISC微处理器。它融合了Intel公司的设计和处理技术以及ARM体系结构的电源效率,采用在软件上兼容ARMv4体系结构、同时采用具有Intel技术优点的体系结构。Xscale处理器
Xscale处理器是基于ARMv5TE体系结构的解决方案,是一款全性能、高性价比、低功耗的处理器。它支持16位的Thumb指令和DSP指令集,已使用在数字移动电话、个人数字助理和网络产品等场合。Cortex微处理器系列ARMCortex发布于2005年,为各种不同性能需求的应用提供了一整套完整的优化解决方案,该系列的技术划分完全针对不同的市场应用和性能需求。目前ARMCortex定义了三个系列:“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器和低成本应用提供优化。Cortex系列Cortex-M系列:
针对价格敏感应用领域的嵌入式处理器,只支持Thumb-2指令集,强调操作的确定性,以及性能、功耗和价格的平衡。是为对开发费用非常敏感同时对性能要求小断增加的嵌入式应用(如微控制器、汽车车身控制系统和各种大型家电)所设计的,主要面向单片机领域,可以说是51单品机的完美替代品。Cortex系列Cortex-R系列:
针对实时系统的嵌入式处理器。支持ARM、Thumb和Thumb-2指令集,强调实时性,存储器管理只支持物理地址。主要面向实时控制领域,如汽车刹车控制等,这一领域要求处理器响应中断的实时性高,并且要尽可能的节约成本Cortex系列Cortex-A系列:
针对复杂OS和应用程序(如多媒体)的应用处理器。支持ARM、Thumb和Thumb-2指令集,强调高性能与合理的功耗,存储器管理支持虚拟地址。面向尖端的基于虚拟内存的操作系统和用户应用,如多媒体,上网本等Cortex处理器技术特点ARMv7架构是在ARMv6架构的基础上诞生的。该架构采用了Thumb-2技术。Thumb-2技术比纯32位代码少使用31%的内存,减小了系统开销,同时能够提供比已有的基于Thumb技术的解决方案高出38%的性能。第二章ARM体系结构1ARM体系结构简介2ARM微处理器的寄存器结构3ARM微处理器的异常处理45ARM微处理器结构ARM微处理器指令系统6ARM的存储器结构2.3ARM处理器的寄存器结构处理器的运行模式处理器的工作状态处理器的寄存器组织处理器模式说明备注
用户(usr)正常程序执行模式不能直接切换到其它模式
系统(sys)运行操作系统的特权任务与用户模式类似,但具有可以直接切换到其它模式等特权
快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式
中断(irq)用于通用中断处理IRQ异常响应时进入此模式
管理(svc)操作系统保护模式系统复位和软件中断响应时进入此模式
中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处
未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式2.3.1处理器的运行模式处理器7种模式特权模式处理器模式说明备注
用户(usr)正常程序工作模式不能直接切换到其它模式
系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权
快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式
中断(irq)用于通用中断处理IRQ异常响应时进入此模式
管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式
中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处
未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。
未定义(und)
中止(abt)
管理(svc)
中断(irq)
快中断(fiq)
系统(sys)2.3.1处理器的运行模式异常模式处理器模式说明备注
用户(usr)正常程序工作模式不能直接切换到其它模式
系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权
快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式
中断(irq)用于通用中断处理IRQ异常响应时进入此模式
管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式
中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处
未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式
未定义(und)
中止(abt)
管理(svc)
中断(irq)
快中断(fiq)这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。2.3.1处理器的运行模式用户和系统模式处理器模式说明备注
用户(usr)正常程序工作模式不能直接切换到其它模式
系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权
快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式
中断(irq)用于通用中断处理IRQ异常响应时进入此模式
管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式
中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处
未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。
系统(sys)
用户(usr)2.3.1处理器的运行模式用户模式和特权模式除了用户模式之外的其他6种处理器模式称为特权模式特权模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式的切换。特权模式中,除系统模式外,其他5种模式又称为异常模式大多数的用户程序运行在用户模式下,此时,应用程序不能够访问一些受操作系统保护的系统资源,应用程序也不能直接进行处理器模式的切换。用户模式下,当需要进行处理器模式切换时,应用程序可以产生异常处理,在异常处理中进行处理器模式的切换。模式切换处理器模式可以通过软件进行切换,也可以通过外部中断或者异常处理过程进行切换。当应用程序发生异常中断时,处理器进入相应的异常模式。在每一种异常模式下都有一组寄存器,供相应的异常处理程序使用,这样就可以保证在进入异常模式时,用户模式下的寄存器不被破坏。系统模式并不是通过异常进入的,它和用户模式具有完全一样的寄存器。但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式切换。主要供操作系统任务使用。通常操作系统的任务需要访问所有的系统资源,同时该任务仍然使用用户模式的寄存器组,而不是使用异常模式下相应的寄存器组,这样可以保证当异常中断发生时任务状态不被破坏。从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:
-第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;
-第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。2.3.2处理器的工作状态ARM和Thumb指令简介ARM处理器是基于精简指令集计算机(RISC)原理设计的,指令集和相关译码机制较为简单。ARM体系结构在V4版中增加了16位Thumb指令集。ARM指令集效率高,但是代码密度低;Thumb指令集具有较高的代码密度,却仍然保持ARM的大多数性能上的优势,它是ARM指令集的子集。ARM指令集与Thumb指令集的关系Thumb指令集具有灵活、小巧的特点ARM指令集支持ARM核所有的特性,具有高效、快速的特点ARM和Thumb指令进入Thumb状态当操作数寄存器的状态位为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef等),则异常处理返回时,自动切换到Thumb状态。进入ARM状态当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。2.3.2处理器的工作状态2.3.3处理器的寄存器组织简介在ARM处理器内部有37个用户可见的寄存器。在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiq*R9(SB,v6)R9R9_fiq*R10(SL,v7)R10R10_fiq*R11(FP,v8)R11R11_fiq*R12(IP)R12R12_fiq*R13(SP)R13R13_svc*R13_abt*R13_und*R13_irq*R13_fiq*R14(LR)R14R14_svc*R14_abt*R14_und*R14_irq*R14_fiq*R15(PC)R15状态寄存器R16(CPSR)CPSRSPSR无SPSR_svcSPSR_abtSPSR_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_svcSPSR_abtSPSR_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_svcSPSR_abtSPSR_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_abtSPSR_undSPSR_irqSPSR_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。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_abtSPSR_undSPSR_irqSPSR_fiqR13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。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_abtSPSR_undSPSR_irqSPSR_fiqR14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器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_abtSPSR_undSPSR_irqSPSR_fiqR12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。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_abtSPSR_undSPSR_irqSPSR_fiq寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13ARM状态各模式下的寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_abtSPSR_undSPSR_irqSPSR_fiq寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。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_abtSPSR_undSPSR_irqSPSR_fiqR14为链接寄存器(LR),在结构上有两个特殊功能:在每种模式下,模式自身的R14版本用于保存子程序返回地址;当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。ARM状态各模式下的寄存器Lable程序A程序BR14R14(LR)寄存器与子程序调用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A执行过程中调用程序B;操作流程2.程序跳转至标号Lable,执行程序B。同时硬件将“BLLable”指令的下一条指令所在地址存入R14(LR);3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;2.3.3处理器的寄存器组织R14寄存器与异常发生异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。2.3.3处理器的寄存器组织1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏R14_irq2.3.3处理器的寄存器组织寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_abtSPSR_undSPSR_irqSPSR_fiq程序计数器R15(PC)寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。读R15的限制正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDRR0,PC??????PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码2.3.3处理器的寄存器组织写R15的限制正常操作时,写入R15的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。2.3.3处理器的寄存器组织写R15的限制由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。2.3.3处理器的寄存器组织寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_abtSPSR_undSPSR_irqSPSR_fiq寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。ARM状态各模式下的寄存器ARM内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含:4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位,分别控制一种类型的中断;
5个对当前处理器模式进行编码的位;1个用于指示当前执行指令(ARM还是Thumb)的位。2.3.3处理器的寄存器组织每个异常模式还带有一个程序状态保存寄存器(SPSR),它用于保存在异常发生之前的CPSR。CPSR和SPSR通过特殊指令(MRS、MSR)进行访问。注意:如果通过程序修改CPSR寄存器中的模式位进入异常模式,那么硬件将不会把CPSR保存至SPSR中。2.3.3处理器的寄存器组织程序状态寄存器的访问NZCV——IM0M1M2M3M4TF—...313029282726876543210
程序状态寄存器条件代码标志保留控制位NZCVIM0M1M2M3M4TFCPSR寄存器的格式2.3.3处理器的寄存器组织程序状态寄存器条件代码标志大多数“数值处理指令”可以选择是否影响条件代码标志位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志。N、Z、C和V位都是条件代码标志。算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。程序状态寄存器条件代码标志N运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;Z指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;C当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP指令),并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。程序状态寄存器控制位CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。当处理器处于一个特权模式时,可用软件操作这些位。它们分别是:中断禁止位;T位;模式位。程序状态寄存器控制位中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。T位反映了正在操作的状态:当T位为1时,处理器正在Thumb状态下运行;当T位清零时,处理器正在ARM状态下运行。程序状态寄存器控制位模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。M[4:0]模式可见的Thumb状态寄存器可见的ARM状态寄存器10000用户R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSR10001快中断R0~R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0~R7,R8_fiq~R14_fiq,PC,CPSR,SPSR_fiq10010中断R0~R7,SP_irq,LR_irq,PC,CPSR,SPSR_fiqR0~R12,R13_irq,R14_irq,PC,CPSR,SPSR_irq10011管理R0~R7,SP_svc,LR_svc,PC,CPSR,SPSR_svcR0~R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc10111中止R0~R7,SP_abt,LR_abt,PC,CPSR,SPSR_abtR0~R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt11011未定义R0~R7,SP_und,LR_und,PC,CPSR,SPSR_undR0~R12,R13_und,R14_und,PC,CPSR,SPSR_und11111系统R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSRCPSR模式位设置表程序状态寄存器保留位CPSR中的保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。2.3.4Thumb状态的寄存器集ARM状态和Thumb状态之间寄存器的关系Thumb状态寄存器与ARM状态寄存器有如下的关系:Thumb状态R0~R7与ARM状态R0~R7相同;Thumb状态CPSR和SPSR与ARM状态CPSR和SPSR相同;Thumb状态SP映射到ARM状态R13;Thumb状态LR映射到ARM状态R14;Thumb状态PC映射到ARM状态PC(R15)。Thumb状态寄存器在Arm状态寄存器上的映射R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R0
堆栈指针(R13)
连接寄存器(R14)
程序计数器(R15)
低寄存器高寄存器2.3.4Thumb状态的寄存器集在Thumb状态中访问高寄存器在Thumb状态中,高寄存器(R8~R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制。可以使用MOV、CMP和ADD指令对高寄存器操作。2.3.4Thumb状态的寄存器集第二章ARM体系结构1ARM体系结构简介2ARM微处理器的寄存器结构3ARM微处理器的异常处理45ARM微处理器结构ARM微处理器指令系统6ARM的存储器结构2.4ARM微处理器的异常处理异常:在一个正常的程序流程执行过程中,由内部或外部源产生的一个事件使正常的程序产生的暂时的停止。例如响应一个来自外设的中断。在处理异常之前,ARM7TDMI内核自动保存当前状态,即返回地址存入寄存器R14,当前的处理器状态(CPSR->SPSR),这样当处理程序结束时可以恢复执行原来的程序(SPSR->CPSR)。如果同时发生两个或更多异常,那么将按照固定的优先级来处理异常。ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。
VectorTable2.4.1异常类型不同的异常将导致处理器进入不同的工作模式,并执行不同特定地址的指令各异常类型具有不同的优先级。复位——发生时,处理器立即停止当前程序,进入禁止中断的管理模式,并从地址0x00000000处开始执行;未定义指令——在ARM处理器或协处理器认为当前指令未定义时发生;软件中断——当用户模式下的程序使用指令SWI时,处理器便产生软件中断,进入管理模式,以调用特权操作。指令预取中止——当处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号;只有当预取的指令被执行时,才会产生指令预取中止异常。Vectortablecanbeat
0xFFFF0000onARM720T
andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x001665优先级VectorTable不同的异常将导致处理器进入不同的工作模式,并执行不同特定地址的指令各异常类型具有不同的优先级。数据访问中止——若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常;外部中断请求——当处理器的外部中断请求引脚有效,而且CPSR中的I位为0时,产生IRQ异常。系统外设可通过该异常请求中断服务。快速中断请求——处理器的快速中断请求引脚有效,而且CPSR中的F位为0时,产生FIQ异常。Vectortablecanbeat
0xFFFF0000onARM720T
andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x0016652优先级432.4.1异常类型复位当nRESET信号被拉低时(一般外部复位引脚电平的变化和芯片的其它复位源会改变这个内核信号),处理器放弃正在执行的指令。在复位后,除PC和CPSR之外的所有寄存器的值都不确定。当nRESET信号再次变为高电平时,ARM处理器执行下列操作:1.强制CPSR中的M[4:0]变为b10011(管理模式);2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.强制PC从地址0x00开始对下一条指令进行取指;5.返回到ARM状态并恢复执行。86UndefinedInstruction(未定义指令)当ARM处理器或协处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,对协处理器进行软件仿真或在软件仿真时扩展ARM或Thumb指令集。处理器执行以下程序返回,无论是在ARM状态还是Thumb状态:
MOVSPC,R14_und以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。87SoftwareInterrupt(软件中断)
软件中断指令(SWI)用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从SWI模式返回,无论是在ARM状态还是Thumb状态:
MOVSPC,R14_svc以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc) 的值,并返回到SWI的下一条指令。ABORT(中止)
产生中止异常意味着对存储器的访问失败。ARM微处理器在存储器访问周期内检查是否发生中止异常。中止异常包括两种类型:指令预取中止:发生在指令预取时。数据中止:发生在数据访问时。当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。若数据中止发生,系统的响应与指令的类型有关。当确定了中止的原因后,Abort处理程序均可以执行以下指令从中止模式返回,无论是在ARM状态还是Thumb状态:
SUBSPC,R14_abt,#4;指令预取中止
SUBSPC,R14_abt,#8;数据中止IRQ(InterruptRequest)
IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。若将CPSR的I位置为1,则会禁止IRQ中断,若将CPSR的I位清零,处理器会在指令执行完之前检查IRQ的输入。注意只有在特权模式下才能改变I位的状态。不管是在ARM状态还是在Thumb状态下进入IRQ模式,IRQ处理程序均可以执行以下指令从IRQ模式返回:
SUBSPC,R14_irq,#4FIQ(FastInterruptRequest)FIQ异常是为了支持数据传输或者通道处理而设计的。快速中断请求(FIQ)适用于对一个突发事件的快速响应,这得益于在ARM状态中,快中断模式有8个专用的寄存器可用来满足寄存器保护的需要(这可以加速上下文切换的速度)。若将CPSR的F位置为1,则会禁止FIQ中断,若将CPSR的F位清零,处理器会在指令执行时检查FIQ的输入。注意只有在特权模式下才能改变F位的状态。
可由外部通过对处理器上的nFIQ引脚输入低电平产生FIQ。不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均可以执行以下指令从FIQ模式返回:
SUBSPC,R14_fiq,#4当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:异常优先级异常类型优先级复位1(最高优先级)数据中止2FIQ3IRQ4预取中止5未定义指令6SWI7(最低优先级)优先级降低2.4.2异常的响应过程进入异常在异常发生后,内核会作以下工作:1.在适当的LR中保存下一条指令的地址,当异常入口来自:ARM状态,那么ARM将当前指令地址加4或加8复制(取决于异常的类型)到LR中;为Thumb状态,那么ARM将当前指令地址加2、4或加8(取决于异常的类型)复制到LR中;异常处理器程序不必确定状态。2.4.2异常的响应过程进入异常在异常发生后,内核会作以下工作:2.将CPSR复制到适当的SPSR中;3.将CPSR模式位强制设置为与异常类型相对应的值;4.强制PC从相关的异常向量处取指。内核在中断异常时置位中断禁止标志,这样可以防止不受控制的异常嵌套。注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址装入PC时,会自动切换到ARM状态。2.4.2异常的响应过程进入异常异常向量地址异常类型进入时的模式进入时I的状态进入时F的状态0x00000000复位管理禁止禁止0x00000004未定义指令未定义IF0x00000008软件中断(SWI)管理禁止F0x0000000C预取中止(指令)中止IF0x00000010数据中止中止IF0x00000014保留保留——0x00000018IRQ中断禁止F0x0000001CFIQ快中断禁止禁止注:表中的I和F表示不对该位有影响,保留原来的值。2.4.2异常的响应过程进入异常程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异常过程1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2.用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示对该位不关心当异常结束时,异常处理程序必须:1.将SPSR的值复制回CPSR;2.若在进入异常处理时设置了中断禁止位,要在此清除;3.将LR(R14)中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;注:恢复CPSR的动作会将T、F和I位自动恢复为异常发生前的值。退出异常2.4.2异常的响应过程在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示对该位不关心异常入口/出口汇总异常类型返回指令之前的状态备注ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2
此处PC为BL,SWI,未定义的指令取指或预取指中止指令的地址软件中断SWIMOVSPC,R14_svcPC+4PC+2未定义的指令MOVSPC,R14_undPC+4PC+2预取指中止SUBSPC,R14_abt,#4PC+4PC+4快中断SUBSPC,R14_fiq,#4PC+4PC+4此处PC为由于FIQ或IRQ占先而没有被执行的指令的地址中断SUBSPC,R14_irq,#4PC+4PC+4数据中止SUBSPC,R14_abt,#8PC+8PC+8此处PC为产生数据中止的装载或保存指令的地址。
复位无——复位时保存在R14_svc中的值不可预知。
注意:“MOVSPC,R14_svc”是指在管理模式执行MOVSPC,R14指令。“MOVSPC,R14_und”、“SUBSPC,R14_abt,#4”等指令也是类似的。2.4.3应用程序中的异常处理异常的入口和出口处理如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用堆栈指令来恢复用户寄存器并实现返回。SUBLR,LR,#4 ;计算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中断返回中断处理代码的开始部分和退出部分SUBLR,LR,#4 ;计算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中断返回
如果异常处理程序已经把返回地址拷贝到堆栈,那么可以使用一条多寄存器传送指令来恢复用户寄存器并实现返回。中断处理代码的开始部分和退出部分异常的入口和出口处理注意:中断返回指令的寄存器列表(其中必须包括PC)后的“^”符号表示这是一条特
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030全球PCA输液泵行业调研及趋势分析报告
- 2025年全球及中国结构型包装用蜂窝行业头部企业市场占有率及排名调研报告
- 2025-2030全球自主最后一英里送货机器人行业调研及趋势分析报告
- 2025年全球及中国可见光超透镜行业头部企业市场占有率及排名调研报告
- 2025-2030全球钣金冲焊型液力变矩器行业调研及趋势分析报告
- 2025-2030全球教育行业CRM软件行业调研及趋势分析报告
- 2025-2030全球艾氏剂行业调研及趋势分析报告
- 2025-2030全球卡车液力变矩器行业调研及趋势分析报告
- 2025年全球及中国钴铁合金软磁材料行业头部企业市场占有率及排名调研报告
- 2025-2030全球高速RDF制粒机行业调研及趋势分析报告
- 小学六年级数学上册《简便计算》练习题(310题-附答案)
- 地理标志培训课件
- 2023行政主管年终工作报告五篇
- 2024年中国养老产业商学研究报告-银发经济专题
- 培训如何上好一堂课
- 高教版2023年中职教科书《语文》(基础模块)下册教案全册
- 2024医疗销售年度计划
- 税务局个人所得税综合所得汇算清缴
- 人教版语文1-6年级古诗词
- 上学期高二期末语文试卷(含答案)
- 人教版英语七年级上册阅读理解专项训练16篇(含答案)
评论
0/150
提交评论