版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARM体系结构研讨ARM体系结构研讨1第二讲体系结构第二讲体系结构2从体系结构而言51单片机属于哈弗结构,采用cisc复杂指令集系统Arm一般为哈弗结构(ARM7采用冯•诺依曼结构),采用risc精简指令集系统体系结构:从用户角度看到的计算机属性,计算机的指令集、可见寄存器、存储器管理单元和异常处理模式都是体系结构的一部分。从体系结构而言体系结构:3ARM体系结构ARM处理器工作状态
ARM处理器工作模式
ARM寄存器组成
ARM的异常中断
ARM体系结构ARM处理器工作状态4ARM7处理器工作状态自从ARM7TDMI核以后,体系结构中具有T变种的ARM处理器核可以工作在以下两种状态:ARM状态
32位,ARM状态下执行字对准的32位ARM指令;Thumb状态
16位,Thumb状态下执行半字对准的16位Thumb指令。在Thumb状态下,程序计数器PC使用位1选择另一个半字。
ARM7处理器工作状态自从ARM7TDMI核以后,体系结构中5Thumb产生的原因ARM为32位机,适于处理高速大数据量因此高端消费类产品需要较大成本矛盾32位指令需要更大的存储空间,对应更高的成本为了解决代码长度的问题,ARM体系结构又增加了T变种,开发了一种新的指令体系,这就是Thumb指令集。Thumb产生的原因ARM为32位机,适于处理高速大数据量6Thumb指令集Thumb是ARM体系结构的扩展。它有从标准32位ARM指令集抽出来的36条指令格式,可以重新编成16位的操作码这能带来很高的代码密度,因为Thumb指令的宽度只有ARM指令宽度的一半在运行时,这些16位的Thumb指令又由处理器解压成32位的ARM指令。Thumb指令集Thumb是ARM体系结构的扩展。它有从标准7Thumb指令集Thumb指令集是通常使用的32位ARM指令集的子集。每条Thumb指令是16位长,有相应的对于处理器模型有相同效果的32位ARM指令。Thumb指令在标准的ARM寄存器配置下进行操作,在ARM和Thumb状态之间具有出色的互操作性。执行时,16位Thumb指令透明地实时解压缩成32位ARM指令,且没有性能损失。Thumb具有32位核的所有优点:32位寻址空间;32位寄存器;32位移位器和算术逻辑单元ALU(ArithmeticLogicUnit);32位存储器传送。Thumb指令集Thumb指令集是通常使用的32位ARM指令8Thumb的技术实现ARM7TDMI考虑流水线各级间的平衡,利用译码阶段的一个未用的时钟相位,将Thumb指令解压还原为32位相应的ARM指令来完成对Thumb指令的解压缩。这些16位的Thumb指令可以由处理器在译码级解压成32位的ARM指令,在ARM核里运行。这样,不需要再附加时间费用和单独的解码周期,就可以维持指令的执行。Thumb的技术实现ARM7TDMI考虑流水线各级间的平衡,9Thumb的技术实现ARM7TDMI中ARM7和ARM7T取指令、解压缩与执行的过程。Thumb的技术实现ARM7TDMI中ARM7和ARM7T取10Thumb的技术实现Thumb指令的解压缩和解码过程:从流水的取指令阶段得到的ARM指令,经过ARM译码,并且激活主副操作码控制信号。其中,主操作码描述了要执行指令的类型,副操作码说明了指令的细节,诸如存储器、操作数等。在Thumb状态,多路复用器指导指令经过Thumb解压缩逻辑,转换为相应的ARM指令,然后执行。Thumb的技术实现Thumb指令的解压缩和解码过程:11ARM体系结构研讨12ARM体系结构研讨13Thumb技术的特点独立的两套指令集也使得解码逻辑极其的简单,从而维持了较小的硅片面积,保证了领先的“低功耗、高性能、小体积”的技术要求,满足了对嵌入式系统的设计需求。
Thumb技术的特点独立的两套指令集也使得解码逻辑极其的简单14ARM与THUMBTHUMB指令是ARM指令的子集可以相互调用,只要遵循一定的调用规则Thumb指令与ARM指令的时间效率和空间效率关系为:存储空间约为ARM代码的60%~70%指令数比ARM代码多约30%~40%存储器为32位时ARM代码比Thumb代码快约40%存储器为16位时Thumb比ARM代码快约40~50%使用Thumb代码,存储器的功耗会降低约30%ARM与THUMBTHUMB指令是ARM指令的子集可以相互调15ARM7处理器工作状态进入Thumb状态:当操作数寄存器Rm的状态位bit[0]为1时,执行BXRm指令进入Thumb状态所有的异常都是再ARM状态下进行,如果处理器在Thumb状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort和SWI)返回时,自动切换到Thumb状态。
ARM7处理器工作状态进入Thumb状态:16ARM7处理器工作状态进入ARM状态:当操作数寄存器Rm的状态位bit[0]为0时,执行BXRm指令进入ARM状态。如果处理器进行异常处理(IRQ,FIQ,Undef,Abort和SWI),在此情况下,把PC放入异常模式链接寄存器LR中,从异常向量地址开始执行也可以进入ARM状态。ARM7处理器工作状态进入ARM状态:17处理器状态使用BX指令将ARM7TDMI内核的操作状态在ARM状态和Thumb状态之间进行切换(程序如下所示。;从Arm状态切换到Thumb状态LDRR0,=Lable+1BXR0;从Thumb状态切换到ARM状态LDRR0,=LableBXR0地址最低位为1,表示切换到Thumb状态地址最低位为0,表示切换到ARM状态跳转地址标号ARM7处理器工作状态处理器状态使用BX指令将ARM7TDMI内核18ARM7处理器工作状态在程序执行的过程中,处理器可以在两种状态下切换。需要强调的是:ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容。ARM指令集和Thumb指令集都有相应的状态切换命令。ARM处理器在开始执行代码时,只能处于ARM状态。ARM7处理器工作状态在程序执行的过程中,处理器可以在两种状19两种工作状态存在的问题ARM状态,指令均是32位的,性能高。Thumb状态下,指令均是16位的,代码密度提高了一倍。Thumb状态下的指令功能只是ARM下的一个子集,结果可能需要更多条的指令去完成相同的工作,导致处理性能下降。两种工作状态存在的问题ARM状态,指令均是32位的,性能20一般的解决方法混合编程:arm与thumb结合。不足:两个方面1:时间额外开销2,ARM代码和Thumb代码需要以不同的方式编译,这也增加了软件开发管理的复杂度。一般的解决方法混合编程:arm与thumb结合。21Cortexm3的解决方法采用thumb-2指令集,混合32/16位指令,不支持arm状态,只支持thumb状态减小了状态切换的额外开销,节省了执行时间和指令空间。不再需要把源代码文件分成按ARM编译的和按Thumb编译的,软件开发的管理大大减负。无需再反复地求证和测试:究竟该在何时何地切换到何种状态下,我的程序才最有效率。开发软件容易多了Cortexm3的解决方法采用thumb-2指令集,混合322ARM技术基础ARM处理器工作状态
ARM处理器工作模式
ARM寄存器组成ARM的异常中断
ARM技术基础ARM处理器工作状态23ARM处理器工作模式ARM7处理器共支持所列的7种处理器模式见下表表中给出了CPSR[4:0]与七种工作模式的关系以及各种模式的解释。ARM处理器工作模式ARM7处理器共支持所列的7种处理器模24CPSR[4:0]模式用途可访问的寄存器10000用户正常用户模式,程序正常执行模式PC,R14~R0,CPSR10001FIQ处理快速中断,支持高速数据传送或通道处理PC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq10010IRQ处理普通中断PC,R14_irq~R13_fiq,R12~R0,CPSR,SPSR_irq10011SVC操作系统保护模式处理软件中断(SWI)PC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc10111中止处理存储器故障、实现虚拟存储器和存储器保护PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt11011未定义处理未定义的指令陷阱,支持硬件协处理器的软件仿真PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und11111系统运行特权操作系统任务PC,R14~R0,CPSRCPSR[4:0]模式用途可访问的寄存器10000用户正常用25处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式处理器模式处理器模式说明备注用户(usr)正常程序工26特权模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。未定义(und)中止(abt)管理(svc)中断(irq)快中断(fiq)系统(sys)特权模式处理器模式说明备注用户(usr)正27异常模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式未定义(und)中止(abt)管理(svc)中断(irq)快中断(fiq)
这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。异常模式处理器模式说明备注用户(usr)正28用户和系统模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。系统(sys)用户(usr)用户和系统模式处理器模式说明备注用户(us29Cortex-M3的工作模式Cortex‐M3支持2个模式和两个特权等级。两种操作模式分别为:处理模式(handlermode)和线程模式(threadmode)。引入两个模式的目的,是用于区别普通应用程序的代码和异常服务例程的代码——包括中断服务例程的代码。Cortex‐M3的特权分级——特权级和用户级。这可以提供一种存储器访问的保护机制,使得普通的用户程序代码不能意外地,甚至是恶意地执行涉及到要害的操作。处理器支持两种特权级,这也是一个基本的安全模型。Cortex-M3的工作模式Cortex‐M3支持2个模30特权访问和用户访问处理模式线程模式可以特权访问也可以用户访问始终特权访问Cortex-M3的工作模式用户程序中断(异常)程序特权访问和用户访问处理模式线程模式可以特权访问也可以用户访问31特权执行可以访问所有资源。非特权执行时对有些资源的访问受到限制或不允许访问。如部分指令的使用(设置FAULTMASK和PRIMASK的CPS指令)对系统控制空间(SCS)的大部分寄存器的访问。特权访问和用户访问(非特权访问)的区别FAULTMASKPRIMASKSCS……用户访问特权访问特权执行可以访问所有资源。特权访问和用户访问(非特权访问)32Cortex-M3的工作模式1.线程模式线程模式和处理模式2.处理模式在复位时处理器进入线程模式异常返回时处理器进入线程模式特权和用户(非特权)代码能够在线程模式下运行出现异常时处理器进入处理模式在处理模式中,所有代码都是特权访问的Cortex-M3的工作模式1.线程模式线程模式和处理模式33Cortex-M3的编程模式线程模式特权访问复位处理模式特权访问异常线程模式用户访问异常异常退出CONTROL[0]=1CONTROL[0]=0MSR指令置位CONTROL[0]Cortex-M3的编程模式线程模式复位处理模式异常线程模式34Cortex-M3的编程模式Cortex-M3的编程模式35CONTROL[0]特权访问用户访问10特权访问和用户访问的切换控制寄存器的第0位在处理模式下,通过MSR指令清零CONTROL[0],
退出处理模式进入线程模式时切换到特权访问。MOVR0#0X00MSRCONTROLR0在处理模式下,通过MSR指令置位CONTROL[0],
退出处理模式进入线程模式时切换到用户访问。在线程模式特权访问下,通过MSR指令置位CONTROL[0],即可由特权访问进入用户访问。
MRSR0CONTROLORRR0,R0,#0x01MSRCONTROLR0CONTROL[0]特权访问用户访问10特权访问和用户访问的36控制寄存器控制寄存器(CONTROL)控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针。CONTROL[0]仅当在特权级下操作时才允许写该位。一旦进入了用户级,唯一返回特权级的途径,就是触发一个(软)中断,再由服务例程改写该位。控制寄存器控制寄存器(CONTROL)CONTROL[0]37堆栈指针这两个堆栈指针分别是:
主堆栈指针(MSP),或写作SP_main。这是缺省的堆栈指针,它由OS内核、异常服务例程以及所有需要特权访问的应用程序代码来使用。
进程堆栈指针(PSP),或写作SP_process。用于常规的应用程序代码(不处于异常服用例程中时)。堆栈指针这两个堆栈指针分别是:38堆栈指针堆栈指针39在Cortex‐M3中,有专门的指令负责堆栈操作——PUSH和POP。它俩的汇编语言语法如下例所演示:PUSH{R0};POP{R0}堆栈指针PUSH和POP能一次操作多个寄存器,如下所示:subroutine_1PUSH{R0-R7,R12,R14};保存寄存器列表…;执行处理POP{R0-R7,R12,R14};恢复寄存器列表BXR14;返回到主调函数在Cortex‐M3中,有专门的指令负责堆栈操作——PUS40Cortex-M3的编程模式主堆栈和进程堆栈处理模式线程模式可用MSP始终使用MSP也可用PSPCortex-M3的编程模式主堆栈和进程堆栈处理模式线程模式41Cortex-M3的编程模式主堆栈和进程堆栈结束复位后,所有代码都使用主堆栈所有异常都使用主堆栈在线程模式中,使用MSR指令对CONTROL[1]执行写操作也可以从主堆栈切换到进程堆栈。在任何时候,进程堆栈和主堆栈中只有一个是可见的,由r13指示。Cortex-M3的编程模式主堆栈和进程堆栈结束复位后,所有42Cortex-M3的编程模式通过异常进行堆栈切换线程模式主堆栈复位处理模式主堆栈产生异常线程模式线程堆栈产生异常异常退出EXC_RETURN[3:0]=0b1101EXC_RETURN[3:0]=0b1001Cortex-M3的编程模式通过异常进行堆栈切换线程模式复位43Cortex-M3的编程模式通过MSR指令修改CONTROL[1]进行堆栈切换线程模式主堆栈线程模式进程堆栈CONTROL[1]主堆栈进程堆栈10控制寄存器的第1位CONTROL[1]在Cortex‐M3的handler模式中,CONTROL[1]总是0。在线程模式中则可以为0或1。仅当处于特权级的线程模式下,此位才可写,其它场合下禁止写此位。Cortex-M3的编程模式通过MSR指令修改CONTROL44Cortex-M3的编程模式特权等级和堆栈指针的选择均由CONTROL负责。当CONTROL[0]=0时,在异常处理的始末,只发生了处理器模式的转换,如下图所示。Cortex-M3的编程模式特权等级和堆栈指针的选择均由CO45Cortex-M3的编程模式若CONTROL[0]=1(线程模式+用户级),则在中断响应的始末,处理器模式和特权等极都要发生变化,如下图所示。Cortex-M3的编程模式若CONTROL[0]=1(线程46三种执行模式的比较执行模式进入方式堆栈SP用途特权线程模式1.复位2.在特权处理模式下使用MSR指令清零CONTROL[0]使用SP_main:1.复位后默认2.在退出特权处理模式前,修改返回值EXC_RETURN[3:0]为0b10013.清零CONTROL[1]使用SP_process:1.在退出特权处理模式前,修改返回值EXC_RETURN[3:0]为0b11012.置位CONTROL[1]线程模式(特权或非特权)+SP_process多用于操作系统的任务状态。非特权线程模式在特权线程模式或特权处理模式下使用MSR指令置位CONTROL[0]特权处理模式出现异常只能使用SP_main特权处理模式+SP_main在前后台和操作系统中用于中断状态。三种执行模式的比较执行模式进入方式堆栈SP用途特权线程1.复47前后台系统主堆栈压栈过程数据…数据栈顶栈底0x200004000x200003FC0x200003F8数据地址数据增长方向堆栈增长为满递减SP主堆栈前后台系统主堆栈压栈过程数据…数据栈顶栈底0x200004048前后台系统主堆栈压栈过程数据…数据栈底数据地址数据增长方向堆栈增长为满递减产生中断主堆栈SPXPSRPCLRR12R3…R00x200004000x200003FC0x200003F8硬件自动压栈前后台系统主堆栈压栈过程数据…数据栈底数据地址数据增长方向堆49前后台系统主堆栈出栈过程数据…数据栈底数据地址退出中断主堆栈XPSRPCLRR12R3R2R1R0通用寄存器0x200004000x200003FC0x200003F8SPSPSPSPSPSPSPXPSRPCLRR12R3R2R1R0R1R0SPSPR2XPSRPCLRR12R3退出异常,寄存器恢复为进入前的值。前后台系统主堆栈出栈过程数据…数据栈底数据地址退出中断主堆栈50操作系统主堆栈和进程堆栈切换过程主堆栈任务1任务2复位SP初始化…数据SP…数据…数据栈底栈底栈底栈顶栈顶栈顶栈顶栈顶栈顶SP=MSP操作系统主堆栈和进程堆栈切换过程主堆栈任务1任务2复位SP初51操作系统主堆栈和进程堆栈切换过程主堆栈任务1任务2进入异常…数据SP…数据…数据栈底栈底栈底…R0SPSP=MSP操作系统主堆栈和进程堆栈切换过程主堆栈任务1任务2进入异常…52操作系统主堆栈和进程堆栈切换过程主堆栈任务1任务2退出异常时切换到任务1…数据…数据…数据栈底栈底栈底…R0SPSP=PSP操作系统主堆栈和进程堆栈切换过程主堆栈任务1任务2退出异常时53ARM技术基础ARM处理器工作状态
ARM处理器工作模式
ARM寄存器组成ARM的异常中断
ARM技术基础ARM处理器工作状态54ARM寄存器组成概述
简介在ARM7TDMI处理器内部有37个用户可见的寄存器。在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。ARM寄存器组成概述
简介在ARM7TDM55寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqARM状态各模式下的寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系56寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqARM状态各模式下的寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_abtCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有的37个寄存器,分成两大类:31个通用32位寄存器;6个状态寄存器。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系57寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用户无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系统SPSR_abtCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定义SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中断SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中断ARM状态各模式下可以访问的寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系58寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系59寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系60寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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一般的通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系61寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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一般的通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系62寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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一般的通用寄存器寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系63寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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堆栈指针寄存器R13(SP)寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中,只能使用R13作为堆栈指针。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系64寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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链接寄存器R14(LR)R14为链接寄存器(LR),在结构上有两个特殊功能:在每种模式下,模式自身的R14版本用于保存子程序返回地址;当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系65Lable程序A程序BR14R14寄存器与子程序调用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A执行过程中调用程序B;操作流程2.程序跳转至标号Lable,执行程序B。同时硬件将“BLLable”指令的下一条指令所在地址存入R14;3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;Lable程序A程序BR14R14寄存器与子程序调用BL66R14寄存器与异常发生异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。R14寄存器与异常发生异常发生时,程序要跳转67R14寄存器当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。R14寄存器当发生异常嵌套时,这些异常之间可68R14寄存器注意R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏R14寄存器注意R14R14_irq用户模式下的程序IRQ模69R14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AaB...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏IRQ模式下的程序BareturnB...XA地址B地址B4.如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序;5.硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;被破坏6.在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;returnreturn解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。R14寄存器注意要点R14R14_irq用户模式下的程序IR70寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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使用的方式超出了这些限制,那么结果将是不可预测的。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系71读R15正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDRR0,PC??????PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码读R15正常操作时,从R15读取的值是处理器72读R15当使用STR或STM指令保存R15时,可能将当前执行指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。所以最好避免使用STR和STM指令来保存R15,读R15当使用STR或STM指令保存R15时73写R15正常操作时,写入R15的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。写R15正常操作时,写入R15的值被当作一74写R15由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。写R15由于ARM指令以字节为边界,因此写入75寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系76程序状态寄存器ARM内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含:4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V));2个中断禁止位,分别控制一种类型的中断;5个对当前处理器模式进行编码的位;1个用于指示当前执行指令(ARM还是Thumb)的位。程序状态寄存器ARM内核包含1个CPSR和77NZCV——IM0M1M2M3M4TF—...313029282726876543210程序状态寄存器条件代码标志保留控制位溢出标志进位或借位扩展零负或小于IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TFCPSR寄存器的格式NZCV——IM0M1M2M3M4TF—...3178程序状态寄存器条件代码标志大多数“数值处理指令”可以选择是否影响条件代码标志位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志。N、Z、C和V位都是条件代码标志。通过算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。程序状态寄存器条件代码标志大多数“数值处理指79程序状态寄存器条件代码标志各标志位的含义如下:N运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;Z指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;程序状态寄存器条件代码标志各标志位的含义如下:80程序状态寄存器条件代码标志各标志位的含义如下:C当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP指令),并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值其它指令C通常不变;V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。程序状态寄存器条件代码标志各标志位的含义如下:81程序状态寄存器控制位CPSR的最低8位为控制位,当发生异常时,这些位被硬件改变。它们分别是:中断禁止位;T位;模式位。程序状态寄存器控制位CPSR的最低8位为控82程序状态寄存器控制位中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。T位反映了正在操作的状态:当T位置位时,处理器正在Thumb状态下运行;当T位清零时,处理器正在ARM状态下运行。程序状态寄存器控制位中断禁止位包括I和F位:83程序状态寄存器控制位模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。程序状态寄存器控制位模式位包括M4、M3、M2、M1和M0,84M[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模式位设置表M[4:0]模式可见的Thumb状态寄存器可见的ARM状态寄85程序状态寄存器保留位CPSR中的保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。程序状态寄存器保留位CPSR中的保留位被保留86Thumb状态寄存器Thumb状态寄存器集是ARM状态集的子集,程序员可以直接访问的寄存器为:8个通用寄存器R0~R7;程序计数器(PC);堆栈指针(SP);链接寄存器(LR);有条件访问程序状态寄存器(CPSR)。Thumb状态寄存器Thumb状态寄存器集是87Thumb状态各模式下的寄存器CPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7R6R6R5R5R4R4R3R3R2R2R1R1R0R0通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别Thumb状态各模式下的寄存器CPSRCPSR状态寄存器R188Thumb状态下的通用寄存器CPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别R7R6R5R4R3R2R1R0在汇编语言中寄存器R0~R7为保存数据或地址值的通用寄存器。对于任何处理器模式,它们中的每一个都对应于相同的32为物理寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊的用途,并且可用于任何使用通用寄存器的指令。Thumb状态下的通用寄存器CPSRCPSR状态寄存器R1589Thumb状态下的堆栈指针寄存器(SP)CPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别堆栈指针SP对应ARM状态的寄存器R13。每个异常模式都有其自身的SP分组版本,SP通常指向各异常模式所专用的堆栈。
注意:在发生异常时,处理器自动进入ARM状态。R13_fiqR13_irqR13_undR13_abtR13_svcR13Thumb状态下的堆栈指针寄存器(SP)CPSRCPSR状态90Thumb状态下的链接寄存器R14(LR)CPSRCPSR状态寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序计数器快中断中断未定义中止管理系统用户各模式下实际访问的寄存器寄存器在汇编中的名称寄存器类别链接寄存器LR对应ARM状态寄存器R14,在结构上有两个特殊功能,同“ARM状态下的链接寄存器LR”。注意:在发生异常时,处理器自动进入ARM状态。R14_fiqR14_irqR14_undR14_abtR14_svcR14Thumb状态下的链接寄存器R14(LR)CPSRCPSR状91ARM状态和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)。ARM状态和Thumb状态之间寄存器的关系92Thumb状态寄存器在Arm状态寄存器上的映射R1
R2
R3
R4
R5
R6
R7
R8
R9
R10
R11
R12
R0
堆栈指针(R13)
连接寄存器(R14)
程序计数器(R15)
低寄存器高寄存器Thumb状态寄存器在Arm状态寄存器上的映射R1R2R93在Thumb状态中访问高寄存器在Thumb状态中,高寄存器(R8~R15)不是标准寄存器集的一部分。汇编语言程序员对它们的访问受到限制,但可以将它们用于快速暂存。可以使用MOV、CMP和ADD指令对高寄存器操作。在Thumb状态中访问高寄存器在Thumb9432位通用寄存器R0R1R2R3R4R5R6R7R8R9R10R11R12R13(SP)R14(LR)R15(PC)XPSRr0~r12,为13个通用寄存器低寄存器,r0-r7可以被指定通用寄存器的所有指令访问高寄存器,r8-r12可以被指定通用寄存器的所有32位指令访问,不能被16位指令访问。SP_ProcessSP_MainCORTEXm3寄存器组织32位通用寄存器R0R1R2R3R4R5R6R7R8R9R195分组的堆栈指针(SP)R0R1R2R3R4R5R6R7R8R9R10R11R12R13(SP)R14(LR)R15(PC)XPSRSP_MainSP_Process处理模式线程模式可用MSP始终使用MSP也可用PSP复位后默认的堆栈指针,用于操作系统内核以及异常处理例程(包括中断服务例程)由用户的应用程序代码使用分组的堆栈指针(SP)R0R1R2R3R4R5R6R7R8R96堆栈指针(SP)堆栈指针(SP)97分组的堆栈指针(SP)注意:1、不是每个应用都必须用齐两个堆栈指针,简单的应用程序只使用MSP就够了。2、MSP,亦写作SP_main,这是复位后缺省使用堆栈指针,服务于操作系统内核和异常服务例程;PSP,亦写作SP_process,典型地用于普通的用户线程中。3、寄存器的PUSH和POP操作永远都是4字节对齐的——也就是说他们的地址必须是0x4,0x8,0xc,……。R13的最低两位被硬线连接到0,并且总是读出0分组的堆栈指针(SP)注意:98链接寄存器(LR)R0R1R2R3R4R5R6R7R8R9R10R11R12R13(SP)R14(LR)R15(PC)XPSR链接寄存器(LR)在执行分支(branch)和链接(BL)指令或带有交换的分支和链接指令(BLX)时,LR用于保存PC的返回地址。
主要用于保存子程序的返回地址。也用于异常返回。
链接寄存器(LR)R0R1R2R3R4R5R6R7R8R9R99链接寄存器(LR)R0R1R2R3R4R5R6R7R8R9R10R11R12R13(SP)R14(LR)R15(PC)XPSRintmain(){......delay();SetLED1();}voiddelay(){......}BLdelay……delay:......BXlr….0X20F00X20F4地址R14(LR)0X20F40X10F40X10F4执行BL指令,LR的值同时更新链接寄存器(LR)R0R1R2R3R4R5R6R7R8R9R100寄存器(PC)R0R1R2R3R4R5R6R7R8R9R10R11R12R13(SP)R14(LR)R15(PC)XPSR程序计数器(PC)程序计数器总是指向正在取指的指令。该寄存器的位0始终为0,因此,指令始终与字或半字边界对齐。程序状态寄存器(XPSR)用于指示程序的运行状态。寄存器(PC)R0R1R2R3R4R5R6R7R8R9R10101程序状态寄存器对程序状态寄存器的访问只能使用MRS和MSR指令MRS<c><q><Rd><spec_reg>MRS从特殊寄存器读出数据,并存入一通用寄存器指令码条件执行用于指示是16位指令还是32位指令目标寄存器(通用寄存器R0—R15)操作对象(特殊功能寄存器)程序状态寄存器对程序状态寄存器的访问只能使用MRS和MSR指102程序状态寄存器对程序状态寄存器的访问只能使用MRS和MSR指令MRS<c><q><Rd><spec_reg>MRS从特殊寄存器读出数据,并存入一通用寄存器指令码条件执行用于指示是16位指令还是32位指令目标寄存器(通用寄存器R0—R15)操作对象(特殊功能寄存器)MRSEQ.WR0,PSP程序状态寄存器对程序状态寄存器的访问只能使用MRS和MSR指103特殊用途程序状态寄存器寄存器名称功能编号APSR应用状态寄存器0IAPSRAPSR和IPSR的组合1EAPSRAPSR和EPSR的组合2XPSRAPSR、EPSR和IPSR的组合3IPSR中断状态寄存器
5EPSR执行状态寄存器6IEPSRIPSR和EPSR的组合7MSP主堆栈指针8PSP进程堆栈指针9PRIMASK中断屏蔽寄存器16BASEPRI可屏蔽等于和低于某个优先级的中断17BASEPRI_MAXBASEPRI允许设置的最大值18FAULTMASK错误屏蔽寄存器19CONTROL控制寄存器20特殊用途程序状态寄存器寄存器名称功能编号APSR应用状态寄存104应用状态寄存器(APSR)包含条件代码标志。在进入异常之前,Cor
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国MiniLED背光显示商业化提速与供应链重塑分析报告
- 2026中国远程医疗技术突破与市场渗透率研究报告
- 2026智慧物流园区管理系统投资回报模型与运营模式创新报告
- 2026中国工业噪声控制设备行业标准与认证体系报告
- 2026中国珠宝首饰行业市场现状消费升级分析投资评估发展策略研究
- 2026虚拟现实技术在工业培训领域的商业化应用前景分析报告
- 20265G通信技术发展现状及未来趋势与投融资策略分析报告
- 2026过程可视化软件行业可持续发展与绿色技术应用
- 2026中兽医诊疗技术与西方兽医防控技术融合创新探索报告
- 2026重型机械制造业市场动态分析及投资发展方向趋势与运营管理策略研究报告
- 江苏省苏州市2026-2027学年第一学期九年级语文10月月考模拟卷(二)(含解析)
- CSCO肝癌诊疗指南(2026版)
- 云南财经大学本科学生专业分流实施细则(修订)
- 2026年全民反诈在行动集中宣传月:被诈骗后如何维权课件
- 2026年新行政执法证考试题库及答案
- 2026年山东名校考试联盟5月联考(核心素养评估)英语试题(含答案)
- 2024妇科盆底重建手术加速康复的中国专家共识课件
- 墨子介绍教学课件
- 备战高考数学之985高校强基计划入围资格(新高考通.用)专题04 函数的基本性质及导数综合(40题难题)(原卷版)
- 登革热与基孔肯雅热宣传知识课件
- 15.3.2 第2课时 含30°角的直角三角形的性质 教案 数学人教版八年级上册
评论
0/150
提交评论