ARM体系结构与指令系统.ppt_第1页
ARM体系结构与指令系统.ppt_第2页
ARM体系结构与指令系统.ppt_第3页
ARM体系结构与指令系统.ppt_第4页
ARM体系结构与指令系统.ppt_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

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

文档简介

第二章ARM体系结构与指令系统,合肥学院电子信息与电气工程系干开峰,目录,2.1ARM体系结构2.2ARM指令系统,2.1ARM体系结构,2.1.1ARM体系结构概述2.1.2ARM存储结构2.1.3ARM处理器模式2.1.4ARM寄存器2.1.5ARM异常中断,2.1.1ARM体系结构概述,一、ARM体系结构特点1、总体思想:在不牺牲性能的同时,尽量简化处理器。同时从体系结构的层面上灵活支持处理器扩展。这种简化和开放的思路使得ARM处理器采用了很简单的结构来实现。,2.1.1ARM体系结构特点,2、RISC型处理器结构ARM采用RISC结构,在简化处理器结构,减少复杂功能指令的同时,提高了处理器的速度。RISC型处理器采用了Load/Store(加载/存储)结构,即只有Load/Store指令可与存储器打交道,其余指令都不允许进行存储器操作。RISC型处理器增加了指令高速缓冲I-Cache和数据高速缓冲D-Cache及多处理器结构,使指令的操作尽可能在寄存器之间进行。,CISC与RISC的比较,2.1.1ARM体系结构特点,3、Thumb指令集新型的ARM体系结构中定义了16位的Thumb指令集。Thumb指令集比通常的8/16位CISC/RISC处理器有更好的代码密度,而芯片面积只增加6%,却可以使程序存储器更小。,2.1.1ARM体系结构特点,4、多处理器状态模式ARM体系结构定义了7种处理器模式:用户(usr)、快中断(fiq)、中断(irq)、管理(svc)、终止(abt)、未定义(und)和系统(sys),大大提高了ARM处理器的效率。5、两种处理器工作状态ARM状态(执行32位ARM指令)和Thumb状态(执行16位Thumb指令)。,2.1.1ARM体系结构特点,6、嵌入式在线仿真调试ARM体系结构的处理器芯片都嵌入了在线仿真ICE-RT逻辑,便于通过JTAG来仿真调试芯片,省去了价格昂贵的在线仿真器。7、灵活方便的接口ARM体系结构具有协处理器接口,允许接16个协处理器。既可以使基本的ARM处理器内核尽可能小,方便地扩充ARM指令集,也可以通过未定义指令来支持协处理器的软件仿真。,2.1.1ARM体系结构特点,8、低电压功耗的设计考虑到ARM体系结构的处理器主要用于手持式嵌入式系统中,ARM体系结构在设计中就十分注意功耗的设计。,2.1.1ARM体系结构特点,二、ARM流水线结构1、流水线方式:是把一个重复的过程分解为若干个子过程,每个子过程可以与其他子过程同时进行。处理器按照一系列步骤来执行每一条指令。,2.1.1ARM体系结构特点,典型的步骤为:1)从存储器读取指令(fetch)2)译码以鉴别它是哪一类指令(dec)3)从寄存器组取得所需的操作数(reg)4)将操作数进行组合以得到结果或存储器地址(exe)5)如果需要,则访问存储器存取数据(mem)6)将结果回写到寄存器组(res),2.1.1ARM体系结构特点,2、ARM7的三级流水线取指:从程序存储器中取指令,放入指令流水线。(占用存储器访问操作)译码:指令译码。(占用译码逻辑)执行:执行指令/读写REG。(占用ALU及数据路径),2.1.1ARM体系结构特点,3、ARM9TDMI的五级流水线,2.1.1ARM体系结构特点,4、ARM7和ARM9流水线比较5级流水线的ARM9内核是哈佛架构,拥有独立的指令和数据总线;指令和数据的读取可以在同一周期进行;3级流水的ARM7内核是指令和数据总线复用的冯.诺依曼架构,指令和数据的读取不能在同一周期进行;5级流水线设计把寄存器读取、逻辑运算、结果回写分散在不同的流水当中,每一级流水的操作简洁,提升了处理器的主频。,2.1.1ARM体系结构特点,随着流水线深度(级数)的增加,每一段的工作量被削减了,这使得处理器可以工作在更高的频率,同时改进了处理器的性能;负面作用是增加了系统的延时,即内核在执行一条指令前,需要更多的周期来填充流水线;流水线级数的增加也意味着在某些段之间会产生数据相关。,ARM处理器性能比较,2.1.1ARM体系结构特点,三、ARM总线结构ARM微控制器使用的是AMBA总线体系结构1、AHB总线(AdvancedHigh-performanceBus):用于连接高性能系统模块。它支持突发数据传输方式及单个数据传输方式,所有时序参考同一个时钟沿。,2.1.1ARM体系结构特点,2、ASB总线(AdvancedSystemBus):用于连接高性能系统模块,它支持突发数据传输模式。3、APB总线(AdvancePeripheralBus):是一个简单接口支持低性能的外围接口。,2.1.2ARM存储结构,一、ARM存储数据类型1、ARM处理器支持以下6种数据类型:8位有符号和无符号字节(Byte)。16位有符号和无符号半字(Halfword)它们必须以两字节的边界对齐(半字对齐)。半字对齐:半字单元地址的最低位A0=0b0(地址末位为0 x0,0 x2,0 x4,0 x6,0 x8,0 xa,0 xc,0 xe)。32位有符号和无符号字(word)它们必须以4字节的边界对齐(字对齐)。单元地址的低两位A1A0=0b00。即地址末位为0 x0,0 x4,0 x8,0 xc。,2、对于指令,ARM指令系统分为32位ARM指令集和16位的Thumb指令集,在存储时分别以32位和16位的两种不同长度存储。3、对于数据,ARM支持对32位字数据,16位半字数据,8位字节数据操作。因此数据存储器可以存储32位,16位,8位三种不同长度数据。4、在ARM内部,所有操作都面向32位的操作数,只有数据传送指令支持较短的字节和半字的数据类型。当从存储器读入一个字节或半字时,根据其数据类型将其扩展到32位。,2.1.2ARM存储结构,二、ARM存储器组织1、ARM存储器以8位为一个单元存储数据(一个字节),每个存储单元分配一个存储地址。ARM将存储器看作是从零地址开始的字节的线性组合。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。2、ARM体系结构可以用两种方法存储字数据,称为大端格式和小端格式。,2.1.2ARM存储结构,2.1.2ARM存储结构,大端格式(big-endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。小端格式(low-endian):与大端存储格式相反。低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。缺省设置为小端格式。,三、ARM存储器层次微处理器希望存储器容量大、速度快。但容量大者速度慢;速度快者容量小。解决方法是构建一个由多级存储器组成的复合存储器系统。,2.1.2ARM存储结构,多级存储器系统,寄存器组访问时间约为几个ns。片上RAM与片外RAM比速度快、功耗小、容量小。读写时间约为几个ns。片上Cache832KB,访问时间约为十几个ns。主存储器一般为几兆字节1GB的动态存储器,访问时间约50ns。,2.1.2ARM存储结构,CPU,寄存器组,片上RAM,片上Cache,主存储器,硬盘,寄存器组,片上RAM,片上Cache,主存储器,硬盘,寄存器组,片上RAM,片上Cache,主存储器,2.1.3ARM处理器模式,一、ARM处理器工作状态1、有两种工作状态:ARM状态:处理器执行32位的字对齐的ARM指令;Thumb状态:处理器执行16位的半字对齐的Thumb指令。2、两种状态可以切换:程序执行过程中,通过执行带状态切换的分支指令BX,随时在两种工作状态之间进行切换。并且,处理器工作状态的转变,并不影响处理器的工作模式和相应寄存器中的内容。,2.1.3ARM处理器模式,二、ARM处理器工作模式1、ARM9的7种工作模式(1)用户模式(usr):非特权模式,大部分任务执行在这种模式。正常程序执行的模式(2)快速中断模式(fiq):当一个高优先级(fast)中断产生时将会进入这种模式。高速数据传输或通道处理(3)外部中断模式(irq):当一个低优先级(normal)中断产生时将会进入这种模式。通常的中断处理(4)管理模式(svc):当复位或软中断指令执行时将会进入这种模式。供操作系统使用的一种保护模式,2.1.3ARM处理器模式,(5)中止模式(abt):当存取异常时将会进入这种模式虚拟存储及存储保护(6)未定义模式(und):当执行未定义指令时会进入这种模式软件仿真硬件协处理器(7)系统模式(sys):供需要访问系统资源的操作系统任务使用特权级的操作系统任务,2.1.3ARM处理器模式,2、模式分类及特点(1)用户模式特点:应用程序不能够访问受操作系统保护的系统资源。应用程序不能进行处理器模式的切换。(2)系统模式特点:不属于异常模式,不是通过异常进入的。系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行模式的切换。它主要供操作系统使用。(3)特权模式及其特点:特权模式:除用户模式之外的工作模式又称为特权模式特点:应用程序可以访问所有的系统资源可以任意地进行处理器模式的切换,2.1.3ARM处理器模式,(4)异常模式及其特点:异常模式:除用户模式、系统模式之外的五种模式称为异常模式。特点:以各自的中断或异常方式进入,并且处理各自的中断或异常。对管理模式(svc)进入方式和处理内容有:系统上电复位后进入管理模式,运行系统初始化程序,如中断允许/禁止,主时钟设置,SDRAM配置,各个功能模块初始化等。当执行软件中断指令SWI时,进入管理模式。,2.1.3ARM处理器模式,3、处理器模式的切换方式:软件控制进行切换。通过外部中断和异常进行切换处理器启动时的模式转换图,管理模式(Supervisor),多种特权模式变化,用户程序的运行模式,复位后的缺省模式,主要完成各模式的堆栈设置,注意不要进入用户模式,一般为用户模式User,2.1.4ARM寄存器,一、ARM寄存器概述ARM处理器v4及以上版本有37个32位的寄存器其中31个为通用寄存器;6个为状态寄存器。31个通用寄存器R0R15;R13_svc、R14_svc;R13_abt、R14_abt;R13_und、R14_und;R13_irq、R14_irq;R8_fiq-R14_fiq6个状态寄存器CPSRSPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq,2.1.4ARM寄存器,每一类处理器模式都有一组相应的寄存器组;在任意的处理器模式下,可见的寄存器包括15个通用寄存器(R0R14)、1个或2个状态寄存器和程序寄存器。带灰色底纹的单元格表示,用户模式或系统模式使用的一般寄存器,已被异常模式特定的另一寄存器所替代。,2.1.4ARM寄存器,二、ARM通用寄存器通用寄存器包括R0R15,可以分为三类:1、未分组寄存器R0R7在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,是真正的通用寄存器。,2.1.4ARM寄存器,2、分组的寄存器R8R14(1)R8R12对于R8R12,每一次所访问的物理寄存器,与处理器当前的工作模式有关。当处理器工作于fiq模式时,访问的寄存器为R8_fiqR12_fiq;除fiq模式以外的其他模式,访问的寄存器为R8_usrR12_usr。(2)R13和R14:每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器,对应于其他5种不同的异常模式。采用以下的记号来区分不同的物理寄存器:R13_R14_其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。,2.1.4ARM寄存器,R13:寄存器R13在ARM指令中常用作堆栈指针SP。但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。R14:寄存器R14也称作子程序链接寄存器(SubroutineLinkRegister)或链接寄存器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。,2.1.4ARM寄存器,3、程序计数器PC(R15)(1)寄存器R15用作程序计数器(PC)。在ARM状态下,位1:0为0,位31:2用于保存PC;在Thumb状态下,位0为0,位31:1用于保存PC;(2)使用R15时注意:虽然R15可以用作通用寄存器,但是有一些指令在使用R15时有一些特殊限制,若不注意,执行的结果将是不可预料的。所以,一般不这么使用。(3)关于PC的值:由于ARM采用多级流水线技术,所以PC总是指向正在取指的指令,而不是正在执行的指令。也即PC总是指向当前指令的下两条指令的地址。因此,对于ARM指令集而言,PC的值为当前指令的地址值加8个字节。,2.1.4ARM寄存器,三、ARM状态寄存器1、两种程序状态寄存器在ARM微处理器中,有CPSR和SPSR两种程序状态寄存器。(1)当前程序状态寄存器CPSR(CurrentProgramStatusRegister)用来保存当前程序状态的寄存器。所有处理器模式下都可以访问当前程序状态寄存器CPSR。仅一个CPSR。(2)保存程序状态寄存器SPSR_mode(SavedProgramStatusRegister)SPSR_mode用来进行异常处理,其功能包括:保存ALU中的当前操作信息当异常发生时,用来保存CPSR的值,从异常返回时,将SPSR_mode复制到CPSR中,恢复CPSR的值。控制允许和禁止中断修改SPSR的值设置处理器的运行模式修改SPSR的值,2.1.4ARM寄存器,2、ARM状态寄存器的格式(1)条件码标志位(保存ALU中的当前操作信息)N:正负号/大小标志位0表示:正数/大于;1表示:负数/小于Z:零标志位0表示:结果不为零;1表示:结果为零C:进位/借位/移出位0表示:未进位/借位/移出0;1表示:进位/未借位/移出1V:溢出标志位0表示:结果未溢出;1表示:结果溢出,2.1.4ARM寄存器,(2)控制位I、F中断控制位控制允许和禁止中断I1禁止IRQ中断I0允许IRQ中断F1禁止FIQ中断F0允许FIQ中断T控制(标志)位反映处理器的运行状态T=1时,程序运行于Thumb状态T=0时,程序运行于ARM状态M控制位决定了处理器的运行模式当发生异常时这些位被改变。如果处理器运行在特权模式,这些位也可以由程序修改。,2.1.4ARM寄存器,(3)保留位CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。,2.1.4ARM寄存器,四、Thumb状态寄存器组织Thumb状态下的寄存器集是ARM状态下寄存器集的子集。程序员可以直接访问8个通用的寄存器(R0R7),程序计数器PC、堆栈指针SP、链接寄存器LR和当前状态寄存器CPSP。,2.1.5ARM异常中断,一、异常和中断概念1、中断当CPU正在执行程序时,系统发生了一件急需处理的事件,CPU暂时停下正在执行的程序,转去处理相应的事件,事件处理完后,CPU再返回执行原来的程序,这种情况称为中断。中断事件:引起CPU产生中断、并且与CPU当前所执行的程序无关的、由外部硬件产生的事件,也叫中断源。中断事件也常称为外中断。,2.1.5ARM异常中断,2、异常是指CPU在执行指令时出现的错误,即不正常的情况。异常是与当前所执行的程序有关的。如存取数据或指令错误、计算结果溢出等。异常的处理:也用中断的方式进行处理。,二、ARM有7种异常1、复位处理器上一旦有复位输入,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,从地址0 x00000000或0 xFFFF0000开始执行指令。2、未定义指令异常当ARM处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。,2.1.5ARM异常中断,3、软件中断异常该异常由执行SWI指令产生,可使用此机制进行软件仿真。4、预取中止(取指令存储器中止)若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。5、数据中止(访问数据存储器中止)若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。,2.1.5ARM异常中断,6、IRQ异常当处理器的外部中断请求引脚有效,且CPSR中的I=0,产生IRQ异常。系统的外设可通过该异常请求中断服务。7、FIQ异常当处理器的外部中断请求引脚有效,且CPSR中的F=0,产生FIQ异常。FIQ支持数据传送和通道处理,并有足够的私有寄存器,从而在应用中可避免对寄存器保存的需求,减少了开销。,2.1.5ARM异常中断,三、ARM的异常中断响应过程1、进入异常当发生异常时,除了复位异常立即中止当前指令外,处理器尽量完成当前指令,然后脱离当前的程序去处理异常。ARM处理器对异常中断的响应过程如下:(1)保存返回地址将引起异常指令的下一条指令的地址保存到新的异常模式x下的R14,即R14-中,使异常处理程序执行完后能正确返回原程序。(2)保存当前状态寄存器CPSR的内容将CPSR的内容保存到将要执行的异常中断对应的SPSR中,便于中断返回时恢复处理器当前的状态位、中断屏蔽位以及各条件标志位。,2.1.5ARM异常中断,(3)设置当前状态寄存器CPSR中的相应位设置CPSR模式控制位CPSR4:0,使处理器进入相应的执行模式;设置中断标志位(CPSR6=1),禁止IRQ中断;设置中断标志位(CPSR7=1)禁止FIQ中断,当进入Reset或FIQ模式时。(4)转去执行中断处理程序取相应的中断向量给程序计数器PC,使程序开始执行中断处理程序。一般地说,矢量地址处将包含一条指向相应程序的转移指令,从而可跳转到相应的异常中断处理程序处执行异常中断处理程序。,2.1.5ARM异常中断,2.1.5ARM异常中断,ARM处理器对异常的响应过程可以用伪代码描述如下:R14_=returnlinkSPSR_=CPSRCPSR4:0=exceptionmodenumberCPSR5=0/*当运行于ARM状态时*/CPSR6=1/*禁止新的IRQ中断*/if=ResetorFIQthenCPSR7=1/*当Reset或FIQ异常中断时*/*禁止新的FIQ中断*/PC=exceptionvectoraddress,注意使用异常模式下的特有寄存器每个异常模式对应有两个寄存器R13_、R14_分别保存相应模式下的堆栈指针、返回地址;堆栈指针可用来定义一个存储区域保存其它用户寄存器,在程序初始化时应该对各种模式堆栈设置,便于随时使用。FIQ模式还有额外的专用寄存器R8_fiqR12_fiq,使用这些寄存器可以加快快速中断的处理速度。,2.1.5ARM异常中断,2、异常返回(1)异常返回应执行的操作异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:将返回地址装入PC把连接寄存器LR的值减去相应的偏移量,然后送到PC中。恢复CPSR的值将SPSR复制回CPSR中。清除中断屏蔽位若在进入异常处理时设置了中断禁止位,要在此清除。可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。,2.1.5ARM异常中断,(2)各种异常返回方法FIQ中断返回不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均可以执行以下指令从FIQ模式返回:SUBSPC,R14-fiq,#4指令预取中止(Abort)异常返回当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。如果发生了指令预取中止异常,无论是在ARM状态还是Thumb状态,其返回指令为:SUBSPC,R14_abt,#4;重新执行被中止的指令,2.1.5ARM异常中断,数据中止(Abort)异常返回如果发生了数据中止异常,无论是在ARM状态还是Thumb状态,其返回指令为:SUBSPC,R14_abt,#8重新执行被中止的指令软件中断指令(SWI)异常返回用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从SWI模式返回,无论是在ARM状态还是Thumb状态:MOVSPC,R14_svc以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。,2.1.5ARM异常中断,未定义指令异常返回当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。处理器执行以下程序返回,无论是在ARM状态还是Thumb状态:MOVSPC,R14_und以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。,2.1.5ARM异常中断,四、ARM中断向量,2.1.5ARM异常中断,五、异常中断向量表,2.1.5ARM异常中断,异常中断向量表说明:存储器的前8个字中除了地址0 x00000014之外,全部被用作异常矢量地址。,2.1.5ARM异常中断,六、ARM中断的优先级,2.1.5ARM异常中断,2.2ARM指令系统,2.2.1ARM指令结构2.2.2ARM寻址方式2.2.3ARM指令集2.2.4Thumb指令集2.2.5ARM汇编伪指令和伪操作,2.2.1ARM指令结构,一、ARM指令特点1、指令系统概念指令:是规定计算机进行某种操作的命令。指令系统:计算机能够执行的各种指令的集合。2、ARM指令的特点所有指令都是32位的。大多数指令都在单周期内完成。所有指令都可以条件执行。ARM指令为load/store类型。基本指令仅36条,分成五类。有7种寻址方式。指令集可以通过协处理器扩展。,3、ARM指令是加载/存储(Load/Store)型:也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。4、ARM指令可以分为五大类:数据处理指令、存储器访问指令、分支指令、协处理器指令、杂项指令。5、ARM指令有7种寻址方式:立即寻址、寄存器寻址、寄存器间接寻址、基址寻址、堆栈寻址、块拷贝寻址、相对寻址。,2.2.1ARM指令结构,二、ARM指令格式1、ARM指令基本的语法格式为:s,Opcode:指令操作码。cond:指令的条件码。S:决定指令的操作是否影响cpsr的值。Rd:目标寄存器编码。Rn:包含第一个操作数的寄存器编码。Operand2:第2操作数。,2.2.1ARM指令结构,2、ARM指令典型的编码格式为:(数据处理指令类),例:ADDSR2,R1,#1SUBNESR2,R1,#0 x20LDRR0,R1,2.2.1ARM指令结构,三、ARM指令的条件码1、条件码的位数和位置:每条ARM指令包含4位条件码域,它占用指令编码的最高四位31:28。2、条件码的表示:条件编码共2416种,其中,15种用于指令的条件码。每种条件码用2个英文缩写字符表示。(见下表),指令条件码表,2.2.1ARM指令结构,3、带条件指令的执行:ARM处理器根据指令的执行条件是否满足,决定当前指令是否执行。只有在cpsr中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOP指令)。4、条件码的书写方法:条件码的位置在指令助记符的后面(因此也称为条件后缀)。例如:MOVEQR0,R1,2.2.2ARM寻址方式,寻址方式:处理器根据指令中给出的(地址)信息,寻找操作数(物理地址)的方式。将ARM指令系统的寻址方式分为7种。立即寻址寄存器寻址寄存器间接寻址变址寻址堆栈寻址块拷贝寻址相对寻址,一、立即寻址立即寻址也叫立即数寻址。立即寻址概念:操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。ADDR0,R0,1;R0R01MOVR0,0 x3f;R00 x3f书写立即数时,要求以“”为前缀。十六进制数,后加0 x或R0R1STRR0,R1;R1R0第一条指令将以R1的值为地址的存储单元中的内容加载到寄存器R0中。第二条指令将R0的内容存储到以R1的值为地址的存储单元中。R1基址寄存器R1的内容基地址,四、变址寻址变址寻址也叫基址加偏(变)址寻址将基址寄存器的内容与指令中给出的地址偏移量相加,得到操作数所在的存储器的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。,例如:LDRR0,R1,4;R0mem32R14,五、堆栈寻址堆栈寻址堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针SP)指向一块存储区域(堆栈)。堆栈可分为两种增长方式:向上生长:向高地址方向生长,称为递增堆栈。向下生长:向低地址方向生长,称为递减堆栈。,根据堆栈指针指向的数据位置的不同,可分为:满堆栈堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;空堆栈堆栈指针指向下一个待压入数据的空位置,称为空堆栈。这样就有4种类型的堆栈表示递增和递减的满和空堆栈的各种组合。,四种类型的堆栈工作方式满递增堆栈FA(FullAscending):堆栈指针指向最后压入的数据,且由低地址向高地址生长。满递减堆栈FD:堆栈指针指向最后压入的数据,且由高地址向低地址生长。空递增堆栈EA:堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生长。空递减堆栈ED(EmptyDescending):堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生长。,六、块拷贝寻址块拷贝寻址把存储器中的一个数据块加载到多个寄存器中,或者是把多个寄存器中的内容保存到存储器中。应用指令:块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式,因此也叫多寄存器寻址。块拷贝寻址操作中的寄存器,可以是R0-R15这16个寄存器的子集(一部分),或是所有寄存器。,4种寻址操作LDMIA/STMIAIncrementAfter(先传送,后地址加4)LDMIB/STMIBIncrementBefore(先地址加4,后传送)LDMDA/STMDADecrementAfter(先传送,后地址减4)LDMDB/STMDBDecrementBefore(先地址减4,后传送),七、相对寻址相对寻址与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。相对寻址指令举例如下:BLSUBRl;调用到SUBRl子程序.;SUBRl应为24位有符号数SUBR1MOVPC,LR;返回,2.2.3ARM指令集,ARM主要指令如下:存储器访问指令数据处理指令分支指令协处理器指令杂项指令,一、存储器访问指令ARM微处理器用加载/存储指令访问存储器,实现在寄存器和存储器之间传送数据。加载指令用于将存储器中的数据传送到寄存器,存储指令则完成相反的操作。由于ARM处理器对外设寄存器、I/O映射空间与存储器统一编址,因此,对外围设备的I/O操作也用此类指令。基本的加载/存储指令仅有5条,分为3种:LDR和STR,单寄存器加载/存储指令LDM和STM,多寄存器加载/存储指令SWP,寄存器和存储器数据交换指令,1、单寄存器的存取指令单寄存器加载/存储指令是ARM在寄存器和存储器间传送单个字节和字的最灵活方式。根据传送数据的类型不同,单个寄存器存取指令又可以分为以下两类:单字和无符号字节的加载/存储指令LDR:指令从内存中取32位字或8位无符号字节数据放入寄存器;STR:指令将寄存器中的32位字或8位无符号字节数据保存到存储器中注意:无符号字节加载时,用0将8位的操作数扩展到32位。,半字和有符号字节的加载/存储指令这类LDR/STR指令可实现半字(有符号和无符号)、有符号字节数据的传送。特点:偏移量格式、寻址方式与加载存储字和无符号字节指令基本相同。立即数偏移量限定在8位,寄存器偏移量不可经过移位得到。,2、多寄存器的存取指令LDM和STM指令可以实现在一组寄存器和一块连续的内存单元之间存/取数据。LDM为加载多个寄存器;STM为存储多个寄存器。这两条指令,允许传送16个寄存器R0-R15的任何子集或所有寄存器。,3、单寄存器交换指令(SWP)SWP指令用于将一个存储单元(该单元地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该存储单元中。(1)指令格式SWPcondBRd,Rm,RnB为可选后缀,若有B,则交换字节,否则交换32位字Rd为被加载的寄存器Rm的数据用于存储到Rn所指的地址中若Rm与Rd相同,则为寄存器与存储器内容进行交换Rn为要进行数据交换的存储器地址,Rn不能与Rd和Rm相同。,(2)指令举例SWPR1,R1,R0;将R1的内容与R0指向的存储单元的内容进行交换。SWPBR1,R2,R0;将R0指向的存储单元的内容读取1字节数据到R1中(高24位清零),并将R2的内容写入到该内存单元中(最低字节有效),二、数据处理指令1、数据处理指令概述(1)ARM数据处理指令的功能主要完成寄存器中数据的算术和逻辑运算操作。(2)ARM数据处理指令的特点操作数来源:所有的操作数要么来自寄存器,要么来自立即数,不会来自存储器。操作结果:如果有结果,则结果一定是为32位宽、或64位宽(长乘法指令),并且放在一个或两个寄存器中,不会写入存储器。有第二个操作数(除了乘法指令)Operand2:切记其三种形式:立即数、寄存器、寄存器移位。乘法指令的操作数:全部是寄存器。,(3)ARM数据处理指令分类22条可分为5类:算术运算指令:ADDADCSUBSBCRSBRSCMULMLAUMULLUMLALSMULLSMLAL逻辑运算指令:ANDORREORBIC数据传送指令:MOVMVN比较指令:CMPCMN测试指令:TSTTEQ上述指令只能对寄存器操作,不能针对存储器。,(4)数据处理指令对程序状态寄存器CPSR的影响1)选择“S”后缀问题:指令中可以选择s后缀,以影响状态标志。但是比较指令(cmp、cmn、tst和teq)不需要后缀S,它们总会直接影响CPSR中的状态标志。2)对CPSR中标志位的影响:标志位:如果结果为负,则标志位置;否则清。标志位:如果结果为,则标志位置;否则清。标志位:如果是加、减运算指令或比较指令时,标志位设置为的进位输出;否则设置为移位器的移位输出。如果不需要移位,则保持不变。标志位:在非加减操作中,标志位保持原值。在加减操作中,如果有溢出,则置;不发生溢出,则清。,(5)数据处理指令的详细列表(未含6条乘法指令),2、算术运算指令(1)加减运算指令ADD加法运算指令ADC带进位加法指令SUB减法运算指令SBC带进位减法指令RSB反向减法指令RSC带进位反向减法指令,(2)乘法指令ARM有两类乘法指令:32位的乘法指令,即乘法操作的结果为32位;64位的乘法指令,即乘法操作的结果为64位。,MUL32位乘法指令MLA32位乘加指令UMULL64位无符号乘法指令UMLAL64位无符号乘加指令SMULL64位有符号乘法指令SMLAL64位有符号乘加指令,3、逻辑运算指令(1)AND逻辑“与”操作指令AND指令可用于提取寄存器中某些位的值(2)ORR逻辑“或”操作指令ORR指令用于将寄存器中某些位的值设置成1。(3)EOR逻辑“异或”操作指令EOR指令可用于将寄存器中某些位的值取反。将某一位与0异或,该位值不变;与1异或,该位值被求反。(4)BIC位清除指令BIC指令可用于将寄存器中某些位的值设置成0。将某一位与1做BIC操作,该位值被设置成0;将某一位与0做BIC操作,该位值不变。,4、数据传送指令(1)MOV数据传送指令功能:寄存器之间传送。立即数传送到寄存器中。实现单纯的移位操作。MOVRd,Rd,LSL,#3实现子程序调用、从子程序中返回。当PC寄存器作为目标寄存器时可以实现程序跳转。实现把当前处理器模式的SPSR寄存器内容复制到CPSR中。,(2)MVN数据求反传送指令(3)比较指令CMP比较指令CMN负数比较指令(4)测试指令TST位测试指令TEQ测试相等指令,三、分支指令在ARM中有两种方式可以实现程序的跳转:一种是使用分支转移指令直接跳转;另一种则是直接向PC寄存器赋值来实现跳转。ARM的分支转移指令,可以从当前指令向前或向后的32MB的地址空间跳转。根据完成的功能它可以分为以下4种:B分支指令BL带链接的分支指令BX带状态切换的分支指令BLX带链接和状态切换的分支指令,四、协处理器指令1、ARM协处理器:ARM支持16个协处理器,用于各种协处理器操作,最常使用的协处理器是用于控制片上功能的系统协处理器,例如控制高速缓存和存储器的管理单元,浮点ARM协处理器等,还可以开发专用的协处理器。2、ARM协处理器指令根据其用途主要分为以下三类:协处理器数据操作指令。ARM寄存器与协处理器寄存器的数据传送指令。协处理器寄存器和内存单元之间数据存/取指令。,3、ARM的协处理器指令功能:(1)ARM处理器初始化ARM协处理器的数据处理操作;(2)在ARM处理器的寄存器和协处理器的寄存器之间传送数据;(3)在ARM协处理器的寄存器和存储器之间传送数据。4、ARM协处理器指令包括以下5条:CDP协处理器数操作指令coprocessorLDC协处理器数据加载指令STC协处理器数据存储指令MCRARM处理器寄存器到协处理器寄存器的数据传送指令MRC协处理器寄存器到ARM处理器寄存器的数据传送指令,五、杂项指令主要由两种类型指令组成,程序状态寄存器操作指令、中断操作指令,一共有5条指令。状态寄存器操作指令:MRS:读程序状态寄存器指令MSR:写程序状态寄存器指令异常中断操作指令:SWI:软件中断指令BKPT:断点指令(v5T体系)CLZ:前导0计数(v5T体系),六、例题1、算数逻辑运算指令的应用例1:实现乘法的指令段MOVR0,R0,LSL#n;R0=R0b)a=a-bSUBLTR1,R1,R0;if(ba)b=b-aBNEgcd;if(a!=b)跳转到gcd继续执行MOVPC,LR;子程序结束,返回,例3:循环语句将内存中从0 x400800开始的100个字数据相加,其结果存于R3、R2中(R3中为高32位)。LDRR0,=0 x400800MOVR1,#100;初始化循环次数MOVR2,#0MOVR3,#0loop;循环体LDRR4,R0,#4ADDSR2,R2,R4ADCR3,R3,#0或者ADDCSR3,R3,#1SUBSR1,R1,#1;循环计数器减1,设置条件标志BNEloop;循环计数器不为0,跳到loop继续执行;循环计数器为0,程序继续执行,例4:链表操作中的条件码应用在链表中搜索与某一数据相等的元素。链表的每个元素包括两个字,第1个字中包含一个字节数据;第2个字中包含指向下一个链表元素的指针,当这个指针为0时表示链表结束。代码执行前R0指向链表的头元素,R1中存放将要搜索的数据;代码执行后R0指向第1个匹配的元素,或者当没有匹配元素时,R0为0。,SEARCHCMPR0,#0;R0指针是否为空LDRNEBR2,R0;读取当前元素中的字节数据CMPNER1,R2;判断数据是否为搜索的数据LDRNER0,R0,#4;如果不是,指针R0指向下一个元素BNESEARCH;跳转到search执行MOVPC,LR;搜索完成,程序返回,2.2.4Thumb指令集,一、Thumb指令集特点Thumb指令集是ARM指令集压缩形式的子集,所有Thumb指令均有对应的ARM指令。采用16位二进制编码,代码密度小。执行Thumb指令时,先动态解压缩,然后作为标准的ARM指令执行。如何区分指令流取决于CPSR的第5位(位T)。大多数Thumb数据处理指令采用2个操作数格式。由于16位的限制,移位操作变成单独指令。,Thumb指令集没有协处理器指令、单寄存器交换指令、乘加指令、64位乘法指令以及程序状态寄存器处理指令,而且指令的第2操作数受到限制。除了分支指令B有条件执行功能外,其他指令均为无条件执行。Thumb是一个不完整的体系结构,不能指望处理器只执行Thumb代码而不支持ARM指令集。,二、状态切换1、ARM状态进入Thumb状态的方法执行带状态切换的转移指令BX。若BX指令指定的寄存器的最低位为1,则将T置位,并将程序计数器切换为寄存器其他位给出的地址。BXR0;若R0最低位为1,则转入Thumb状态,异常返回也可以将微处理器从ARM状态转换为Thumb状态。通常这种指令用于返回到进入异常前所执行的指令流,而不是特地用于转换到Thumb模式。MOVPC,LR;当返回地址保存在LR时STMFDSP!,LR;当返回地址保存在堆栈时,;进入异常后将R14入栈,;假设异常前执行的是Thumb指令,PC保存于LR中LDMFDSP!,PC;返回指令,2、Thumb状态进入ARM状态的方法执行Thumb指令中的交换转移BX指令可以显式地返回到ARM指令流。利用异常进入ARM指令流。,三、Thumb指令寄存器的使用,Lo寄存器,Hi寄存器,CPSR,有阴影的寄存器访问时受到限制,对低(Lo)8个通用寄存器R0R7具有全部访问权限,可以被任意指令访问。寄存器R8R12的访问受到限制,这些寄存器只能通过MOV、ADD和CMP访问。对寄存器R13R15进行扩展以作特殊应用。CPSR间接访问(CMP和数据处理指令影响)。SPSR不能访问。CPSR的条件标志位由算术和逻辑操作设置并控制条件转移。,四、Thumb-ARM异同点1、Thumb-ARM相似处:Load/Store结构。支持8位字节、16位半字和32位字数据类型,半字以两字节边界对准,字以4字节边界对准。2、Thumb-ARM差异处:大多数Thumb指令是无条件执行的,所有ARM指令都是条件执行的。许多Thumb数据处理指令采用2个操作数格式(目的寄存器与一个源寄存器相同),ARM数据处理指令大多采用3个操作数格式。如:ADDR0,R1由于采用高密度编码,Thumb指令格式没有ARM指令格式规则。,五、Thumb转移指令1、Thumb转移指令用于:向后转移形成循环;条件结构向前转移;转向子程序;处理器从Thumb状态切换到ARM状态。2、程序相对转移,特别是条件转移与在ARM状态下相比,在范围上有更多的限制,转向子程序只能是无条件转移。3、Thumb转移指令包括:B;BL;BX;BLX,六、堆栈指令功能:低寄存器和可选的LR进栈。低寄存器和可选的PC出栈。格式:POP,PCPUSH,LR其中:Reglist低寄存器范围的、用逗号隔开的列表。注释:1Thumb堆栈是满递减堆栈,向下增长,且SP指向堆栈的最后入口。2寄存器以数字顺序存储在堆栈中。最低数字的寄存器其地址最低。3POPreglist,PC这条指令引起处理器转移到从堆栈弹出给PC的地址。这通常是从子程序返回,其中LR在子程序开头压进堆栈。4指令采用基址回写,因此基址寄存器不应出现在寄存器列表中。,5.这些指令不影响条件码标志例:PUSHR0,R4-R7;R0、R4R7进栈PUSHR0,LRPOPR2,R5POPR0-R7,PC;出栈并从子程序返回,七、寄存器读取和存储指令1、单寄存器读取和存储Thumb

温馨提示

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

评论

0/150

提交评论