




免费预览已结束,剩余282页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第2章ARM体系结构,主要内容,1,3,2,4,ARM体系结构概述,编程模型,ARM基本寻址方式,ARM指令集,5,ARM9TDMI内核,6,ARM9与ARM7的比较,ARM920T核,7,2.1.1ARM体系结构的特点,ARM即AdvancedRISCMachines的缩写。ARM公司1990年成立,是设计公司。ARM是知识产权(IP)供应商,本身不生产芯片,靠转让设计许可,由合作伙伴公司来生产各具特色的芯片。ARM处理器的3大特点是:耗电少、成本低、功能强;16位/32位双指令集;全球众多合作伙伴保证供应。,ARM处理器为RISC芯片,其简单的结构使ARM内核非常小,这使得器件的功耗也非常低。它具有经典RISC的特点:,2.1.1ARM体系结构的特点,2.1.1ARM体系结构的特点,ARM体系结构的特点:,RISC型处理器结构ARM/Thumb指令集多处理器状态模式嵌入式在线仿真调试灵活和方便的接口ARM体系结构具有协处理器接口ARM处理器核还具有片上总线AMBA(AHB/ASB/APB)低电压低功耗的设计,2.1.1ARM体系结构的特点,ARM目前的产品系列:,ARM7ARM9ARM9EARM10SecurCore,通用处理器系列,专门为安全设备设计的处理器系列,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,微处理器是整个系统的核心,通常由3大部分组成。,1.ARM的体系机构,由32位ALU、31个32位通用寄存器及6位状态寄存器、328位乘法器、3232位桶形移位寄存器、指令译码及控制逻辑、指令流水线和数据/地址寄存器组成。,ALU,由两个操作数锁存器、加法器、逻辑功能、结果及零检测逻辑构成。,ALU的逻辑结构,ALU,每一时钟周期由双相时钟组成。ALU的最小数据通路周期由以下组成:寄存器读时间;移位器延迟;ALU延迟;寄存器写建立时间;双相时钟间非重叠时间。,ALU的数据通路时序,桶形移位寄存器,为了减少移位的延迟时间,ARM采用了3232位的桶形移位寄存器。这样,可以使左移/右移n位、环移n位和算术右移n位等都可以一次完成。,高速乘法器,ARM为了提高运算速度,采用两位乘法的方法。两位乘法根据乘数的2位来实现“加-移位”运算。,乘数An-1An:00-原部分积S右移2位;01-原部分积S加被乘数后右移2位;10-原部分积S加2倍被乘数后,右移2位;11-原部分积S加3倍被乘数后,右移2位。,2倍被乘数可通过将被乘数左乘1位来实现;3倍可看作4-1(11100-1),故先减1倍被乘数,再加4倍被乘数来实现。4倍被乘数的操作实际上是在该2位乘数11的高1位乘数加“1”,且此“1”可暂存在Cout进位触发器中。,高速乘法器,组合值Yi-1YiC操作C值变化0000部分积0;右移两位C=01001部分积x;右移两位C=01010部分积x;右移两位C=02011部分积2x;右移两位C=02100部分积2x;右移两位C=03101部分积x;右移两位C=13110部分积x;右移两位C=14111部分积0;右移两位C=1,高速乘法器,x=0.101100y=0.111001,高速乘法器,ARM的高速乘法器采用328位的结构,逻辑结构如下:,浮点部件,浮点部件是作为选件为ARM体系结构选用,FPA10浮点加速器以协处理器方式与ARM相连,并通过协处理器指令的解释来执行。,控制器,ARM的控制器采用硬接线的可编程逻辑阵列PLA。输入端14根,输出40根,分散控制Load/Store多路、乘法器、协处理器以及地址、寄存器、ALU和移位器的控制。,寄存器,ARM内含37个寄存器,其中:31个通用32位寄存器6个状态寄存器,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,冯诺依曼体系结构,指令寄存器,控制器,数据通道,输入,输出,中央处理器,存储器,程序,指令0,指令1,指令2,指令3,指令4,数据,数据0,数据1,数据2,冯诺依曼体系结构,指令寄存器,控制器,数据通道,输入,输出,CPU,程序存储器,指令0,指令1,指令2,数据存储器,数据0,数据1,数据2,地址,指令,地址,数据,哈佛体系结构,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,指令执行的阶段,计算机中的1条指令的执行可以分若干个阶段:取指,从存储器中取出指令(fetch);译码,指令译码(dec):取操作数,假定操作数从寄存器组中取(reg);执行运算(ALU);存储器访问,操作数与存储器有关(mem);结果写回寄存器(res)。,指令执行的阶段,流水线的停顿,相邻指令执行的数据相关性会产生指令执行的停顿。,指令执行的阶段,碰到分支类指令,则会使后面紧接该条指令的几条指令的执行都无效。,遇到分支指令,28,ARM7ARM处理器使用3级流水线,分别为:取指级:取指级完成程序存储器中指令的读取,并放入指令流水线中。译码级:对指令进行译码,为下一周期准备数据路径需要的控制信号。这一级指令“占有”译码逻辑,而不“占有”数据路径。执行级:指令“占有”数据路径,寄存器被读取,操作数在桶式移位器中被移位,ALU产生相应的运算结果并回写到目的寄存器中,ALU的结果则根据指令需求来更改状态寄存器的条件位。,ARM体系结构的3级流水线,ARM7体系结构采用了3级流水线,分为取指,译码和执行。下图是单周期3级流水线的操作示意图。,ARM体系结构的3级流水线,由于取指的存储器访问和执行的数据通路占用都是不可同时共享的资源,因此对多周期指令来说,会产生流水线阻塞。如图3-12所示下图的影印框周期都是与存储器访问有关的。因此在流水线设计中不允许重叠。,31,ARM9架构采用5级流水线:,增加了I-Cache和D-Cache,把存储器的取指与数据存取分开;增加了数据写回的专门通路和寄存器;把指令的执行过程分割为5阶段:取指令;指令译码、寄存器读、分支目标计算及执行;移位和ALU操作;数据Cache访问;结果写回到寄存器。,32,ARM9架构采用了5级流水线:,取指:指令从存储器中取出,放入指令流水线。译码:指令译码,从寄存器中读取寄存器操作数。在寄存器组中有3个操作数读端口,因此大多数ARM指令能在一个周期内读取其操作数。执行:把一个操作数移位,产生ALU的结果。如果指令是Load或Store,在ALU中计算存储器的地址。缓冲/数据:如果需要,则访问数据存储器。否则,ALU的结果只是简单地缓冲一个时钟周期,以便使所有指令具有同样的流水线流程。回写:将指令产生的结果回写到寄存器,包括任何从存储器读取的数据。,33,更多级的流水线,ARM10采用了6级流水线。ARM11采用了8级流水线。,ARM体系结构的5级流水线,5级流水线把存储器的取指与数据存取分开,增加了I-Cache和D-Cache以提高存储器存取的效率,增加了数据写回的专门通路和寄存器,以减少数据通路冲突。这样,5级流水线分为:取指、指令译码、执行、数据缓存和写回。,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,存储器系统,寄存器,高速缓存SRAM,主存储器DRAM,本地存储器Flash、ROM、磁盘,网络存储器Flash、ROM、磁盘,时钟周期,0,110,50100,20000000,分层结构,存储器种类,RAM:随机存取存储器,SRAM:静态随机存储器,DRAM:动态随机存储器1)SRAM比DRAM快2)SRAM比DRAM耗电多3)DRAM存储密度比SRAM高得多4)DRAM需要周期性刷新ROM:只读存储器EPROM(ErasableProgrammableROM)EEPROM(ElectricallyEPROM)FLASH:闪存,闪速存储器(FLASH),相对传统的EPROM芯片,这种芯片可以用电气的方法快速地擦写由于快擦写存储器不需要存储电容器,故其集成度更高,制造成本低于DRAM它使用方便,既具有SRAM读写的灵活性和较快的访问速度,又具有ROM在断电后可不丢失信息的特点,所以快擦写存储器技术发展十分迅速,NOR技术,NOR技术闪速存储器是最早出现的FlashMemory,目前仍是多数供应商支持的技术架构,它源于传统的EPROM器件。与其它FlashMemory技术相比,具有可靠性高、随机读取速度快的优势。在擦除和编程操作较少而直接执行代码的场合,尤其是代码(指令)存储的应用中广泛使用。由于NOR技术FlashMemory的擦除和编程速度较慢,而块尺寸又较大,因此擦除和编程操作所花费的时间很长,在纯数据存储和文件存储的应用中,NOR技术显得力不从心。,NAND技术,NAND技术FlashMemory具有以下特点:以页为单位进行读和编程操作,1页为256或512字节;以块为单位进行擦除操作,1块为4K、8K或16K字节。具有快编程和快擦除的功能,其块擦除时间是2ms;而NOR技术的块擦除时间达到几百ms数据、地址采用同一总线,实现串行读取。随机读取速度慢且不能按字节随机编程。芯片尺寸小,引脚少,是位成本(bitcost)最低的固态存储器,突破了每兆字节1元的价格限制。芯片包含有失效块,其数目最大可达到335块(取决于存储器密度)。失效块不会影响有效块的性能,但设计者需要将失效块在地址映射表中屏蔽起来基于NAND的存储器可以取代硬盘或其它块设备。,ARM存储器结构,ARM架构的处理器,有的带有指令Cache和数据Cache,但片内不带有片内RAM和片内ROM,系统所需的RAM和ROM须通过总线外接,如下图。,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,ARMI/O结构,ARM架构中的处理器核和处理器内核一般都没有I/O的部件和模块,构成ARM架构的处理器中的I/O可通过AMBA总线来扩充。,(1)存储器映像I/OARM采用存储器映像I/O的方式,即把I/O端口地址作为特殊的存储器地址。不过I/O的输入/输出与真正的存储器读/写仍然有所不同:存储器的单元重复读多次的值是一致的;而I/O设备的连续2次输入,其输入值可能会有所不同。(2)直接存储器存取DMA在I/O的数据流量比较大,中断处理比较频繁的场合,会明显影响系统的性能。因此,许多系统就采用了直接存储器存取DMA,这样,I/O的数据块传送至存储器的缓冲器区域就不需要处理器介入。而中断也仅仅出现在出现出错时或缓冲器满时。(3)中断IRQ和快速中断FIQ一般的ARM没有DMA的功能,为了提高I/O处理的能力,对于一些要求I/O处理速率比较高的事件,系统安排快速中断FIQ(FastInterrupt),而对其余的I/O源仍安排一般中断IRQ。,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,ARM协处理器接口,ARM为了便于片上系统SOC的设计,处理器内核尽可能精简,要增加系统的功能,可以通过协处理器来实现。在逻辑上,ARM可以扩展16个协处理器,每个协处理器可有16个寄存器。,例如,MMU和保护单元的系统控制都采用CP15协处理器;JTAG调试中的协处理器为CP14,即调试通信通道DCC(DebugCommunicationChannel)。,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,ARMAMBA接口,ARM处理器也可以通过先进微控制器总线架构AMBA(AdvancedMicrocontrollerBusArchitecture)来扩展不同体系架构的宏单元及I/O部件。AMBA事实上已成为片上总线OCB(OnChipBus)标准。,AMBA包括以下三类总线:先进高性能总线AHB先进系统总线ASB先进外围总线APB,2.1.2ARM处理器结构,1,3,2,4,ARM的体系结构,ARM的流水线结构,ARM存储器结构,ARMI/O结构,5,ARMAMBA接口,6,ARM协处理器接口,ARMJTAG调试接口,7,8,冯诺依曼结构与哈佛结构,JTAG调试接口的结构,JTAG是联合测试工作组(JointTestActionGroup)的简称,是在名为标准测试访问端口和边界扫描结构的IEEE的标准1149.1的常用名称。此标准用于测试访问端口,使用边界扫描的方法来测试印刷电路板。,JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(TestAccessPort测试访问口)通过专用的JTAG测试工具对内部节点进行测试。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。现今,JTAG接口还常用于实现ISP(In-SystemProgrammable;在线编程),对FLASH等器件进行编程。,JTAG调试接口的结构,因为只有一条数据线,通信协议有必要像其他串行设备接口一样为串行传输。时钟由TCK引脚输入。配置是通过TMS引脚采用状态机的形式一次操作一位来实现的。每一位数据在每个TCK时钟脉冲下分别由TDI和TDO引脚传入或传出。可以通过加载不同的命令模式来读取芯片的标识,对输入引脚采样,驱动(或悬空)输出引脚,操控芯片功能,或者旁路(将TDI与TDO连通以在逻辑上短接多个芯片的链路)。,JTAG调试接口的结构,由测试访问端口TAP(TestAccessPort)控制器、指令寄存器、数据寄存器以及与JTAG接口兼容的ARM架构处理器组成。,JTAG的控制寄存器,测试访问端口TAP控制器对嵌入在ARM处理器核内部的测试功能电路进行访问控制,是一个同步状态机。通过测试模式选择TMS和时钟信号TCK来控制其状态机。指令寄存器是串行移位寄存器,通过它可以串行输入执行各种操作的指令。数据寄存器组是一组串行移位寄存器。操作指令被串行装入由当前指令所选择的数据寄存器,随着操作的进行,测试结果被串行移出。其中:器件ID寄存器:读出在芯片内固化的ID号。旁路寄存器:1位移位寄存器,用1个时钟的延迟把TDI连至TDO,使测试者在同一电路板测试循环内访问其他器件。边界扫描寄存器(扫描链):截取ARM处理器核与芯片引脚之间所有信号,组成专用的寄存器位。,JTAG测试信号,TRST:测试复位输入信号,测试接口初始化。TCK:测试时钟,在TCK时钟的同步作用下,通过TDI和TDO引脚串行移入/移出数据或指令,同时也为测试访问端口TAP控制器的状态机提供时钟。TMS:测试模式选择信号,控制测试接口状态机的操作。TDI,测试数据输入线,其串行输入数据送至边界扫描寄存器或指令寄存器(由TAP控制器的当前状态及已保存在指令寄存器中的指令来控制)。TDO:测试数据输出线,把从边界扫描链采样的数据传播至串行测试电路中的下一个芯片。,TAP状态机,测试访问端口TAP控制器是一个16状态的有限状态机,为JTAG提供控制逻辑。状态转移图如右图:,JTAG接口控制指令,控制指令用于控制JTAG接口各种操作,控制指令包括公用(Public)指令和私有(Private)指令。最基本的公用指令有:BYPASS:旁路片上系统逻辑指令,用于未被测试的芯片,即把TDI与TPO旁路(1个时钟延迟)。EXTEST:片外电路测试指令,用于测试电路板上芯片之间的互连。IDCODE:读芯片ID码指令,用于识别电路板上的芯片。此时,ID寄存器在TDI与TDO引脚之间,在captureDR状态中,芯片的ID复制至该寄存器,然后在shiftDR状态中移出。INTEST:片内测试指令,边界扫描寄存器位于TDI与TDO引脚之间,处理器核逻辑输入和输出状态被该寄存器捕获和控制。,2.1.3ARM处理器内核,ARM体系结构的处理器内核有:ARM7TDMI、ARM8、ARM9TDMI、ARM10TDMI及ARM11TDMI等。,ARM7TDMI,ARM7TDMI名字原义如下:ARM7ARM632位整数核的3V兼容的版本;T16位压缩指令集Thumb;D在片调试(Debug)支持,允许处理器响应调试请求暂停;M增强型乘法器(Multiplier),与以前处理器相比性能更高,产生全64位结果;I嵌入式ICE硬件提供片上断点和调试点支持。,ARM7TDMI,体系结构图,ScanChain133个扫描单元,包括数据总线和一个断点控制信号。,ScanChain0113个扫描单元,包括ARM所有的I/O,地址/数据总线和输入/输出控制信号。此链很复杂,不易控制,但包含信息丰富,可通过它得到ARM7TDMI内核的所有信息。,ScanChain238个扫描单元,通过控制EmbeddedICE宏单元,实现对ARM进行指令的断点、观察点的控制。,ARM7TDMI,引脚图,ARM7TDMI-接口,存储器接口中断调试接口协处理器接口,ARM7TDMI-存储器接口,MCLK,nWAIT,A31:0,D31:0,nMREQ,SEQ,nRW,LOCK,ABE,DBE,nTRANS,ABORT,ClocksandClockControl,MemoryManagement,MemoryInterface,DataandAddress,BusControl,MemoryAccessControl,nM4:0,MAS1:0,BL3:0,APE,ALE,TBE,ECLK,TBIT,BUSEN,nENIN,BIGEND,ARM7TDMI,nENOUT,ARM7TDMI-存储器接口,MCLK输入处理器工作的时钟。静态设计的ARM通过延长时钟周期来访问慢速的设备。nWAIT输入在ARM内部与MCLK相与。必须在MCLK为低的相位阶段改变。容许该信号从一个周期扩展到另一个周期,延长总线访问周期。ECLK输出核心逻辑的时钟的输出。在正常和调试状态下反映内部时钟。ph1R0R1+R2这条指令将2个寄存器(R1和R2)的内容相加,结果放入第3个寄存器R0中。必须注意写操作数的顺序,第1个是结果寄存器,然后是第一操作数寄存器,最后是第二操作数寄存器。,立即寻址,立即寻址是一种特殊的寻址方式,指令中在操作码字段后面的地址码部分不是通常意义上的操作数地址,而是操作数本身。这样的数称为立即数。例如指令:ADDR3,R3,#1;R3R3+1ANDR8,R7,#0 xff;R8R77:0第2个源操作数为一个立即数,以“#”为前缀,十六进制值以在“#”后加“0 x”或“R3R2+8R1寄存器R1的内容逻辑左移3位,再与寄存器R2内容相加,结果放入R3中。,可以采取的移位操作如有:,LSL:逻辑左移(LogicalShiftLeft)。寄存器中字的低端空出的位补0。,LSR:逻辑右移(LogicalShiftRight)。寄存器中字的高端空出的位补0。,可以采取的移位操作如有:,寄存器移位寻址,ASR:算术右移(ArithmeticShiftRight)。算术移位的对象是带符号数,若源操作数为正数,则字的高端空出的位补0。若源操作数为负数,则字的高端空出的位补1。,RRX:扩展为1的循环右移(RotateRighteXtendedby1place)。操作数右移一位,空位(位31)用原C标志值填充。,ROR:循环右移(ROtateRight)。从字的最低端移出的位填入字的高端空出的位。,寄存器间接寻址,指令中的地址码给出某一通用寄存器的编号。在被指定的寄存器中存放操作数的有效地址,而操作数则存放在存储单元中,即寄存器为地址指针。例如指令:LDRR0,R1;R0R1STRR0,R1;R0R1寄存器间接寻址使用一个寄存器(基址寄存器)的值作为存储器的地址。第1条指令将寄存器R1指向的地址单元的内容加载到寄存器R0中。第2条指令将寄存器R0存入寄存器R1指向的地址单元。,变址寻址,变址寻址就是将基址寄存器的内容与指令中给出的位移量相加,形成操作数有效地址。变址寻址用于访问基址附近的存储单元,包括基址加偏移和基址加索引寻址。寄存器间接寻址是偏移量为0的基址加偏移寻址。,基址加偏移寻址,基址加索引寻址,前索引寻址方式:基址需加(或减)最大4KB的偏移来计算访问的地址。例如:LDRR0,R1,#4;R0R1+4后索引寻址方式:基址不带偏移作为传送的地址,传送后自动索引。例如:LDRR0,R1,#4;R0R1;R1R1+4,指令指定一个基址寄存器,再指定另一个寄存器(索引),其值作为位移加到基址上形成存储器地址。例如:LDRR0,R1,R2;R0R1+R2,多寄存器寻址,一次可以传送几个寄存器的值。允许一条指令传送16个寄存器的任何子集(或所有16个寄存器)。例如指令:LDMIAR1,R0,R2,R5;R0R1;R2R1+4;R5R1+8由于传送的数据项总是32位的字,基址R1应该字对准。这条指令将R1指向的连续存储单元的内容送到寄存器R0、R2和R5。,堆栈寻址,堆栈是按“先进后出”(FILO)的特定顺序进行存取的存储区。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储器区域(堆栈)。栈指针所指定的存储单元就是堆栈的栈顶。根据增长方向,堆栈可分为:向上生长:即向高地址方向生长,称为递增堆栈(AscendingStack)。向下生长:即向低地址方向生长,称为递减堆栈(DescendingStack)。根据栈指针的指向位置,堆栈可分为:满堆栈:堆栈指针指向最后压入堆栈的有效数据项空堆栈:堆栈指针指向下一个数据项放入的空位置,,这样就有4种类型的堆栈表示递增和递减的满和空堆栈的各种组合。ARM处理器支持所有这4种类型的堆栈。满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置。满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址。空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。,堆栈寻址,块复制寻址,ARM支持两种不同角度的寻址机制:堆栈角度和块复制角度,两者都映射到相同的基本指令。堆栈和块拷贝角度的多寄存器加载和存储指令映射如下图。,块复制角度的寻址举例,执行指令之前的基址寄存器值是R9,自动寻址之后的基址寄存器是R9。,块复制寻址,相对寻址,相对寻址是变址寻址的一种变通,由程序计数器PC提供基地址。指令中的地址码字段作为位移量,两者相加后得到操作数的有效地址。位移量指出的是操作数与现行指令之间的相对位置。例如指令:BLSUBR;转移到SUBR;返回到此SUBR;子程序入口地址MOVPC,R14;返回,主要内容,1,3,2,4,ARM体系结构概述,编程模型,ARM基本寻址方式,ARM指令集,5,ARM9TDMI内核,6,ARM9与ARM7的比较,ARM920T核,7,129,名词解释:机器指令、伪指令、宏指令机器指令被处理器直接执行,伪指令和宏指令不能。机器指令包括ARM指令集和Thumb指令集;伪指令是在源程序汇编期间,由汇编编译器处理。其作用是为汇编程序完成准备工作;宏指令在程序中用于调用宏,宏是一段独立的程序代码;在程序汇编时,对宏调用进行展开,用宏体代替宏指令。,2.4.0ARM指令集概述,130,指令:是规定计算机进行某种操作的命令。指令系统:计算机能够执行的各种指令的集合。,ARM指令集概念,131,所有指令都是32位的。大多数指令都在单周期内完成。所有指令都可以条件执行。ARM指令为load/store类型。基本指令仅36条,分成5+1类。有9种寻址方式。指令集可以通过协处理器扩展。,ARM指令的特点,132,ARM指令为load/store类型。也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。,ARM指令的特点,133,ARM指令可以分为5类机器指令。5类机器指令:存储器访问(6个)数据处理(16个算术逻辑、6个乘法、1个前导零)跳转(4个)协处理器指令(7个)杂项指令(4个)ARM伪指令,ARM指令的特点,134,ARM指令的格式,ARM指令基本的语法格式为:s,Opcode:指令操作码。cond:指令的条件码。S:决定指令的操作是否影响cpsr的值。Rd:目标寄存器编码。Rn:包含第一个操作数的寄存器编码。Operand2:第2操作数。内是必需的内是可选的,135,ARM指令的格式,LDRR0,R1;读取R1地址上的存储器单元内容,;执行条件ALBEQDATAEVEN;跳转指令,执行条件EQ,即相等;跳转到DATAEVENADDSR1,R1,#1;加法指令,R1+1=R1影响CPSR;寄存器,带有SSUBNESR1,R1,#0 xD;条件执行减法运算(NE),;R1-0 xD=R1,影响;CPSR寄存器,带有S,136,ARM指令的格式,ARM指令典型的编码格式为:(数据处理指令类),2.4.1条件执行,条件码的位数和位置:几乎每条ARM指令都可以包含4位条件码域,它占用指令编码的最高四位31:28。条件码的表示:条件编码共2416种,其中,15种用于指令的条件码。每种条件码用2个英文缩写字符表示。,2.4.1条件执行,带条件指令的执行:ARM处理器根据指令的执行条件是否满足,决定当前指令是否执行。只有在cpsr中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOP指令)。条件码的书写方法:条件码的位置在指令助记符的后面(因此也称为条件后缀)。例如:MOVEQR0,R1,2.4.1条件执行,2.4.2指令分类说明,32位ARM指令集由13种基本指令类型组成,分成5类机器指令及ARM伪指令:3种类型的存储器访问指令:控制存储器和寄存器之间的数据传送。3种类型的数据处理指令:使用片内ALU、桶形移位器和乘法器针对31个寄存器完成高速数据处理操作。4种类型的分支指令:控制程序执行流程、指令优先级以及ARM代码和Thumb代码的切换。3种类型的协处理器指令:专用于控制外部协处理器。这些指令以开放和统一的方式扩展了指令集的片外功能。杂项指令:软中断指令、程序状态指令ARM伪指令,ARM存储器访问指令,(1)LDR和STR字和无符号字节,字节加载是用“0”扩展到32位。LDR和STR都有如下4种可能的形式:零偏移:Rn的值作为传送数据的地址。句法:opcondBTRd,Rn前索引偏移:在数据传送之前,将偏移量加到Rn中。其结果作为传送数据的存储器地址。若使用后缀“!”,则结果写回到Rn中,且Rn不允许是R15。句法:opcondBRd,Rn,Flexoffset!,ARM存储器访问指令,(1)LDR和STR字和无符号字节,程序相对偏移:程序相对偏移是前索引形式的另一种版本。汇编器由PC计算偏移量,并将PC作为Rn生成前索引指令。不能使用后缀“!”。句法:opcondBRd,label后索引偏移:Rn的值用做传送数据的存储器地址。在数据传送后,将偏移量加到Rn中。结果写回到Rn。Rn不允许是R15。句法:opcondBTRd,Rn,Flexoffset,ARM存储器访问指令,(1)LDR和STR字和无符号字节,例子LDRR8,R0LDRNER2,R5,#960!STRR2,R9,#consta-strucSTRBR0,R3,-R8,ASR#2STRR5,R7,#-8LDRR0,localdata,;R8R0,;(有条件地)R2R5+960,;R5R5+960,;consta-struc是常量的表达式,该常量值的范围为04095,;R0R3-R8/4,存储R0的最低有效字节,R3和R8不变,;R5R7,R7R7-8,;加载一个字,该字位于标号lacaldata所在地址,(2)LDR和STR半字和带符号字节,ARM存储器访问指令,这些指令有4种可能的形式:零偏移、前索引偏移、程序相对偏移和后索引偏移。以同样的顺序,4种形式的句法为opcondtypeRd,RnopcondtypeRd,Rn,offset!opcondtypeRd,labelopcondtypeRd,Rn,offset其中:type必须是以下所列的其中之一:SH对带符号半字(仅LDR);H对无符号半字;SB对带符号字节(仅LDR)。label程序相对偏移表达式。label必须是在当前指令的255字节范围内。offset加在Rn上的偏移量。,ARM存储器访问指令,(2)LDR和STR半字和带符号字节,例子LDREQSHR11,R6LDRHR1,R0,#22STRHR4,R0,R1!LDRSBR6,constf,;(有条件地)R11R6,加载16位半字,带符号扩展到32位,;R1R0+22,加载16位半字,零扩展到32位,;R4R0+R1,存储最低的有效半字到R0+R1地址开始的两个字节,地址写回到R0,;加载位于标号constf地址中的字节,带符号扩展,(3)LDR和STR双字,ARM存储器访问指令,加载两个相邻的寄存器和存储两个相邻的寄存器,64位双字。这些指令有4种可能的形式:零偏移、前索引偏移、程序相对偏移、后索引偏移。以同样的顺序,4种形式的句法为opcondDRd,RnopcondDRd,Rn,offset!opcondDRd,labelopcondDRd,Rn,offset,例子LDRDR6,R11LDRMIDR4,R7,R2STRDR4,R9,#24STRDR0,R9,-R2!LDREQDR8,abc4,Rd加载或存储寄存器其中一个,另一个为R(d+1),d必需为偶数且不是14。,(4)LDM和STM,ARM存储器访问指令,加载多个寄存器(LDM)和存储多个寄存器(STM)。可以传送R0-R15的任何组合。句法:opcondmodeRn!,reglist其中:mode是IA/IB/DA/DB/FD/ED/FA/EA中的一个.Rn基址寄存器,装有传送数据的初始地址。Rn不允许是R15。!可选后缀。若有“!”,则最后的地址写回到Rn。reglist加载或存储的寄存器列表,包含在括号中。可选后缀,不允许在用户模式或系统模式下使用。若op是LDM且reglist中包含PC(R15),那么除了正常的多寄存器传送外,将SPSR也拷贝到CPSR中。这用于从异常处理返回,仅在异常模式下使用。数据传入或传出的是用户模式的寄存器,而不是当前模式的寄存器。,ARM存储器访问指令,(4)LDM和STM,例子LDMIAR8,R0,R2,R9STMDBR1!,R3-R6,R11,R12STMFDR13!,R0,R4-R7,LR;寄存器进栈LDMFDR13!,R0,R4-R7,PC;寄存器出栈,从子程序返回,注意:低编号寄存器总是被保存在低地址,(5)PLD,ARM存储器访问指令,Cache预加载。使用PLD(PreLoaD)提示存储系统从后面几条新指令所指定的存储器地址加载。存储系统可使用这种方法加速以后的存储器访问。句法:PLDRnFlexoffset例子PLDR2PLDR15,#280PLDR9,#-2481PLDR0,#av*4;av*4必须在汇编时求值,范围为-4095-4095PLDR0,R2PLDR5,R8,LSL#2,PreloadDataandPreloadInstruction.Theprocessorcansignalthememorysystemthatadataorinstructionloadfromanaddressislikelyinthenearfuture.,(6)SWP,ARM存储器访问指令,在寄存器和存储器之间进行数据交换。使用SWP来实现信号量。句法:SWPcondBRd,Rm,Rn其中:B可选后缀。若有B,则交换字节;否则,交换32位字。RdARM寄存器。数据从存储器加载到Rd。RmARM寄存器。Rm的内容存储到存储器。Rm可以与Rd相同。在这种情况下,寄存器的内容与存储器的内容进行交换。RnARM寄存器。Rn的内容指定要进行数据交换的存储器的地址。Rn必须与Rd和Rm不同。,ARM数据处理指令,数据处理类指令格式:SRd,Rn,opcode:操作码,如ADD、SUB、ORRcond:条件码S:本指令是否更新CPSR中的状态标志位Rd:目标寄存器Rn:第一个源寄存器shifter_operand:复合的源操作数,其格式:立即数ADDR1,R2,#0 x35立即数只能是一个8位数循环右移偶数位得到的32位数寄存器SUBSR3,R2,R1寄存器移位ADDEQSR9,R5,R5,LSL#3SUBR3,R2,R1,RORR7,ARM数据处理指令,算术/逻辑运算指令,ARM数据处理指令,前导零计数,CLZ指令对Rm中值的前导零的个数进行计数,结果放到Rd中。若源寄存器全为0,则结果为32。若位31为1,则结果为0。句法:CLZcondRd,Rm,ARM数据处理指令,乘法指令,MUL指令将Rm和Rs中的值相乘,并将最低有效的32位结果放到Rd中。句法:MULcondSRd,Rm,RsMLA指令将Rm和Rs中值相乘,再加上Rn的值,并将最低有效的32位结果放到Rd中。句法:MLAcondSRd,Rm,Rs,Rn,ARM数据处理指令,乘法指令,UMULL指令将Rm和Rs中的值解释为无符号整数。该指令将这两个整数相乘,并将结果的最低有效32位放在RdLo中,最高有效32位放在RdHi中。UMLAL指令将Rm和Rs中的值解释为无符号整数。该指令将这两个整数相乘,并将64位结果加到RdHi和RdLo中的64位无符号整数上。,句法:opcondSRdLo,RdHi,Rm,Rs,ARM数据处理指令,乘法指令,SMULL指令将Rm和Rs中的值解释为带符号的补码整数。该指令将这两个整数相乘,并将结果的最低有效32位放在RdLo中,将最高有效32位放在RdHi中。SMLAL指令将Rm和Rs中的值解释为带符号的补码整数。该指令将这两个整数相乘,并将64位结果加到RdHi和RdLo中的64位带符号补码整数上。句法:opcondSRdLo,RdHi,Rm,Rs,ARM转移指令,(1)B和BLB(Branch)指令引起处理器转移到label。句法:BcondlabelBL(BranchandLink)指令将下一条指令的地址拷贝到R14(LR,链接寄存器),并引起转移到label。句法:BLcondlabel(2)BX:引起处理器转移到Rm中的地址。若Rm的位0为1,则指令集变换到Thumb。句法:BXcondRm(3)BLX:带链接转移并可选地交换指令集。句法:BLXcondRmBLXlabel,ARM协处理器指令,(1)CDP,协处理器数据操作指令句法:CDPcondcoproc,opcode1,CRd,CRn,CRm,opcode2其中:coproc指令操作的协处理器名。标准名为pn,其中n为0-15范围内的整数。opcode1协处理器特定操作码。CRd,CRn,CRm协处理器寄存器。opcode2可选的协处理器特定操作码。(2)MCR和MCRR,将数据从ARM寄存器传送到协处理器句法:MCRcondcoproc,opcode1,Rd,CRn,CRm,opcode2MCRRcondcoproc,opcode1,Rd,Rn,CRm,(3)MRC和MRRC,从协处理器传送到ARM寄存器句法:MRCcondcoproc,opcode1,Rd,CRn,CRm,opcode2MRRCcondcoproc,opcode1,Rd,Rn,CRm(4)LDC和STC,在存储器和协处理器之间传送数据。这些指令有3种可能形式:零偏移、前索引偏移、后索引偏移。相应句法为:opcondLcoproc,CRd,RnopcondLcoproc,CRd,Rn,#-offset!opcondLcoproc,CRd,Rn,#-offset其中:L可选后缀,指明是长整数传送。coproc指令操作的协处理器名。CRd用于加载或存储的协处理器寄存器。Rn存储器基址寄存器。若指定R15,取值是当前指令地址加8。offset表达式,其值为4的整倍数,范围在01020之间。,ARM协处理器指令,杂项ARM指令,(1)SWI,引起软件中断。这意味着处理器模式变换为管理模式,CPSR保存到管理模式的SPSR中,执行转移到SWI向量。句法:SWIcondimmed_24其中:immed_24为表达式,其值为0224-1范围内的整数。(2)MRS,将CPSR或SPSR的内容传送到通用寄存器。句法:MRScondRd,psr其中:Rd目标寄存器。Rd不允许为R15。psrCPSR或SPSR。(3)MSR,用立即数或通用寄存器的内容加载CPSR或SPSR的指定区域。句法:MSRcond_,#immed_8rMSRcond_,Rm其中:CPSR或SPSR。指定传送的区域。immed_8r值为数字常量的表达式。常量必须对应于8位位图在32位字中循环移位偶数位后的值。Rm源寄存器。(4)BKPT,引起处理器进入调试模式。句法:BKPTimmed_16其中:immed_16为表达式,其值为范围在065536内的整数。,ARM伪指令,(1)ADR,将程序相对偏移或寄存器相对偏移地址加载到寄存器中。句法:ADRcondregister,expr其中:register加载的寄存器expr程序相对偏移或寄存器相对偏移表达式(2)ADRL,将程序相对偏移或寄存器相对偏移地址加载到寄存器中。ADRL因为产生2个数据处理指令,比ADR可以加载更宽范围的地址。句法:ADRcondregister,expr,ARM伪指令,(3)LDR,用32位常量或一个地址加载寄存器。句法:LDRcondregister,=expr|label-expr其中:register加载的寄存器。expr赋值成数字常量。label-expr程序相对偏移或外部表达式。汇编器将label-expr的值放入文字池,并产生一条程序相对偏移的LDR指令从文字池中加载值。(4)NOPNOP产生所需的ARM无操作代码。NOP(NoOPeration)不能有条件使用。执行和不执行无操作指令是一样的,因而不需要有条件执行。ALU状态标志不受NOP影响。,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,ADRcondregister,expr,ADR伪指令格式,指令执行的条件码,加载的目标寄存器,地址表达式,地址表达式expr的取指范围:当地址值是字节对齐时,其取指范围为-255255;当地址值是字对齐时,其取指范围为-10201020;,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,.ADRR1,Delay.DelayMOVR0,r14.,应用示例(源程序):,使用伪指令将程序标号Delay的地址存入R0,.0 x20ADDr1,pc,#0 x3c.0 x64MOVr0,r14.,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,.ADRLR1,Delay.DelayMOVR0,r14.,应用示例(源程序):,编译后的反汇编代码:,使用伪指令将程序标号Delay的地址存入R0,地址,程序代码,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能,若不能用一条指令实现,则产生错误,编译失败。,.ADRLR1,Delay.DelayMOVR0,r14.,应用示例(源程序):,.0 x20ADDr1,pc,#0 x3c.0 x64MOVr0,r14.,编译后的反汇编代码:,使用伪指令将程序标号Delay的地址存入R0,ADR伪指令被汇编成一条指令,ARM伪指令小范围的地址读取,ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。在汇编编译器编译源程序时,AD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三只猴子课件图谱
- 三句半科普课件
- 医药行业高级面试题库:医药领域人才招聘题目与答案分享
- 高级导购电商岗位求职实战模拟题库
- 社区心理学家面试常见问题及答案
- 如何制定寒假学习计划
- 夫妻分居协议书
- 大学生餐厅服务员实习总结 -管理资料
- 大学生法院实习心得体会
- 求职技能提升计划:面试必 备:阳光国际面试题目的求职技巧
- 煤矿项目部管理制度
- 小红书种草营销师(初级)认证考试题库(附答案)
- GB/T 45089-20240~3岁婴幼儿居家照护服务规范
- 康复治疗颈椎病
- DB36T+2031-2024高弹沥青超薄罩面施工技术规范
- 2024桥式门式起重机大修项目及其技术标准
- 【部编】人教版六年级上册道德与法治全册知识点总结梳理
- 电动汽车V2G技术
- 2023风光互补路灯设计方案
- jgj592023安全检查标准完整版
- 2022年临沧市市级单位遴选(选调)考试试题及答案
评论
0/150
提交评论