版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本资料来源第二讲体体系结结构从体系结结构而言言51单片机属属于哈弗弗结构,采用cisc复杂指令令集系统统Arm一般为哈哈弗结构构(ARM7采用冯诺依曼结结构),采用risc精简指令令集系统统体系结构构 :从用户角角度看到到的计算算机属性性,计算算机的指指令集、可见寄寄存器、存储器器管理单单元和异异常处理理模式都都是体系系结构的的一部分分。ARM体系结构构ARM处理器工工作状态态ARM处理器工工作模式式ARM寄存器组组成ARM的异常中中断ARM7处理器工工作状态态自从ARM7TDMI核以后,体系结结构中具具有T变种的ARM处理器核核可以工工作在以以下两种种状态:ARM状态32位,ARM状态下执执
2、行字对对准的32位ARM指令;Thumb状态16位,Thumb状态下执执行半字字对准的的16位Thumb指令。在在Thumb状态下,程序计计数器PC使用位1选择另一一个半字字。Thumb产生的原原因ARM为32位机,适适于处理理高速大大数据量量因此高端端消费类类产品需需要较大大成本矛盾盾32位指令需需要更大大的存储储空间,对应更更高的成成本为了解决决代码长长度的问问题,ARM体系结构构又增加加了变变种,开开发了一一种新的的指令体体系,这这就是Thumb指令集。Thumb指令集Thumb是ARM体系结构构的扩展展。它有有从标准准32位ARM指令集抽抽出来的的36条指令格格式,可可以重新新编成16
3、位的操作作码这能带来来很高的的代码密密度,因因为Thumb指令的宽宽度只有有ARM指令宽度度的一半半在运行时时,这些些16位的Thumb指令又由由处理器器解压成成32位的ARM指令。Thumb指令令集Thumb指令集是是通常使使用的32位ARM指令集的的子集。每条Thumb指令是16位长,有有相应的的对于处处理器模模型有相相同效果果的32位ARM指令。Thumb指令在标标准的ARM寄存器配配置下进进行操作作,在ARM和Thumb状态之间间具有出出色的互互操作性性。执行时,16位Thumb指令透明明地实时时解压缩缩成32位ARM指令,且且没有性性能损失失。Thumb具有32位核的所所有优点点:3
4、2位寻址空空间;32位寄存器器;32位移位器器和算术术逻辑单单元ALU(ArithmeticLogicUnit);32位存储器器传送。Thumb的技术实实现ARM7TDMI考虑流水水线各级级间的平平衡,利利用译码码阶段的的一个未未用的时时钟相位位,将Thumb指令解压压还原为为32位相应的的ARM指令来完完成对Thumb指令的解解压缩。这些16位的Thumb指令可以以由处理理器在译译码级解解压成32位的ARM指令,在在ARM核里运行行。这样,不不需要再再附加时时间费用用和单独独的解码码周期,就可以以维持指指令的执执行。Thumb的技术实实现ARM7TDMI中ARM7和ARM7T取指令、解压缩缩
5、与执行行的过程程。Thumb的技术实实现Thumb指令的解解压缩和和解码过过程:从流水的的取指令令阶段得得到的ARM指令,经经过ARM译码,并且且激活主主副操作作码控制制信号。其中,主操作作码描述述了要执执行指令令的类型型,副操操作码说说明了指指令的细细节,诸诸如存储储器、操操作数等等。在Thumb状态,多多路复用用器指导导指令经经过Thumb解压缩逻逻辑,转转换为相相应的ARM指令,然然后执行行。Thumb技术术的特点点独立的两两套指令令集也使使得解码码逻辑极极其的简简单,从从而维持持了较小小的硅片片面积,保证了了领先的的“低功功耗、高高性能、小体积积”的技技术要求求,满足足了对嵌嵌入式系系
6、统的设设计需求求。ARM与THUMBTHUMB指令是ARM指令的子子集可以相互互调用,只要遵遵循一定定的调用用规则Thumb指令与ARM指令的时时间效率率和空间间效率关关系为:存储空间间约为ARM代码的6070指令数比比ARM代码多约约3040存储器为为32位时ARM代码比Thumb代码快约约40存储器为为16位时Thumb比ARM代码快约约4050使用Thumb代码,存存储器的的功耗会会降低约约30ARM7处理器工工作状态态进入Thumb状态:当操作数数寄存器器Rm的状态位位bit0为1时,执行行BXRm指令进入入Thumb状态所有的异异常都是是再ARM状态下进进行,如如果处理理器在Thum
7、b状态进入入异常,则当异异常处理理(IRQ,FIQ,Undef,Abort和SWI)返回时时,自动动切换到到Thumb状态。ARM7处理器工工作状态态进入ARM状态:当操作数数寄存器器Rm的状态位位bit0为0时,执行行BXRm指令进入入ARM状态。如果处理理器进行行异常处处理(IRQ,FIQ,Undef,Abort和SWI),在此此情况下下,把PC放入异常常模式链链接寄存存器LR中,从异异常向量量地址开开始执行行也可以以进入ARM状态。处理器状状态使用BX指令将ARM7TDMI内核的操操作状态态在ARM状态和Thumb状态之间间进行切切换(程程序如下下所示。;从Arm状态切换换到Thumb状
8、态LDRR0,=Lable+1BXR0;从Thumb状态切换换到ARM状态LDRR0,=LableBXR0地址最低低位为1,表示切切换到Thumb状态地址最低低位为0,表示切切换到ARM状态跳转地址址标号ARM7处理器工工作状态态ARM7处理器工工作状态态在程序执执行的过过程中,处理器器可以在在两种状状态下切切换。需需要强调调的是:ARM和Thumb之间状态态的切换换不影响响处理器器的模式式或寄存存器的内内容。ARM指令集和和Thumb指令集都都有相应应的状态态切换命命令。ARM处理器在在开始执执行代码码时,只只能处于于ARM状态。两种工作作状态存存在的问问题ARM状状态,指令均均是32 位的
9、的,性能能高。Thumb状状态下,指令均均是16 位的的,代码码密度提提高了一一倍。Thumb状状态下的的指令功功能只是是ARM 下的的一个子子集,结结果可能能需要更更多条的的指令去去完成相相同的工工作,导导致处理理性能下下降。一般的解解决方法法混合编程程:arm与thumb结合。不足:两两个方面面1:时间额额外开销销2,ARM代码和Thumb代码需要要以不同同的方式式编译,这也增增加了软软件开发发管理的的复杂度度。Cortexm3的解决方方法采用thumb-2指令集,混合32/16位指令,不支持持arm状态,只只支持thumb状态减小了状状态切换换的额外外开销,节省了了执行时间间和指令令空间
10、。不再需要要把源代代码文件件分成按按ARM编译的和和按Thumb编译的,软件开开发的管管理大大大减负。无需再反反复地求求证和测测试:究究竟该在在何时何何地切换换到何种种状态下下,我的的程序才才最有效效率。开开发软件件容易多多了ARM技术基础础ARM处理器工工作状态态ARM处理器工工作模式式ARM寄存器组组成ARM的异常中中断ARM处理器工工作模式式ARM7处理器共共支持所所列的7种处理器器模式见见下表表中给出出了CPSR4:0与七种种工作模模式的关关系以及及各种模模式的解解释。CPSR4:0模式用途可访问的寄存器10000用户正常用户模式,程序正常执行模式PC,R14R0,CPSR10001F
11、IQ处理快速中断,支持高速数据传送或通道处理PC,R14_fiqR8_fiq,R7R0,CPSR,SPSR_fiq10010IRQ处理普通中断PC,R14_irqR13_fiq,R12R0,CPSR,SPSR_irq10011SVC操作系统保护模式处理软件中断(SWI)PC,R14_svcR13_svc,R12R0,CPSR,SPSR_svc10111中止处理存储器故障、实现虚拟存储器和存储器保护PC,R14_abtR13_abt,R12R0,CPSR,SPSR_abt11011未定义处理未定义的指令陷阱,支持硬件协处理器的软件仿真PC,R14_undR13_und,R12R0,CPSR,SP
12、SR_und11111系统运行特权操作系统任务PC,R14R0,CPSR处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式处理
13、器模模式特权模式式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式除用户模模式外,其它模模式均为为特权模模式。ARM内部寄存
14、存器和一一些片内内外设在在硬件设设计上只只允许(或者可可选为只只允许)特权模模式下访访问。此此外,特特权模式式可以自自由的切切换处理理器模式式,而用用户模式式不能直直接切换换到别的的模式。 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq) 系统 (sys)异常模式式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应
15、时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq)这五种模模式称为为异常模式式。它们除除了可以以通过程程序切换换进入外外,也可可以由特特定的异异常进入入。当特特定的异异常出现现时,处处理器进进入相应应的模式式。每种种异常模模式都有有一些独独立的寄寄存器,以避免免异常退退出时用用户模式式的状态态不可靠靠。用户和系系统模式式
16、处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这两种模模式都不不能由异异常进入入,而且且它们使使用完全全相同的的寄存器器组
17、。系统模式式是特权权模式,不受用用户模式式的限制制。操作作系统在在该模式式下访问问用户模模式的寄寄存器就就比较方方便,而而且操作作系统的的一些特特权任务务可以使使用这个个模式访访问一些些受控的的资源。 系统 (sys) 用户 (usr)Cortex-M3的工作模模式CortexM3支持2个模式和和两个特特权等级级。两种操作作模式分分别为:处理模模式(handlermode)和线程模模式(threadmode)。引入入两个模模式的目目的,是是用于区区别普通通应用程程序的代代码和异异常服务务例程的的代码包括中断断服务例例程的代代码。CortexM3的特权分分级特权级和和用户级级。这可以提提供一种种
18、存储器器访问的的保护机机制,使使得普通通的用户户程序代代码不能能意外地地,甚至至是恶意意地执行行涉及到到要害的的操作。处理器器支持两两种特权权级,这这也是一一个基本本的安全全模型。特权访问问和用户户访问处理模式式线程模式式可以特权权访问也可以用用户访问问始终特权权访问Cortex-M3的工作模模式用户程序中断(异常)程序特权执行行可以访访问所有有资源。非特权执执行时对对有些资资源的访访问受到到限制或或不允许许访问。如部分指指令的使使用(设置FAULTMASK和PRIMASK的CPS指令)对系统控控制空间间(SCS)的大部部分寄存存器的访访问。特权访问问和用户户访问(非特权访访问)的区别FAUL
19、TMASKPRIMASKSCS用户访问问特权访问问Cortex-M3的工作模模式1.线程模式式线程模式式和处理理模式2.处理模式式在复位时时处理器器进入线线程模式式异常返回回时处理理器进入入线程模模式特权和用用户(非非特权)代码能能够在线线程模式式下运行行出现异常常时处理理器进入入处理模模式在处理模模式中,所有代代码都是是特权访访问的Cortex-M3的编程模模式线程模式式特权访问问复位处理模式式特权访问问异常线程模式式用户访问问异常异常退出出CONTROL0 =1CONTROL0 =0MSR指令置位位CONTROL0Cortex-M3的编程模模式CONTROL0特权访问用户访问10特权访问问
20、和用户户访问的的切换控制寄存存器的第第0位在处理模式式下,通过MSR指令清零CONTROL0,退出处理模式式进入线线程模式式时切换换到特权访问问。MOVR0#0X00MSRCONTROLR0在处理模式式下,通过MSR指令置位CONTROL0,退出处理模式式进入线线程模式式时切换换到用户户访问。在线程模式式特权访访问下,通过过MSR指令置位CONTROL0,即可由特特权访问问进入用用户访问问 。MRSR0CONTROLORRR0,R0,#0 x01MSRCONTROLR0控制寄存存器控制寄存存器(CONTROL)控制寄存存器用于于定义特特权级别别,还用用于选择择当前使使用哪个个堆栈指指针。CON
21、TROL0仅当在特特权级下下操作时时才允许许写该位位。一旦旦进入了了用户级级,唯一一返回特特权级的的途径,就是触触发一个个(软)中断,再由服服务例程程改写该该位。堆栈指针针这两个堆堆栈指针针分别是是:主堆栈指指针(MSP),或写作SP_main。这是缺缺省的堆堆栈指针针,它由由OS内核、异异常服务务例程以以及所有有需要特特权访问问的应用用程序代代码来使使用。进程堆栈栈指针(PSP),或写作SP_process。用于常常规的应应用程序序代码(不处于于异常服服用例程程中时)。堆栈指针针在CortexM3中,有专专门的指指令负责责堆栈操操作PUSH和POP。它俩的的汇编语语言语法法如下例例所演示示:
22、PUSH R0;POPR0堆栈指针针PUSH和POP能一次操操作多个个寄存器器,如下下所示:subroutine_1PUSH R0-R7,R12,R14 ;保存寄存存器列表表 ;执行处理理POPR0-R7,R12, R14;恢复寄存存器列表表BXR14;返回到主主调函数数Cortex-M3的编程模模式主堆栈和和进程堆堆栈处理模式线程模式可用 MSP始终使用 MSP也可用 PSPCortex-M3的编程模模式主堆栈和和进程堆堆栈结束复位位后,所所有代码码都使用用主堆栈栈所有异常常都使用用主堆栈栈在线程模模式中,使用MSR指令对CONTROL1执行写操操作也可可以从主主堆栈切切换到进进程堆栈栈。在
23、任何时时候,进进程堆栈栈和主堆堆栈中只只有一个个是可见见的,由由r13指示。Cortex-M3的编程模模式通过异常常进行堆堆栈切换换线程模式式主堆栈复位处理模式式主堆栈产生异常常线程模式式线程堆栈栈产生异常常异常退出出EXC_RETURN3:0=0b1101EXC_RETURN3:0=0b1001Cortex-M3的编程模模式通过MSR指令修改改CONTROL1进行堆栈栈切换线程模式式主堆栈线程模式式进程堆栈栈CONTROL1主堆栈进程堆栈10控制寄存存器的第第1位CONTROL1在CortexM3的handler模式中,CONTROL1总是0。在线程程模式中中则可以以为0或1。仅当处于于特权
24、级级的线程程模式下下,此位位才可写写,其它它场合下下禁止写写此位。Cortex-M3的编程模模式特权等级级和堆栈栈指针的的选择均均由CONTROL负责。当当CONTROL0=0时,在异异常处理理的始末末,只发发生了处处理器模模式的转转换,如如下图所所示。Cortex-M3的编程模模式若CONTROL0=1(线程模模式+用户级),则在在中断响响应的始始末,处处理器模模式和特特权等极极都要发发生变化化,如下下图所示示。三种执行行模式的的比较执行模式进入方式堆栈SP用途特权线程模式1复位2在特权处理模式下使用MSR指令清零CONTROL0使用SP_main:1复位后默认2. 在退出特权处理模式前,修
25、改返回值EXC_RETURN3:0为0b10013清零CONTROL1使用SP_process:1在退出特权处理模式前,修改返回值EXC_RETURN3:0为0b11012置位CONTROL1线程模式(特权或非特权)SP_process多用于操作系统的任务状态。非特权线程模式在特权线程模式或特权处理模式下使用MSR指令置位CONTROL0特权处理模式出现异常只能使用SP_main特权处理模式SP_main在前后台和操作系统中用于中断状态。前后台系系统主堆堆栈压栈栈过程数据数据栈顶栈底0 x200004000 x200003FC0 x200003F8数据地址数据增长长方向堆栈增长长为满递减SP主
26、堆栈前后台系系统主堆堆栈压栈栈过程数据数据栈底数据地址数据增长长方向堆栈增长长为满递减产生中断断主堆栈SPXPSRPCLRR12R3R00 x200004000 x200003FC0 x200003F8硬件自动动压栈前后台系系统主堆堆栈出栈栈过程数据数据栈底数据地址退出中断主堆栈XPSRPCLRR12R3R2R1R0通用寄存存器0 x200004000 x200003FC0 x200003F8SPSPSPSPSPSPSPXPSRPCLRR12R3R2R1R0R1R0SPSPR2XPSRPCLRR12R3退出异常常,寄存器恢恢复为进入前前的值。操作系统统主堆栈栈和进程程堆栈切切换过程程主堆栈任务
27、1任务2复位SP初始化数据SP数据数据栈底栈底栈底栈顶栈顶栈顶栈顶栈顶栈顶SP=MSP操作系统统主堆栈栈和进程程堆栈切切换过程程主堆栈任务1任务2进入异常常数据SP数据数据栈底栈底栈底R0SPSP=MSP操作系统统主堆栈栈和进程程堆栈切切换过程程主堆栈任务1任务2退出异常时切换到任任务1数据数据数据栈底栈底栈底R0SPSP=PSPARM技术基础础ARM处理器工工作状态态ARM处理器工工作模式式ARM寄存器组组成ARM的异常中中断ARM寄存器组组成概述述简介在ARM7TDMI处理器内内部有37个用户可可见的寄寄存器。在不同的的工作模模式和处处理器状状态下,程序员员可以访访问的寄寄存器也也不尽相相
28、同。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_fiqR1
29、5(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_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)R13R1
30、3_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_f
31、iqR11R10_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
32、)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
33、管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定义SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中断SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中断ARM状态各模模式下可可以访问问的寄存存器寄存器类别寄存器在汇编中的名称
34、各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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状态寄存器CPSR
35、CPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通通用寄存存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在汇编语语言中寄寄存器R0R13为保存数数据或地地址值的的通用寄寄存器。它们是是完全通通用的寄寄存器,不会被被体系结结构作为为特殊用用途,并并且可用用于任何何使用通通用寄存存器的指指令。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器
36、和程序计数器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_und
37、SPSR_irqSPSR_fiq一般的通通用寄存存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0R7为未分组组的寄存存器,也也就是说说对于任任何处理理器模式式,这些些寄存器器都对应应于相同同的32位物理寄寄存器。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5
38、(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_undR
39、14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8寄存器R8R14为分组寄寄存器。它们所所对应的的物理寄寄存器取取决于当当前的处处理器模模式,几几乎所有有允许使使用通用用寄存器器的指令令都允许许使用分分组寄存存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R
40、8(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_fiqR
41、8寄存器R8R12有两个分分组的物物理寄存存器。一一个用于于除FIQ模式之外外的所有有寄存器器模式,另一个个用于FIQ模式。这这样在发发生FIQ中断后,可以加加速FIQ的处理速速度。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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
42、(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寄
43、存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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(P
44、C)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆栈指针针寄存器器R13(SP)寄存器R13常作为堆堆栈指针针(SP)。在ARM指令集当当中,没没有以特特殊方式式使用R13的指令或或其它功功能,只只是习惯惯上都这这样使用用。但是是在Thumb指令集中中,只能能使用R13作为堆栈栈指针。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7
45、R8(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),在结结构上有有两个特特殊功能能:在每种模模式下,模式
46、自自身的R14版本用于于保存子子程序返返回地址址;当发生异异常时,将R14对应的异异常模式式版本设设置为异异常返回回地址(有些异异常有一一个小的的固定偏偏移量)。Lable程序A程序BR14R14寄寄存器与与子程序序调用BL Lable地址A?MOVPC,LRR14(地址A)Lable?1.程序A执行过程程中调用用程序B;操作流程程2.程序跳转转至标号号Lable,执行程程序B。同时硬硬件将“BLLable”指令的下下一条指指令所在在地址存存入R14;3.程序B执行最后后,将R14寄存器的的内容放放入PC,返回程程序A;R14寄寄存器与与异常发发生异常发生生时,程程序要跳跳转至异异常服务务程序
47、,对返回回地址的的处理与与子程序序调用类类似,都都是由硬硬件完成成的。R14寄寄存器当发生异异常嵌套套时,这这些异常常之间可可能会发发生冲突突。例如:如如果用户户在用户户模式下下执行程程序时发发生了IRQ中断,用用户模式式寄存器器不会被被破坏。但是如如果允许许在IRQ模式下的的中断处处理程序序重新使使能IRQ中断,并并且发生生了嵌套套的IRQ中断时,外部中中断处理理程序保保存在R14_irq中的任何何值都将将被嵌套套中断的的返回地地址所覆覆盖。R14寄存器注注意R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB.XA地址A地址A1.执行用户户模式下下的程序序;2.发生IR
48、Q中断,硬硬件将某某个地址址存入IRQ模式下的的R14_irq寄存器,用户模模式下的的R14没有被破破坏;3.IRQ服务程序序A执行完毕毕,将R14_irq寄存器的的内容减减去某个个常量后后存入PC,返回之之前被中中断的程程序;未被破坏坏R14寄存器注注意要点点R14R14_irq用户模式下的程序IRQ模式下的程序AaB.XA地址A地址A1.执行用户户模式下下的程序序;2.发生IRQ中断,硬硬件将某某个地址址存入IRQ模式下的的R14_irq寄存器,用户模模式下的的R14没有被破破坏;3.IRQ服务程序序A执行完毕毕,将R14_irq寄存器的的内容减减去某个个常量后后存入PC,返回之之前被中中
49、断的程程序;未被破坏坏IRQ模式下的程序BareturnB.XA地址B地址B4.如果在IRQ处理程序序中打开开IRQ中断,并并且再次次发生IRQ中断,或或者调用用子程序序;5.硬件将返返回地址址保存在在R14_irq寄存器中中,原来来保存的的返回地地址将被被覆盖,造成错错误;被破坏6.在程序B返回到程程序A,然后在在返回到到用户模模式下被被中断的的程序时时,发生生错误,将不能能正确返返回;returnreturn解决办法法是确保保R14的对应版版本在发发生中断断嵌套时时不再保保存任何何有意义义的值(将R14入栈),或者切切换到其其它处理理器模式式下。寄存器类别寄存器在汇编中的名称各模式下实际访
50、问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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状态寄存器CPSRCPSRSPS
51、R无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序计数数器R15(PC)寄存器R15为程序计计数器(PC),它指指向正在在取指的的地址。可以认认为它是是一个通通用寄存存器,但但是对于于它的使使用有许许多与指指令相关关的限制制或特殊殊情况。如果R15使用的方方式超出出了这些些限制,那么结结果将是是不可预预测的。读R15正常操作作时,从从R15读取的值值是处理理器正在在取指的的地址,即当前前正在执执行指令令的地址址加上8个字节(两条ARM指令的长长度)。由于ARM指令总是是以字为为单位,所以R15寄存器的的最低两两位总是是为0。LDR R0,PC?PCPC-4
52、PC-8正在执行正在译码正在取指流水线状态地址程序代码读R15当使用STR或STM指令保存存R15时,可能能将当前前执行指指令地址址加8字节或加加12字节保存存(将来来可能还还有其它它数字)。偏移移量是8还是12取决于具具体的ARM芯片,但但是对于于一个确确定的芯芯片,这这个值是是一个常常量。所以最好好避免使使用STR和STM指令来保保存R15,写R15正常操作作时,写写入R15的值被当当作一个个指令地地址,程程序从这这个地址址处继续续执行(相当于于执行一一次无条条件跳转转)。写R15由于ARM指令以字字节为边边界,因因此写入入R15的值最低低两位通通常为0b00。具体的的规则取取决于内内核结
53、构构的版本本:在ARM结构V3版及以下下版本中中,写入入R15的值的最最低两位位被忽略略,因此此跳转地地址由指指令的实实际目标标地址(写入R15的值)和和0 xFFFFFFFC相与得到到;在ARM结构V4版及以上上版本中中,写入入R15的值的最最低两位位为0,如果不不是,结结果将不不可预测测。寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(
54、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)”可以以被访问问。每种种异常都都有自己己的
55、SPSR,在因为为异常事事件而进进入异常常时它保保存CPSR的当前值值,异常常退出时时可通过过它恢复复CPSR。程序状态态寄存器器ARM内核包含含1个CPSR和5个供异常常处理程程序使用用的SPSR。CPSR反映了当当前处理理器的状状态,其其包含:4个条件代代码标志志(负(N)、零(Z)、进位(C)和溢出(V));2个中断禁禁止位,分别控控制一种种类型的的中断;5个对当前前处理器器模式进进行编码码的位;1个用于指指示当前前执行指指令(ARM还是Thumb)的位。NZCVIM0M1M2M3M4TF. . .31 30 29 28 27 26 8 7 6 5 4 3 2 1 0程序状态态寄存器器条
56、件代码码标志保留控制位溢出标志志进位或借借位扩展展零负或小于于IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TFCPSR寄存器的的格式程序状态态寄存器器条件代码码标志大多数“数值处处理指令令”可以以选择是是否影响响条件代代码标志志位。通通常如果果指令带带S后缀,则则该指令令的执行行会影响响条件代代码标志志;但有有一些指指令的执执行总是是会影响响条件代代码标志志。N、Z、C和V位都是条条件代码码标志。通过算算术操作作、逻辑辑操作、MSR或者LDM指令可以以对这些些位进行行设置。所有ARM指令都可可按条件件来执行行,而Thumb指令中只只有分支支指令可可按条件件执行。程序状态态寄存
57、器器条件代码码标志各标志位位的含义义如下: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当进行加加法/减法运算算,并且且发生有
58、有符号溢溢出时V=1,否则V=0,其它指指令V通常不变变。程序状态态寄存器器控制位CPSR的最低8位为控制制位,当当发生异异常时,这些位位被硬件件改变。它们分别别是:中断禁止止位;T位;模式位。程序状态态寄存器器控制位中断禁止止位包括括I和F位:当I位置位时时,IRQ中断被禁禁止;当F位置位时时,FIQ中断被禁禁止。T位反映了了正在操操作的状状态:当T位置位时时,处理理器正在在Thumb状态下运运行;当T位清零时时,处理理器正在在ARM状态下运运行。程序状态态寄存器器控制位模式位包包括M4、M3、M2、M1和M0,这些位位决定处处理器的的操作模模式。注意:不是所所有模式式位的组组合都定定义了有
59、有效的处处理器模模式,如如果使用用了错误误的设置置,将引引起一个个无法恢恢复的错错误。M4:0模式可见的Thumb状态寄存器可见的ARM状态寄存器10000用户R0R7,SP,LR,PC,CPSRR0R14,PC, CPSR 10001快中断R0R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiq R0R7,R8_fiqR14_fiq,PC,CPSR, SPSR_fiq 10010中断R0R7,SP_irq,LR_irq,PC,CPSR, SPSR_fiq R0R12,R13_irq,R14_irq,PC,CPSR, SPSR_irq 10011管理R0R7,SP_svc,LR_
60、svc,PC,CPSR, SPSR_svc R0R12,R13_svc,R14_svc,PC,CPSR, SPSR_svc 10111中止R0R7,SP_abt,LR_abt,PC,CPSR, SPSR_abt R0R12,R13_abt,R14_abt,PC,CPSR, SPSR_abt 11011未定义R0R7,SP_und,LR_und,PC,CPSR, SPSR_und R0R12,R13_und,R14_und,PC,CPSR,SPSR_und11111系统R0R7,SP,LR,PC,CPSR R0R14,PC, CPSR CPSR模式位设设置表程序状态态寄存器器保留位CPSR中的保
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅客服务中公共关系的有效应用在广东机场
- 临床研究项目风险评估报告
- 护理与公共卫生事件应对
- 大专护士职业规划模板
- 2026年中国太空旅游行业投资方向及市场空间预测报告(智研咨询发布)
- 医院公共卫生风险管理与控制
- 2025年灌木林碳汇计量方法探讨
- 零售业连锁店运营部副经理的职责与要求
- 乐器及音响设备采购经理的面试技巧
- 基于法律保护的智慧化电子医学影相服务平台建设研究
- 自愿放弃赡养权协议书
- 备战2026年高考数学考试易错题(新高考)专题14 排列组合与二项式定理(解析版)
- 《陆上风力发电机组钢混塔架施工与质量验收规范》
- 2025年及未来5年中国对外劳务合作市场运行态势及行业发展前景预测报告
- 2025年招标采购从业人员专业技术能力考试(招标采购合同管理中级)测试题库及答案(山西阳泉)
- 老年痴呆合并激越行为护理查房
- 2025下半年新疆生产建设兵团事业单位招聘(2398人)考试参考试题及答案解析
- 巡察底稿制作培训课件
- 停车场防汛应急预案
- 内蒙古自治区水利工程设计概(估)算编制规定(工程部分)(试行)2024
- 部编版道德与法治一年级下册第15课《戴上红领巾》精美课件
评论
0/150
提交评论