ARM寻址方式与指令系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005嵌入式系统原理与接口技术第3章ARM寻址方式与指令系统NEUSOFTInstituteofinformationTechnology.ChengDu成都东软信息技术学院计算机系杨宗德028-82878167yangzongde@ccniit.comYangzd@neusoft.comNEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.20053.1ARM编程模型NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.20053.1.1机器指令、伪指令和宏指令¾机器指令能被处理器直接执行,而伪指令宏和宏指令不能。机器指令包括ARM指令集和Thumb指令集;¾伪指令是在源程序汇编期间,由汇编编译器处理。其作用是为汇编程序完成准备工作;¾宏指令在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.20053.1.2ARM处理器模式processormode•除用户模式之外的其余6种称为非用户模式,或特权模式(PrivilegedModes);而特权模式中,除系统模式之外的其余5种又称为异常模式(ExceptionModes),不同的工作模式间可以相互切换。工作模式功能M[4:0]用户模式(usr)正常的程序执行状态10000快速中断模式(fiq)用于高速数据传输或通道处理10001外部中断模式(irq)用于通用的中断处理10010管理模式(svc)操作系统的保护模式10011中止模式(abt)用于虚拟存储及存储保护10111未定义指令模式und用于支持硬件协处理器的软件仿真11011系统模式(sys)运行特权级的操作系统任务11111NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005ARM的寄存器组织用户模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13R14R15CPSR系统模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13R14R15CPSR管理模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13_svcR14_svcR15CPSRSPSR_svc中止模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13_abtR14_abtR15CPSRSPSR_abt未定义指令模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13_undR14_undR15CPSRSPSR_und外部中断模式R0R1R2R3R4R5R6R7R8R9R10R11R12R13_irqR14_irqR15CPSRSPSR_irq快速中断模式R0R1R2R3R4R5R6R7R8_fiqR9_fiqR10_fiqR11_fiqR12_fiqR13_fiqR14_fiqR15CPSRSPSR_fiqNEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005ARM处理器的寄存器(续)NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005ARM的寄存器组织1.通用寄存器:包括R0~R15,以及程序计数器PC.¾R0~R7称为不分组寄存器;¾R8~R12有两组物理寄存器。一组属于快速模式(R8_fiq~R12_fiq),另一组属于其它模式(R8_usr~R12_usr);¾R13和R14有6组物理寄存器。其中用户模式和系统模式共用一组。寄存器R13通常作为堆栈指针SP(stackpointer),寄存器R14常用作连接寄存器LR(linkregister);¾寄存器R15,又称为PC(programcounter)NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005ARM的寄存器组织2.状态寄存器:¾当前程序状态寄存器CPSR(currentprogramstatusRegister),可以在任何工作模式下被访问;¾程序状态备份寄存器SPSR(SavedProgramStatusRegister),只有在异常模式下,才能被访问;NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005CPSR/SPSR•条件标志(ConditionCodeFlags)–N=ALU计算结果为负数(NegativeresultfromALU(ArithmeticLogicalUnit)flag)。–Z=ALU计算结果为0(ZeroresultfromALUflag)。–C=ALU计算结果进位(ALUoperationCarriedout)。–V=ALU计算结果溢出(ALUoperationOVerflowed)。•中断禁止位(InterruptDisablebits)–I=1,关IRQ。–F=1,关FIQ。•TBit(Architecturev4Tonly)–T=0,处理器当前处于ARM状态(ProcessorinARMstate)–T=1,处理器当前处于Thumb状态(ProcessorinThumbstate)NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005CPSR/SPSRM[4:0]模式AccessibleRegisters10000UserPC,R14toR0,CPSR10001FIQPC,R14_FIQtoR8_FIQ,R7toR0,CPSR,SPSR_FIQ10010IRQPC,R14_IRQ,R13_IRQ,R12toR0,CPSR,SPSR_IRQ10011SVCPC,R14_SVC,R13_SVC,R12toR0,CPSR,SPSR_SVC10111AbortPC,R14_ABORT,R13_ABORT,R12toR0,CPSR,SPSR_ABORT11011UndefPC,R14_UNDEF,R13_UNDEF,R12toR0,CPSR,SPSR_UNDEF11111SystemPC,R14toR0,CPSR(Architecture4only)NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.20053.1.3异常的产生•直接异常:软件中断,未定义指令(包括所要求的协处理器不存在时的协处理器命令)和预取指令•间接异常:数据中止(在Load和Store数据访问时的存储器故障)•外部异常:复位,IRQ和FIQNEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005异常产生时的模式切换NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005异常产生时的模式切换(续)•当异常发生后,ARMcore的操作:–(1)将CPSR拷贝到SPSR_mode(自动的)–(2)将PC保存在相应异常模式下的lr_mode(自动的)–(3)设置CPSR中适当的位•清除CPSR中的Thumb位(异常进入后均为ARMstate,不可能是THUMBstate)•修改相应的模式位•关中断,如果是FIQ或Reset异常,还要关FIQ–映射相应模式的寄存器–将PC指向向量地址NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005异常返回•从异常返回,ARMcore的操作:–从SPSR_mod中恢复CPSR(代码实现)–恢复PC从LR_mod(代码实现)•各种异常的返回时,对返回地址的调整不同:–SWI/UND:movspc,r14_swi/und–FIQ/IRQ/Prefetch:subspc,r14_fiq/irq/prefetch,#4–DataABR:subspc,r14_dataabr,#8NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005异常返回(续)•汇编指令中的^和S标记可用于异常返回,恢复PC的同时恢复CPSR。•S标记的例子见前述命令中的“movs”。•如果使用堆栈返回,预先保存在栈中的返回地址要求已做好调整。在异常返回时使用类似如下指令:“ldmfdr13!,(r0-r3,pc)^”–1)“^”后缀不允许在usr和svc模式下使用。–2)如果用在LDM指令中,且寄存器列表中含有PC时,那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR中。这一特点用于异常处理返回。–3)如果使用“^”后缀进行数据传送且寄存器列表不包含PC时,加载/存储的是usr模式的寄存器,而不是当前模式的寄存器。NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005异常中断Ⅰ•异常中断是指处理器由于外部或内部的原因,停止执行当前任务,转而处理特定的事件,处理完后返回原程序,继续执行。异常类型工作模式特定地址(低端)特定地址(高端)优先级复位管理模式0x000000000xFFFF00001未定义指令未定义指令中止模式0x000000040xFFFF00046软件中断(SWI)管理模式0x000000080xFFFF00086指令预取中止中止模式0x0000000C0xFFFF000C5数据访问中止中止模式0x000000100xFFFF00102外部中断请求(IRQ)外部中断模式0x000000180xFFFF00184快速中断请求(FIQ)快速中断模式0x0000001C0xFFFF001C3NEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005异常中断Ⅱ(1)•例子:1.整个地址空间的起始位置(地址0x00000000开始)有以下指令,一旦发生外部中断请求,处理器首先自动保存当前状态(PC-R14,CPSR-SPSR),进入外部中断模式,接着执行地址0x00000018处的指令,即bIRQ_SVC_HANDLER跳转到标号IRQ_SVC_HANDLER处开始执行。bSYS_RST_HANDLER;对0x00000000bUDF_INS_HANDLER;0x00000004bSWI_SVC_HANDLER;应0x00000008bINS_ABT_HANDLER;0x0000000cbDAT_ABT_HANDLER;地0x00000010b.;bIRQ_SVC_HANDLER;址0x00000018bFIQ_SVC_HANDLER;0x0000001cNEUSOFTInstituteofInformationTechnology,ChengDuDate:12.Sept.2005异常中断Ⅱ(2)IRQ_SVC_HANDLER处的代码为:IRQ_SVC_HANDLERsublr,lr,#4stmfdsp!,{r0-r3,lr}ldrr0,=IRQ_SVC_Vectorldrpc,[r0]处理器将通用寄存器和返回地址压入堆栈,接着跳转到外部中断请求的中断服务程序中。IRQ_SVC_Vector为外部中断请求的中断向量。NEUSOFTInstitute

1 / 91
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功