第2章 ARM处理器基础_第1页
第2章 ARM处理器基础_第2页
第2章 ARM处理器基础_第3页
第2章 ARM处理器基础_第4页
第2章 ARM处理器基础_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章ARM处理器基础2/5/2023教学要点ARM简介ARM处理器的分类流水线(pipeline)模式(model)和寄存器异常和异常向量表存储和I/OAHBA总线ARM指令系统1ARM简介1.1ARM公司和ARM处理器1)ARM是一个CPU内核。ARM公司自己并不生产或销售芯片,它采用技术授权模式,通过出售芯片技术授权,收取授权费和技术转让费。 2)基于ARM内核的处理器是目前消费类电 子市场中占有量第一的处理器,尤其是 手机行业。 3)ARM是“AdvancedRISCMachine” 的缩写,最早的ARM处理器诞生于 80年代的英国。知识产权:产品、规划和路线图CPUs从ARMv4T到ARMv6

结构体系ARM系统级IP和设计方法AMBAReferencemethodologies软件IPMediaengines-Move™,Swerve3D™先进技术Java,security,multiprocessor软件开发工具RealView™-开发工具和平台ARM处理器的使用量ARM20031.2ARM处理器的特点支持CACHE和MMU冯·诺依曼体系结构/哈佛体系结构RISC指令集固定的32位指令Load/Store体系结构大多数指令单周期完成流水线执行Thumb\DSP\jazeller功能扩展低功耗支持CACHE和MMU为什么采用高速缓存(Cache)?微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。高速缓存的工作原理:高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。CPU高速缓存控制器CACHE主存数据高速数据地址写缓冲器块数据MMU(MemoryManagementUnit)虚实地址变换内存地址访问保护支持CACHE和MMU指令寄存器控制器数据通道输入输出中央处理器存储器程序指令0指令1指令2指令3指令4数据数据0数据1数据2ARM7冯·诺依曼体系结构模型1)数据与指令都存储在同一存储区中,取指令与取数据利用同一数据总线。2)被早期大多数计算机所采用3)ARM7——冯诺依曼体系结构简单,但速度较慢。取指不能同时取数据。冯·诺依曼体系结构模型指令寄存器控制器数据通道输入输出中央处理器程序存储器指令0指令1指令2数据存储器数据0数据1数据2地址指令地址数据ARM9+哈佛体系结构模型1)程序存储器与数据存储器分开2)提供了较大的存储器带宽,各自有自己的总线3)适合于数字信号处理4)大多数DSP都是哈佛结构5)ARM9是哈佛结构取指和取数在同一周期进行,提高速度。哈佛体系结构模型RISC与CISCRISC和CISC是目前设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同,因此,在很多方面差异很大,它们主要有:CISC:复杂指令集(ComplexInstructionSetComputer)具有大量的指令和寻址方式8/2原则:80%的程序只使用20%的指令大多数程序只使用少量的指令就能够运行CISCCPU包含有丰富的单元电路,因而功能强、面积大、功耗大RISC:精简指令集(ReducedInstructionSetComputer)在通道中只包含最有用的指令确保数据通道快速执行每一条指令使CPU硬件结构设计变得更为简单

RISCCPU包含较少的单元电路,因而面积小、功耗低RISC与CISCCISCIFIDREGALUMEM开始退出IFIDALUMEMREG微操作通道开始退出单通数据通道RISC流水线操作流水线技术:几个指令可以并行执行提高了CPU的运行效率内部信息流要求通畅流动译码取指执行add译码取指执行sub译码取指执行cmp时间AddSubCmpARMRISC体系结构1.4命名的含义标志含义说明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语言设计文件ARMprocessor’snameARM926EJ-SFamilynumber7:ARM79:ARM910:ARM1011:ARM11Memorysystem

2:Cache,MMU,ProcessID4:Cache,MPU6:Writebuffer,nocacheMemorysize0:Cachesize(4-128KB)2:Reducedcachesize6:TCMSynthesizableExtensions

E:DSPextensionJ:Jazelleextension

T:Thumbsupport…2ARM处理器的分类基于处理器内核的分类ARM7T,ARM7E,ARM9,ARM9E,ARM10T,ARM10E,ARM11基于指令集体系结构的分类v4T,v5T,v5TE,v5TEJ,v62.1ARMCore(ARM核)处理器核/整数核(ProcessorCore/IntegerCore):ARM7TDMI,ARM9TDMI,ARM9E-S,ARM10TDMI,ARM10E等。ARMCPU核(ARMCPUCores):

ARM710T/720T/740T,ARM920T/940T,ARM946E-S,ARM966E-S,ARM1020E等。基于ARMCoreCPU的应用处理器,比如:Intel的PXA25x,Philip的lpc22xx系列,Samsung的S3C44B0等。ARM7T和ARM7EFamilyUnifiedCache内存管理流水线级别ThumbDSPJazelleARM7TDMI无无3有无无ARM7TDMI-S无无3有无无ARM710T/720T8kMMU3有无无ARM740T8k或4kProtectionUnit3有无无ARM7EJ-S无无3有有有ARM7系列的升级EmbeddedTraceMacrocell----ETMARM9FamilyCache内存管理流水线级别ThumbDSPJazelleARM9TDMI无无5有无无ARM920T16K/16kMMU5有无无ARM922T8k/8kMMU5有无无ARM940T4k/4kProtectionUnit5有无无ARM9系列的升级ARM9EFamilyCache内存管理流水线级别ThumbDSPJazelleARM9E-S无无5有有无ARM946E-S4k-1M/4k-1MProtectionUnit5有有无ARM966E-S无无5有有无ARM968E-S无无5有有无ARM9EJ-S无无5/6有有有ARM926EJ-S14k-128k/4k-128kMMU5/6有有有ARM9E系列的升级ARM926EJ-SARM946E-SARM966E-SARM10E和ARM10TFamilyARM10EJ-S无无6有有有ARM1026EJ-S0,4-128k/0,4-128kMMU6有有有Cache内存管理流水线级别ThumbDSPJazelleARM10E无无6有有无ARM1020E32k/32kMMU6有有无ARM1022E16k/16kMMU6有有无ARM10TDMI无无6有无无ARM1020T32k/32kMMU6有无无ARM11FamilyCache内存管理流水线级别ThumbDSPJazelle浮点运算ARM1136J-S4-64kMMU8有有有无ARM1136JF-S4-64kMMU8有有有有ARM1156T2-S可配置9Thumb-2有无无ARM1156T2F-S可配置9Thumb-2有无有StrongARM和XScaleSA-1110(基于StrongARM)内核SA-116kI-Cache+8kD-CacheI-MMU+D-MMUPXA25x/26x/27xIXP2400(基于XScale)内核XScale7/8级流水线32kI-Cache+32kD-CacheI-MMU+D-MMU2.2指令集体系结构(ISA)ThumbDSPJazelleMediaTrustZoneThumb-2v4StrongARMv4T*ARM7T,ARM9v5T*ARM10T,XScalev5TE**ARM9E,ARM10Ev5TEJ***ARM7EJ,ARM9EJ,ARM10EJv6****ARM1136J(F)-Sv6Z*****v6T2*****ARM1156T2(F)-S注:v5T支持的Thumb是对v4T中的Thumb的扩展指令集体系结构流水线方式是把一个重复的过程分解为若干个子过程,每个子过程可以与其他子过程同时进行。由于这种工作方式与工厂中的生产流水线十分相似,因此,把它称为流水线工作方式。3流水线3.1ARM7的流水线指令流水线的目的是提高执行速度。PC指向的是预取指令,因此如果直接读取PC值,得到的是“当前指令地址+8”从内存中取指令指令译码执行指令/读写REG指令流水线的目的是提高执行速度。PC指向的是预取指令,因此如果直接读取PC值,得到的是并不是当前正在执行的指令地址。CUP中的一条指令的执行可以分若干个阶段:1.取指,从存储器中取出指令(fetch)2.译码,指令译码(dec)3.取操作数,假定操作数从寄存器组中取(reg)4.执行运算(ALU)5.存储器访问(mem)6.结果写回寄存器(res)各个阶段的操作相对都是独立的。因此,可以采用流水线的重叠技术,可以大大提高系统的性能。指令流水线ARM7TDMIProcessorCore冯·诺依曼

架构三级流水线快速中断响应性能指标:0.9DhrystoneMIPs/MHzEmbedded

ICE-RT调试逻辑NomemorymanagementNocacheCPI=1.9

使用最广泛的32位嵌入式内核主要应用领域:个人音频设备手机和移动通信终端Modems,xDSL,CableModemsATMandEthernet网络设备打印机数码相机PDA机顶盒ARM7内核使用3级流水线,以提高指令流传递给处理器的速度,使得某些操作达到并行处理的效果,比单纯的串行处理要好。PC指向处于指令读取级的指令地址,而不是处于执行级的指令地址。FETCHDECODEEXECUTE从存储器读取指令译码读寄存器移位和算术逻辑运算写寄存器PC PCPC-4 PC-2PC-8 PC-4ARM Thumb指令流水线本例中6个时钟周期内一共完成了6条指令全部对寄存器进行操作(单周期执行)指令周期数(CPI)=1

OperationCycle 1 23 4 56ADDSUBMOVANDORREORCMPRSBFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDecodeExecuteFetchDecodeFetchFetch优秀的流水线结构本例中6个时钟周期内一共完成了4条指令指令周期数(CPI)=1.5Cycle

Operation 1 23456ADDSUBLDRMOVANDORRFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDataWritebackFetchDecodeExecuteFetchDecodeFetch流水线执行举例:LDRARM9TDMI5级流水线性能改进提升CPI至~1.5提高时钟频率ARM9TDMI流水线InstructionFetchShift+ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARMorThumb

InstDecodeRegSelectRegReadShiftALURegWriteThumb®ARM

decompressARMdecodeInstructionFetchFETCHDECODEEXECUTEARM7TDMICycleOperationADD R1,R1,R2SUB R3,R4,R1ORR R8,R3,R4AND R6,R3,R1EOR R3,R1,R212345678LDR

R4,[R7]9FDEFDEWFDEWFDEWFDWEFDEWF-Fetch D

-Decode E-Execute I-Interlock M-MemoryW–Write-backILDR内部周期本例中7个时钟周期完成6条指令,CPI等于1.2Interlock:LDR后面的指令马上要用到LDR的结果寄存器,导致插入一个内部周期WIM3.2更多级的流水线ARM10采用了6级流水线,但是处于兼容考虑,直接读取PC值依然等于“当前指令地址+8”。3.3流水线对程序的影响lr=lr&15;lr=pc+lr*4;cpsr=spsr;pc=lr;

and lr,lr,#15 ldr lr,[pc,lr,lsl#2] movs pc,lr .LCtab_irq: .word __irq_usr @0x0 .word __irq_invalid @0x1 .word __irq_invalid @0x2 .word __irq_svc @0x3 .word __irq_invalid @0x4 …… .word __irq_invalid @0xf3.4指令预取和自修改代码流水线使得CPU在执行当前指令的同时,从存储器中预取其后若干条指令。预取的指令不一定得到执行。比如发生跳转或中断。自修改代码指的是代码在执行过程中可能修改自身。被修改的指令可能和预取得指令不同,从而产生错误。相邻指令执行的数据相关性会产生指令执行的停顿(stall),严重的会产生数据灾难(hazards)。如图所示,第2条指令的reg操作需要第1条指令执行的结果(res),因此,第2条指令在执行时,不得不产生停顿。另外碰到分支类指令,那么,会使后面紧接该条指令的几条指令的执行都会无效,如图所示。4模式和寄存器模式分类ARM处理器的寄存器状态寄存器异常和异常向量表4.1模式分类ARM一共有7种执行模式:User:非特权级模式,多数应用程序使用的模式FIQ:进入快速中断响应时IRQ:进入一般中断响应时Supervisor:复位后的缺省模式,或进入软件中断响应时Abort:遇到存储器访问出错时Undef:遇到未定义指令时System:特权级的User模式4.2ARM处理器的寄存器ARM一共有37个32位的寄存器1个PC寄存器1个CPSR(当前状态寄存器)5个SPSR(状态保留寄存器)30个通用寄存器当前的处理器模式决定了可以访问到的寄存器组,以下是对所有模式都有的寄存器一组特定的r0-r12寄存器一个特定的r13(堆栈指针,sp)和r14(连接寄存器,lr)PC寄存器

r15当前状态寄存器cpsr特权模式(System模式除外)独有的特定的spsr(状态保留寄存器)ARM处理器的寄存器User/SystemSupervisorAbortUndefinedInterruptFIQR0R0R0R0R0R0R1R1R1R1R1R1R2R2R2R2R2R2R3R3R3R3R3R3R4R4R4R4R4R4R5R5R5R5R5R5R6R6R6R6R6R6R7R7R7R7R7R7R8R8R8R8R8R8_FIQR9R9R9R9R9R9_FIQR10R10R10R10R10R10_FIQR11R11R11R11R11R11_FIQR12R12R12R12R12R12_FIQR13R13_SVCR13_ABORTR13_UNDEFR13_IRQR13_FIQR14R14_SVCR14_ABORTR14_UNDEFR14_IRQR14_FIQPCPCPCPCPCPC

CPSRCPSRCPSRCPSRCPSRCPSR

SPSR_SVCSPSR_ABORTSPSR_UNDEFSPSR_IRQSPSR_FIQ寄存器组织User

mode

r0-r7,

r15,

and

cpsrr8r9r10r11r12r13(sp)r14(lr)spsrFIQr8r9r10r11r12r13(sp)r14(lr)r15(pc)cpsrr0r1r2r3r4r5r6r7Userr13(sp)r14(lr)spsrIRQUser

mode

r0-r12,

r15,

and

cpsrr13(sp)r14(lr)spsrUndefUser

mode

r0-r12,

r15,

and

cpsrr13(sp)r14(lr)spsrSVCUser

mode

r0-r12,

r15,

and

cpsrr13(sp)r14(lr)spsrAbortUser

mode

r0-r12,

r15,

and

cpsrThumbstateLowregistersThumbstateHighregistersNote:SystemmodeusestheUsermoderegistersetARM处理器的寄存器r0—r12:通用寄存器。当C和汇编互相调用时,r0~r3用来传递函数参数,可记为a0~a3r13:用于各工作态的堆栈寄存器(sp)r14:用来保护程序返回地址的链接寄存器(lr)r15:程序计数器(pc)r8_FIQ—r12_FIQ:允许快速中断处理r8_User—r12_User:除了FIQ外各模式公用除了User和System模式外,各种模式都有自己独立的r13和r144.3状态寄存器条件标识位N=

结果为负Z=结果为零C=进位V=溢出Q标识位只在5TE/J系列中有效指示stickyoverflow的发生J标识位仅在5TEJ系列中有效J=1:处理器处于Jazelle状态中断使能位I=1:禁止IRQ.F=1:禁止FIQ.T标识位只在xT系列内核中有效T=0:处理器处于ARM状态T=1:处理器处于Thumb状态模式位指示当前处理器模式2731NZCVQ2867IFTmode162381554024fsxc

UndefinedJCPSR/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)PC寄存器(r15)当处理器处于ARM状态时:所有指令都是32位长度所有指令存储必须word对齐pc[31:2]有效,[1:0]未定义当处理器处于Thumb状态时:所有指令都是16位长度所有指令存储必须halfword对齐pc[31:1]位有效,最低位未定义当处理器处于Jazelle状态时:所有指令都是8位长度处理器一次执行1个word的读取指令获得4条Java指令注意在指令中访问PC寄存器的值不是当前指令地址5异常和异常向量表异常的产生异常优先级异常处理异常返回指令5.1异常的产生直接异常:软件中断,未定义指令(包括所要求的协处理器不存在时的协处理器命令)和预取指令间接异常:数据中止(在Load和Store数据访问时的存储器故障)外部异常:复位,IRQ和FIQ5.2异常优先级异常在当前指令执行完成之后才被响应多个异常可以在同一时间产生异常指定了优先级和固定的服务顺序:ResetDataAbortFIQIRQPrefetchAbortSWIUndefinedinstructionVectorTableVectortablecanbeat

0xFFFF0000onARM720T

andonARM9/10familydevicesFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x005.3异常处理当异常产生时,ARMcore:拷贝CPSR到SPSR_<mode>设置适当的CPSR位:改变处理器状态进入ARM状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断保存返回地址到LR_<mode>设置PC到相应的异常向量返回时,异常处理需要:从SPSR_<mode>恢复CPSR从LR_<mode>恢复PC这些操作只能在ARM态执行.从SWI和Undef异常返回 MOVSpc,lr从FIQ,IRQ和预取异常(PrefectAbort)返回

SUBSpc,lr,#4

从数据异常(DataAbort)返回

SUBSpc,lr,#8

若LR之前被压栈,使用LDM“^”

LDMFDsp!,{pc}^异常返回:使用一数据处理指令:相应的指令取决于什么样的异常带S位把PC作为目标寄存器在特权模式下,这些操作不仅更新PC,而且拷贝SPSR到CPSR5.4异常返回指令汇编指令中的^和S标记可用于异常返回,恢复PC的同时恢复CPSR。如果使用堆栈返回,预先保存在栈中的返回地址要求以做好调整。在异常返回时使用类似如下指令:“ldmfdr13!,(r0-r3,pc)^”1)“^”后缀不允许在usr和svc模式下使用。2)如果用在LDM指令中,且寄存器列表中含有PC时,那么除了正常的多寄存器传送外,将SPSR拷贝到CPSR中。这一特点用于异常处理返回。ARMorThumb?Thumb/ARM混合应用程序ARMCodeARMCodeThumb

CodeFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionResetFIQvsIRQFIQ和IRQ提供了非常基本的优先级级别。在下边两种情况下,FIQs有高于IRQs的优先级:当多个中断产生时,FIQ高于IRQ.处理FIQ时禁止IRQs.IRQs将不会被响应直到FIQ处理完成.FIQs的设计使中断处理尽可能地快.FIQ向量位于中断向量表的最末.为了使中断处理程序可从中断向量处连续执行FIQ模式有5个额外的私有寄存器(r8-r12)中断处理必须保护其使用的非私有寄存器可以有多个FIQ中断源,但是考虑到系统性能应避免嵌套。6ARM的存储和I/O空间特点大端和小端非对齐的存储访问6.1特点ARM体系同时支持大端/小端。32位地址线/数据线,支持如下数据类型:字节(byte)8bits半字(Halfword)16bits,半字必须对齐2字节边界字(Word)32bits,字必须对齐4字节边界ARM的I/O空间采用统一编址方式。ARM可以通过配置支持两种endianr0=0x11223344STRr0,[r1]LDRBr2,[r1]r1=0x100Memory32100123ByteLane312423161587011223344312423161587011223344312423161587011223344312423161587000000044312423161587000000011LittleendianBigendianR2=0x44R2=0x116.2EndianConfiguration/大端和小端Littleendian:Bigendian6.3非对齐的存储访问非对齐的取指不可预知结果。ARM状态:忽略低2两位;Thumb状态:忽略最低位。忽略由存储器实现。非对齐的数据访问执行结果不可预知。忽略字单元地址的最低两位;忽略半字单元地址的最低位。忽略可能由处理器或存储器完成。7AMBA总线当ARM核作为一个元件集成到复杂的系统芯片上时,需要某种接口和其它元件进行通讯,这就是AMBA总线。ARM研发的AMBA(Advanced

Microcontroller

Bus

Architecture)提供一种特殊的机制,可将RISC处理器集成在其它IP芯核和外设中,2.0版AMBA标准定义了三组总线:AHB(AMBA高性能总线):用于高性能、高数据吞吐部件,如CPU、DMA、DSP之间的互连。ASB(AMBA系统总线):用来作处理器与外设之间的互连,将被AHB取代。APB(AMBA外设总线):为系统的低速外部设备提供低功耗的简易互连。系统总线和外设总线之间的桥接器提供AHB/ASP部件与APB部件间的访问代理与缓冲。ARM核片内RAMDMA控制器桥路UART定时器并口APBAHB/ASB外部总线接口测试接口控制AHB用来研发宽带宽处理器芯核的片上总线。应用于高性能、高时钟频率的系统模块,它构成了高性能的系统骨干总线(

back-bone

bus

)。它主要支持的特性是:用于高性能、高数据吞吐部件,如CPU、DMA、DSP之间数据突发传输(

burst

transfer

)数据分割传输(

split

transaction

)流水线方式一个周期内完成总线主设备(master)对总线控制权的交接单时钟沿操作内部无三态实现更宽的数据总线宽度(最低32位,最高可达1024位,但推荐不要超过256位)是第一代AMBA系统总线,同AHB相比,它数据宽度要小一些,它支持的典型数据宽度为8位、16位、32位。它的主要特征如下:流水线方式数据突发传送多总线主设备内部有三态实现

是本地二级总线(local

secondary

bus

),通过桥和AHB/ASB相连。它主要是为了满足不需要高能流水线接口或不需要高带宽接口的设备的互连。APB的总线信号经改进后全和时钟上升沿相关,这种改进的主要优点如下:更易达到高频率的操作性能和时钟的占空比无关单时钟沿简化了更易与基于周期的仿真器集成APB

只有一个APB桥,它将来自AHB/ASB的信号转换为合适的形式以满足挂在APB上的设备的要求。桥要责锁存地址、数据以及控制信号,同时要进行二次译码以选择相应的APB设备ARM指令集总体分为6类指令跳转指令:B和BL数据处理指令:数据传输指令,算术指令,逻辑指令,比较指令,乘法指令,前导零计数访存指令:单数据访存指令,多数据访存指令,信号量操作指令程序状态访问指令:MRS和MSR协处理器指令异常指令:SWI和BKPT8ARM指令系统所有指令都是32bit大多数指令都在单周期内完成所有指令都可以条件执行load/store体系结构指令集可以通过协处理器扩展8.1ARM指令特点<Opcode>{<cond>}{s}<Rd>,<Rn>,<Operand2>Cond:指令的条件码Opcode:指令操作码S:操作是否影响cpsrRn:包含第一个操作数的寄存器编码Rd:目标寄存器编码Operand2:第2操作数Cond001OpcodeSRnRdOperand20111215161920212425272831788.2ARM指令的格式8.3ARM指令的条件执行所有的ARM指令可包含一个可选的条件码,只有在cpsr中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOP指令)。//r0,r1,r2,r3,r4:a,b,c,d,ecmp r0,r1cmpeq r2,r3addeq r4,r4,#1if((a==b)&&(c==d)){ e++;}ARM指令的条件域EQ/NE:等于/不等于(equal/notequal)HS/LO:无符号数高于或等于/无符号数小于(higherorsame/lower)HI/LS:无符号数高于/无符号数低于或等于(higher/lowerorsame)GE/LT:有符号数大于或等于/有符号数小于(greaterorequal/lessthan)GT/LE:有符号数大于/有符号数小于或等于(greaterthan/lessorequal)MI/PL:负/非负VS/VC:溢出/不溢出(overflowset/overflowclear)CS/CC:进位/无进位(carryset/carryclear)0000EQZ置位相等/等于00001NEZ清0不等0010CS/HSC置位进位/无符号高于或等于0011CC/LOC清0无进位/无符号低于0100MIN置位负数0101PLN清0非负数0110VSV置位溢出0111VCV清0无溢出ARM指令的条件码ARM指令的条件码1000HIC置位且Z清0无符号高于1001LSC清0或Z置位无符号低于或等于1010GEN等于V有符号大于或等于1011LTN不等于V有符号小于1100GTZ清0且N等于V有符号大于1101LEZ置位或N不等于V有符号小于或等于1110AL任何状态总是(always)1111NV无从不(never)注:AL是默认的,NV不建议使用。4.4数据处理指令数据传输指令:mov和mvn算数指令:add、adc、sub、sbc,rsb和rsc逻辑指令:and、orr、eor和bic比较指令:cmp、cmn、tst和teq所有的操作数要么来自寄存器,要么来自立即数,不会来自内存。如果有结果,则结果一定是为32位宽,并且放在一个寄存器中,不会写入内存。(有一个例外:长乘法指令产生64位结果)每一个操作数寄存器和结果寄存器都在指令中独立指出,即:ARM指令采用3地址模式:

<Operation>Rd,Rn,Rm数据处理指令的特点addr0,r1,#0xffaddr0,r1,r1,LSLr2CondSRnRd第2操作数078111215161920opcode212400X25272831#immed_8#rot0781100000000Rm03411方式1:#immed方式2:Rm0000Rm03411Rs78方式3:RmLSLRsshiftRm03411#immed_567方式4:RmLSL#immed_5(#immed_5取值范围0-31)addr0,r1,r1,LSL#31四种寻址方式和s后缀四种寻址方式的硬件支持寄存器,可能需要移位。如需移位,移位值可为:5bit的无符号整数(0-31)在指令的最低字节指定的另一寄存器立即数

8比特数

8比特数循环右移偶数位右移位数由汇编器自动计算立即数寻址ARM指令中的立即数,由一个8bit的常数循环右移偶数位得到:立即数=(0->255)循环右移2N位,其中:0<=N<=12例子:合法立即数:0x3fc,0x0,0xf0000000,0xf0000001非法立即数:0x1fe,0xffff,0x1010,0xf0000010同一个立即数可能有多个表示方法。如:0x3f0=0x3f循环右移28位0x3f0=0xfc循环右移30位对立即数的编码规则:如果立即数在0–0xff之间,移位数为0。否则,就取决于编译器了。指令“movr0,#0x3f0”在ADS1.2中被编译为0xe3a00ffc,在arm-elf-gcc-2.95.3中被编译为0xe3a00e3f。立即数寻址对于有互补操作的指令,编译器可以做智能的转换,比如:mvnr1,0xffffff00 -> movr1,0xffaddr1,r1,#0xff

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论