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

下载本文档

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

文档简介

第二章 ARM体系结构与指令系统,合肥学院 电子信息与电气工程系 干开峰,目 录,2.1 ARM体系结构 2.2 ARM指令系统,2.1 ARM体系结构,2.1.1 ARM体系结构概述 2.1.2 ARM存储结构 2.1.3 ARM处理器模式 2.1.4 ARM寄存器 2.1.5 ARM异常中断,2.1.1 ARM体系结构概述,一、ARM体系结构特点 1、总体思想:在不牺牲性能的同时,尽量简化处理器。同时从体系结构的层面上灵活支持处理器扩展。 这种简化和开放的思路使得ARM处理器采用了很简单的结构来实现。,2.1.1 ARM体系结构特点,2、RISC型处理器结构 ARM采用RISC结构,在简化处理器结构,减少复杂功能指令的同时,提高了处理器的速度。 RISC型处理器采用了Load/Store(加载/存储)结构,即只有Load/Store指令可与存储器打交道,其余指令都不允许进行存储器操作。 RISC型处理器增加了指令高速缓冲I-Cache和数据高速缓冲D-Cache及多处理器结构,使指令的操作尽可能在寄存器之间进行。,CISC与RISC的比较,2.1.1 ARM体系结构特点,3、Thumb指令集 新型的ARM体系结构中定义了16位的Thumb指令集。 Thumb指令集比通常的8/16位CISC/RISC处理器有更好的代码密度,而芯片面积只增加6%,却可以使程序存储器更小。,2.1.1 ARM体系结构特点,4、多处理器状态模式 ARM体系结构定义了7种处理器模式:用户(usr)、快中断(fiq)、中断(irq)、管理(svc)、终止(abt)、未定义(und)和系统(sys),大大提高了ARM处理器的效率。 5、两种处理器工作状态 ARM状态(执行32位ARM指令)和Thumb状态(执行16位Thumb指令)。,2.1.1 ARM体系结构特点,6、嵌入式在线仿真调试 ARM体系结构的处理器芯片都嵌入了在线仿真ICE-RT逻辑,便于通过JTAG来仿真调试芯片,省去了价格昂贵的在线仿真器。 7、灵活方便的接口 ARM体系结构具有协处理器接口,允许接16个协处理器。既可以使基本的ARM处理器内核尽可能小,方便地扩充ARM指令集,也可以通过未定义指令来支持协处理器的软件仿真。,2.1.1 ARM体系结构特点,8、低电压功耗的设计 考虑到ARM体系结构的处理器主要用于手持式嵌入式系统中,ARM体系结构在设计中就十分注意功耗的设计。,2.1.1 ARM体系结构特点,二、ARM流水线结构 1、流水线方式:是把一个重复的过程分解为若干个子过程,每个子过程可以与其他子过程同时进行。 处理器按照一系列步骤来执行每一条指令。,2.1.1 ARM体系结构特点,典型的步骤为: 1)从存储器读取指令(fetch) 2)译码以鉴别它是哪一类指令(dec) 3)从寄存器组取得所需的操作数(reg) 4)将操作数进行组合以得到结果或存储器地址(exe) 5)如果需要,则访问存储器存取数据(mem) 6)将结果回写到寄存器组(res),2.1.1 ARM体系结构特点,2、ARM7的三级流水线 取指:从程序存储器中取指令,放入指令流水线。(占用存储器访问操作) 译码:指令译码。(占用译码逻辑) 执行:执行指令/读写REG。(占用ALU及数据路径),2.1.1 ARM体系结构特点,3、ARM9TDMI的五级流水线,2.1.1 ARM体系结构特点,4、ARM7和ARM9流水线比较 5级流水线的ARM9内核是哈佛架构,拥有独立的指令和数据总线;指令和数据的读取可以在同一周期进行; 3级流水的ARM7内核是指令和数据总线复用的冯.诺依曼架构,指令和数据的读取不能在同一周期进行; 5级流水线设计把寄存器读取、逻辑运算、结果回写分散在不同的流水当中, 每一级流水的操作简洁,提升了处理器的主频。,2.1.1 ARM体系结构特点,随着流水线深度(级数)的增加,每一段的工作量被削减了,这使得处理器可以工作在更高的频率,同时改进了处理器的性能; 负面作用是增加了系统的延时,即内核在执行一条指令前,需要更多的周期来填充流水线; 流水线级数的增加也意味着在某些段之间会产生数据相关。,ARM处理器性能比较,2.1.1 ARM体系结构特点,三、ARM总线结构 ARM微控制器使用的是AMBA总线体系结构 1、 AHB总线(Advanced High-performance Bus):用于连接高性能系统模块。它支持突发数据传输方式及单个数据传输方式,所有时序 参考同一个时钟沿。,2.1.1 ARM体系结构特点,2、ASB总线(Advanced System Bus):用于连接高性能系统模块,它支持突发数据传输模式。 3、 APB总线(Advance Peripheral Bus):是一个简单接口支持低性能的外围接口。,2.1.2 ARM存储结构,一、ARM存储数据类型 1、ARM处理器支持以下6种数据类型: 8位有符号和无符号字节(Byte)。 16位有符号和无符号半字(Halfword) 它们必须以两字节的边界对齐(半字对齐)。 半字对齐:半字单元地址的最低位 A0=0b0 (地址末位为0x0,0x2,0x4,0x6,0x8,0xa,0xc,0xe)。 32位有符号和无符号字(word) 它们必须以4字节的边界对齐(字对齐)。 单元地址的低两位 A1A0=0b00。即地址末位为0x0, 0x4, 0x8, 0xc。,2、对于指令,ARM指令系统分为32位ARM指令集和16位的Thumb指令集,在存储时分别以32位和16位的两种不同长度存储。 3、对于数据,ARM支持对32位字数据,16位半字数据,8位字节数据操作。因此数据存储器可以存储32位,16位,8位三种不同长度数据。 4、在ARM内部,所有操作都面向32位的操作数,只有数据传送指令支持较短的字节和半字的数据类型。当从存储器读入一个字节或半字时,根据其数据类型将其扩展到32位。,2.1.2 ARM存储结构,二、ARM存储器组织 1、ARM存储器以8位为一个单元存储数据(一个字节),每个存储单元分配一个存储地址。 ARM将存储器看作是从零地址开始的字节的线性组合。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。 2、ARM体系结构可以用两种方法存储字数据,称为大端格式和小端格式 。,2.1.2 ARM存储结构,2.1.2 ARM存储结构,大端格式(big-endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 小端格式(low-endian):与大端存储格式相反。低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。缺省设置为小端格式。,三、ARM存储器层次 微处理器希望存储器容量大、速度快。但容量大者速度慢;速度快者容量小。 解决方法是构建一个由多级存储器组成的复合存储器系统。,2.1.2 ARM存储结构,多级存储器系统,寄存器组 访问时间约为几个ns。 片上RAM 与片外RAM比速度快、功耗小、 容量小。读写时间约为几个ns。 片上Cache 832KB,访问时间约为十几个ns。 主存储器 一般为几兆字节1GB 的动态存 储器,访问时间约 50ns。,2.1.2 ARM存储结构,CPU,寄存器组,片上RAM,片上Cache,主存储器,硬盘,寄存器组,片上RAM,片上Cache,主存储器,硬盘,寄存器组,片上RAM,片上Cache,主存储器,2.1.3 ARM处理器模式,一、ARM处理器工作状态 1、有两种工作状态: ARM状态:处理器执行32位的字对齐的ARM指令; Thumb状态:处理器执行16位的半字对齐的Thumb指令。 2、两种状态可以切换: 程序执行过程中,通过执行带状态切换的分支指令BX,随时在两种工作状态之间进行切换。并且,处理器工作状态的转变,并不影响处理器的工作模式和相应寄存器中的内容。,2.1.3 ARM处理器模式,二、ARM处理器工作模式 1、 ARM9的7种工作模式 (1)用户模式(usr):非特权模式,大部分任务执行在这种模式。 正常程序执行的模式 (2)快速中断模式(fiq):当一个高优先级(fast)中断产生时将会进入这种模式。 高速数据传输或通道处理 (3)外部中断模式(irq):当一个低优先级(normal)中断产生时将会进入这种模式。 通常的中断处理 (4)管理模式(svc):当复位或软中断指令执行时将会进入这种模式。 供操作系统使用的一种保护模式,2.1.3 ARM处理器模式,(5)中止模式(abt):当存取异常时将会进入这种模式 虚拟存储及存储保护 (6)未定义模式(und):当执行未定义指令时会进入这种模式 软件仿真硬件协处理器 (7)系统模式(sys):供需要访问系统资源的操作系统任务使用 特权级的操作系统任务,2.1.3 ARM处理器模式,2、模式分类及特点 (1)用户模式特点: 应用程序不能够访问受操作系统保护的系统资源。 应用程序不能进行处理器模式的切换。 (2)系统模式特点: 不属于异常模式,不是通过异常进入的。系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行模式的切换。它主要供操作系统使用。 (3)特权模式及其特点: 特权模式:除用户模式之外的工作模式又称为特权模式 特点: 应用程序可以访问所有的系统资源 可以任意地进行处理器模式的切换,2.1.3 ARM处理器模式,(4)异常模式及其特点: 异常模式:除用户模式、系统模式之外的五种模式称为异常模式。 特点:以各自的中断或异常方式进入,并且处理各自的中断或异常。 对管理模式 (svc)进入方式和处理内容有: 系统上电复位后进入管理模式,运行系统初始化程序,如中断允许/禁止,主时钟设置,SDRAM配置,各个功能模块初始化等。 当执行软件中断指令SWI时,进入管理模式。,2.1.3 ARM处理器模式,3、处理器模式的切换方式: 软件控制进行切换。 通过外部中断和异常进行切换 处理器启动时的模式转换图,管理模式 (Supervisor),多种特权 模式变化,用户程序的 运行模式,复位后的缺省模式,主要完成各模式的堆栈设置,注意不要进入用户模式,一般为用户模式User,2.1.4 ARM寄存器,一、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_fiq 6 个状态寄存器 CPSR SPSR_svc、SPSR_abt、SPSR_und、SPSR_irq和SPSR_fiq,2.1.4 ARM寄存器,每一类处理器模式都有一组相应的寄存器组; 在任意的处理器模式下,可见的寄存器包括15个通用寄存器(R0R14)、1个或2个状态寄存器和程序寄存器。 带灰色底纹的单元格表示,用户模式或系统模式使用的一般寄存器,已被异常模式特定的另一寄存器所替代。,2.1.4 ARM寄存器,二、ARM通用寄存器 通用寄存器包括R0R15,可以分为三类: 1、未分组寄存器R0R7 在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,是真正的通用寄存器。,2.1.4 ARM寄存器,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.4 ARM寄存器,R13:寄存器R13在ARM指令中常用作堆栈指针SP。但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。 R14:寄存器R14也称作子程序链接寄存器(Subroutine Link Register)或链接寄存器LR。 当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。 与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。,2.1.4 ARM寄存器,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.4 ARM寄存器,三、ARM状态寄存器 1、两种程序状态寄存器 在ARM微处理器中,有CPSR和SPSR两种程序状态寄存器。 (1)当前程序状态寄存器 CPSR (Current Program Status Register) 用来保存当前程序状态的寄存器。 所有处理器模式下都可以访问当前程序状态寄存器CPSR。仅一个CPSR。 (2)保存程序状态寄存器SPSR_mode (Saved Program Status Register) SPSR_mode用来进行异常处理,其功能包括: 保存ALU中的当前操作信息 当异常发生时, 用来保存CPSR的值,从异常返回时,将 SPSR_mode复制到CPSR中,恢复CPSR的值。 控制允许和禁止中断 修改SPSR的值 设置处理器的运行模式 修改SPSR的值,2.1.4 ARM寄存器,2、ARM状态寄存器的格式 (1)条件码标志位(保存ALU中的当前操作信息) N:正负号/大小 标志位 0表示:正数/大于;1表示:负数/小于 Z:零标志位 0表示:结果不为零;1表示:结果为零 C:进位/借位/移出位 0表示:未进位/借位/移出0;1表示:进位/未借位/移出1 V:溢出标志位 0表示:结果未溢出;1表示:结果溢出,2.1.4 ARM寄存器,(2)控制位 I、F中断控制位控制允许和禁止中断 I1 禁止IRQ中断 I0 允许IRQ中断 F1 禁止FIQ中断 F0 允许FIQ中断 T控制(标志)位反映处理器的运行状态 T=1时,程序运行于Thumb状态 T=0时,程序运行于ARM状态 M控制位决定了处理器的运行模式 当发生异常时这些位被改变。 如果处理器运行在特权模式,这些位也可以由程序修改。,2.1.4 ARM寄存器,(3)保留位 CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要改变,在程序中也不要使用保留位来存储数据。 保留位将用于ARM版本的扩展。,2.1.4 ARM寄存器,四、Thumb状态寄存器组织 Thumb状态下的寄存器集是ARM状态下寄存器集的子集。程序员可以直接访问8个通用的寄存器(R0R7),程序计数器PC、堆栈指针SP、链接寄存器LR和当前状态寄存器CPSP。,2.1.5 ARM异常中断,一、 异常和中断概念 1、中断 当CPU正在执行程序时,系统发生了一件急需处理的事件,CPU暂时停下正在执行的程序,转去处理相应的事件,事件处理完后,CPU再返回执行原来的程序,这种情况称为中断。 中断事件:引起CPU产生中断、并且与CPU当前所执行的程序无关的、由外部硬件产生的事件,也叫中断源。中断事件也常称为外中断。,2.1.5 ARM异常中断,2、异常 是指CPU在执行指令时出现的错误,即不正常的情况。异常是与当前所执行的程序有关的。如存取数据或指令错误、计算结果溢出等。 异常的处理:也用中断的方式进行处理。,二、ARM有7种异常 1、复位 处理器上一旦有复位输入,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,从地址0x00000000或0xFFFF0000开始执行指令。 2、未定义指令异常 当ARM处理器执行协处理器指令时,它必须等待任一外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,就会出现未定义指令异常。 未定义指令异常可用于在没有物理协处理器(硬件)的系统上,对协处理器进行软件仿真,或在软件仿真时进行指令扩展。,2.1.5 ARM异常中断,3、软件中断异常 该异常由执行SWI指令产生,可使用此机制进行软件仿真。 4、预取中止(取指令存储器中止) 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。 5、数据中止(访问数据存储器中止) 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。,2.1.5 ARM异常中断,6、IRQ异常 当处理器的外部中断请求引脚有效,且CPSR中的I=0,产生IRQ异常。 系统的外设可通过该异常请求中断服务。 7、FIQ异常 当处理器的外部中断请求引脚有效,且CPSR中的F=0,产生FIQ异常。 FIQ支持数据传送和通道处理,并有足够的私有寄存器,从而在应用中可避免对寄存器保存的需求,减少了开销。,2.1.5 ARM异常中断,三、ARM的异常中断响应过程 1、进入异常 当发生异常时,除了复位异常立即中止当前指令外,处理器尽量完成当前指令,然后脱离当前的程序去处理异常。 ARM处理器对异常中断的响应过程如下 : (1)保存返回地址 将引起异常指令的下一条指令的地址保存到新的异常模式x下的R14,即R14-中,使异常处理程序执行完后能正确返回原程序。 (2)保存当前状态寄存器CPSR的内容 将CPSR的内容保存到将要执行的异常中断对应的SPSR中,便于中断返回时恢复处理器当前的状态位、中断屏蔽位以及各条件标志位。,2.1.5 ARM异常中断,(3)设置当前状态寄存器CPSR中的相应位 设置CPSR模式控制位CPSR4:0,使处理器进入相应的执行模式; 设置中断标志位(CPSR6=1),禁止IRQ中断; 设置中断标志位(CPSR7=1)禁止FIQ中断,当进入Reset或FIQ模式时。 (4)转去执行中断处理程序 取相应的中断向量给程序计数器PC,使程序开始执行中断处理程序。 一般地说,矢量地址处将包含一条指向相应程序的转移指令,从而可跳转到相应的异常中断处理程序处执行异常中断处理程序 。,2.1.5 ARM异常中断,2.1.5 ARM异常中断,ARM处理器对异常的响应过程可以用伪代码描述如下 : R14_=return link SPSR_=CPSR CPSR4:0=exception mode number CPSR5=0 /*当运行于ARM状态时*/ CPSR6=1 /*禁止新的IRQ中断*/ if =Reset or FIQ then CPSR7=1 /*当Reset 或FIQ异常中断时*/ /*禁止新 的FIQ中断*/ PC=exception vector address,注意使用异常模式下的特有寄存器 每个异常模式对应有两个寄存器R13_、R14_分别保存相应模式下的堆栈指针、返回地址;堆栈指针可用来定义一个存储区域保存其它用户寄存器,在程序初始化时应该对各种模式堆栈设置,便于随时使用。 FIQ模式还有额外的专用寄存器R8_fiqR12_fiq,使用这些寄存器可以加快快速中断的处理速度。,2.1.5 ARM异常中断,2、异常返回 (1)异常返回应执行的操作 异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 将返回地址装入PC 把连接寄存器LR的值减去相应的偏移量,然后送到PC中。 恢复CPSR的值 将SPSR复制回CPSR中。 清除中断屏蔽位 若在进入异常处理时设置了中断禁止位,要在此清除。 可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。,2.1.5 ARM异常中断,(2)各种异常返回方法 FIQ中断返回 不管是在ARM状态还是在Thumb状态下进入FIQ模式,FIQ处理程序均可以执行以下指令从FIQ模式返回: SUBS PC,R14-fiq ,#4 指令预取中止( Abort )异常返回 当指令预取访问存储器失败时,存储器系统向ARM处理器发出存储器中止(Abort)信号,预取的指令被记为无效,但只有当处理器试图执行无效指令时,指令预取中止异常才会发生,如果指令未被执行,例如在指令流水线中发生了跳转,则预取指令中止不会发生。 如果发生了指令预取中止异常,无论是在ARM状态还是Thumb状态,其返回指令为: SUBS PC, R14_abt, #4 ;重新执行被中止的指令,2.1.5 ARM异常中断,数据中止( Abort )异常返回 如果发生了数据中止异常,无论是在ARM状态还是Thumb状态,其返回指令为: SUBS PC, R14_abt, #8 重新执行被中止的指令 软件中断指令(SWI)异常返回 用于进入管理模式,常用于请求执行特定的管理功能。软件中断处理程序执行以下指令可以从SWI模式返回,无论是在ARM状态还是Thumb状态: MOVS PC , R14_svc 以上指令恢复PC(从R14_svc)和CPSR(从SPSR_svc)的值,并返回到SWI的下一条指令。,2.1.5 ARM异常中断,未定义指令异常返回 当ARM处理器遇到不能处理的指令时,会产生未定义指令异常。采用这种机制,可以通过软件仿真扩展ARM或Thumb指令集。 处理器执行以下程序返回,无论是在ARM状态还是Thumb状态: MOVS PC, R14_und 以上指令恢复PC(从R14_und)和CPSR(从SPSR_und)的值,并返回到未定义指令后的下一条指令。,2.1.5 ARM异常中断,四、ARM中断向量,2.1.5 ARM异常中断,五、异常中断向量表,2.1.5 ARM异常中断,异常中断向量表说明: 存储器的前8个字中除了地址0x00000014之外,全部被用作异常矢量地址。,2.1.5 ARM异常中断,六、ARM中断的优先级,2.1.5 ARM异常中断,2.2 ARM指令系统,2.2.1 ARM指令结构 2.2.2 ARM寻址方式 2.2.3 ARM指令集 2.2.4 Thumb指令集 2.2.5 ARM汇编伪指令和伪操作,2.2.1 ARM指令结构,一、ARM指令特点 1、指令系统概念 指令:是规定计算机进行某种操作的命令。 指令系统:计算机能够执行的各种指令的集合。 2、ARM指令的特点 所有指令都是32位的。 大多数指令都在单周期内完成。 所有指令都可以条件执行。 ARM指令为load/store类型。 基本指令仅36条,分成五类。 有7种寻址方式。 指令集可以通过协处理器扩展。,3、 ARM指令是加载/存储(Load/Store)型: 也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。 4、ARM指令可以分为五大类: 数据处理指令、存储器访问指令、分支指令、协处理器指令、杂项指令。 5、ARM指令有7种寻址方式: 立即寻址、寄存器寻址、寄存器间接寻址、基址寻址、堆栈寻址 、块拷贝寻址、相对寻址。,2.2.1 ARM指令结构,二、ARM指令格式 1、ARM指令基本的语法格式为: s , , Opcode:指令操作码。 cond:指令的条件码。 S:决定指令的操作是否影响cpsr的值。 Rd:目标寄存器编码。 Rn:包含第一个操作数的寄存器编码。 Operand2:第2操作数。,2.2.1 ARM指令结构,2、ARM指令典型的编码格式为: (数据处理指令类),例: ADDS R2,R1,#1 SUBNES R2,R1,#0x20 LDR R0,R1,2.2.1 ARM指令结构,三、ARM指令的条件码 1、条件码的位数和位置:每条ARM指令包含4位条件码域,它占用指令编码的最高四位31:28。 2、条件码的表示:条件编码共 24 16 种,其中,15种用于指令的条件码。每种条件码用2个英文缩写字符表示。(见下表),指令条件码表,2.2.1 ARM指令结构,3、带条件指令的执行:ARM处理器根据指令的执行条件是否满足,决定当前指令是否执行。 只有在cpsr中的条件标志位满足指定的条件时,指令才会被执行。不符合条件的代码依然占用一个时钟周期(相当于一个NOP指令)。 4、条件码的书写方法:条件码的位置在指令助记符的后面(因此也称为条件后缀)。 例如: MOVEQ R0, R1,2.2.2 ARM寻址方式,寻址方式:处理器根据指令中给出的(地址)信息,寻找操作数(物理地址)的方式。 将ARM指令系统的寻址方式分为7种。 立即寻址 寄存器寻址 寄存器间接寻址 变址寻址 堆栈寻址 块拷贝寻址 相对寻址,一、立即寻址 立即寻址也叫立即数寻址。 立即寻址概念:操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。 ADD R0,R0,1 ;R0R01 MOV R0 ,0x3f ; R00x3f 书写立即数时,要求以“”为前缀。 十六进制数,后加 0x或&,如 #0x3f,#&3f. 二进制数, 后加 0b, 如 #0b1011 十进制数, #后加 0d或缺省,如#0d678,#789,二、寄存器寻址 寄存器寻址: 利用寄存器中的数值作为操作数。 这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。 两种具体形式:寄存器寻址、寄存器移位寻址。 1、寄存器寻址 如指令: ADD R0,R1,R2 ;R0R1R2,2、寄存器移位寻址 当第二操作数为寄存器型时,在执行寄存器寻址操作时,也可以对第二操作数寄存器进行移位,此时第二操作数形式为: MOV Rd, Rn, Rm, 其中: Rm 称为第二操作数寄存器 用来指定移位类型和移位位数,有两种形式: 5位立即数 (其值小于32) 寄存器(用Rs表示) (其值小于32) 在指令执行时将寄存器移位后的内容作为第二操作数参与运算。例如指令: ADD R3,R2,R1,LSR #2 ;R3R2+(R1右移2位) ADD R3,R2,R1,LSR R0 ;R3R2+(R1右移R0位),三、寄存器间接寻址 寄存器间接寻址 就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储单元中。例如以下指令: LDR R0,R1 ;R0R1 STR R0,R1 ;R1R0 第一条指令将以R1的值为地址的存储单元中的内容加载到寄存器R0中。 第二条指令将R0的内容存储到以R1的值为地址的存储单元中。 R1 基址寄存器 R1的内容基地址,四、变址寻址 变址寻址 也叫基址加偏(变)址寻址 将基址寄存器的内容与指令中给出的地址偏移量相加,得到操作数所在的存储器的有效地址。 变址寻址方式常用于访问某基地址附近的地址单元。,例如: LDR R0,R1,4 ;R0mem32R14,五、堆栈寻址 堆栈寻址 堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针SP)指向一块存储区域(堆栈)。 堆栈可分为两种增长方式: 向上生长:向高地址方向生长,称为递增堆栈。 向下生长:向低地址方向生长,称为递减堆栈。,根据堆栈指针指向的数据位置的不同,可分为: 满堆栈 堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈; 空堆栈 堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 这样就有4种类型的堆栈表示递增和递减的满和空堆栈的各种组合。,四种类型的堆栈工作方式 满递增堆栈FA( Full Ascending ): 堆栈指针指向最后压入的数据,且由低地址向高地址生长。 满递减堆栈FD: 堆栈指针指向最后压入的数据,且由高地址向低地址生长。 空递增堆栈EA: 堆栈指针指向下一个将要放入数据的空位置,且由低地址向高地址生长。 空递减堆栈ED( Empty Descending ): 堆栈指针指向下一个将要放入数据的空位置,且由高地址向低地址生长。,六、块拷贝寻址 块拷贝寻址 把存储器中的一个数据块加载到多个寄存器中,或者是把多个寄存器中的内容保存到存储器中。 应用指令:块拷贝寻址是多寄存器传送指令LDM/STM的寻址方式,因此也叫多寄存器寻址。 块拷贝寻址操作中的寄存器,可以是R0-R15这16个寄存器的子集(一部分),或是所有寄存器。,4种寻址操作 LDMIA / STMIA Increment After(先传送,后地址加4) LDMIB / STMIB Increment Before(先地址加4 ,后传送) LDMDA / STMDA Decrement After(先传送,后地址减4) LDMDB / STMDB Decrement Before (先地址减4,后传送),七、相对寻址 相对寻址 与基址变址寻址方式相类似,相对寻址以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。 相对寻址指令举例如下: BL SUBRl ;调用到SUBRl子程序 . . . ; SUBRl应为24位有符号数 SUBR1 MOV PC, LR ;返回,2.2.3 ARM指令集,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)指令格式 SWPcondB Rd,Rm,Rn B为可选后缀,若有B,则交换字节,否则交换32位字 Rd为被加载的寄存器 Rm的数据用于存储到Rn所指的地址中 若Rm与Rd相同,则为寄存器与存储器内容进行交换 Rn为要进行数据交换的存储器地址,Rn不能与Rd和Rm相同。,(2)指令举例 SWP R1,R1,R0 ;将R1的内容与R0指向的存储单元的内容进行交换。 SWPB R1,R2,R0 ;将R0指向的存储单元的内容读取1字节数据到R1中(高24位清零),并将R2的内容写入到该内存单元中(最低字节有效),二、数据处理指令 1、数据处理指令概述 (1)ARM数据处理指令的功能 主要完成寄存器中数据的算术和逻辑运算操作。 (2)ARM数据处理指令的特点 操作数来源:所有的操作数要么来自寄存器,要么来自立即数,不会来自存储器。 操作结果:如果有结果,则结果一定是为32位宽、或64位宽(长乘法指令),并且放在一个或两个寄存器中,不会写入存储器。 有第二个操作数(除了乘法指令) Operand2 :切记其三种形式:立即数、寄存器、寄存器移位。 乘法指令的操作数:全部是寄存器。,(3)ARM数据处理指令分类 22条可分为5类: 算术运算指令: ADD ADC SUB SBC RSB RSC MUL MLA UMULL UMLAL SMULL SMLAL 逻辑运算指令: AND ORR EOR BIC 数据传送指令: MOV MVN 比较指令: CMP CMN 测试指令: TST TEQ 上述指令只能对寄存器操作,不能针对存储器。,(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数据传送指令 功能: 寄存器之间传送。 立即数传送到寄存器中。 实现单纯的移位操作。MOV Rd,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 协处理器数操作指令 coprocessor LDC 协处理器数据加载指令 STC 协处理器数据存储指令 MCR ARM处理器寄存器到协处理器寄存器的数据传送指令 MRC 协处理器寄存器到ARM处理器寄存器的数据传送指令,五、杂项指令 主要由两种类型指令组成,程序状态寄存器操作指令、中断操作指令,一共有5条指令。 状态寄存器操作指令: MRS:读程序状态寄存器指令 MSR:写程序状态寄存器指令 异常中断操作指令: SWI: 软件中断指令 BKPT:断点指令(v5T体系) CLZ: 前导0计数(v5T体系),六、例 题 1、算数逻辑运算指令的应用 例1: 实现乘法的指令段 MOV R0,R0,LSL #n ;R0=R0n;R0= R0*2n ADD R0,R0,R0,LSL #n ;R0=R0+R0*2n= R0*(2n+1) RSB R0,R0,R0,LSL #n ;R0=R0*2n-R0= R0*(2n-1),例2:64位数据运算 假设R0和R1存放一个64位数据,R0中存放数据的低32位;R2和R3中存放另一个64位数据,R2中存放数据的低32位。对这两个64位数进行加、减和比较运算。(R1,R0)、(R3,R2) 两个64位数据的加法运算,结果保存到R0和R1中。 ADDS R0,R0,R2 ;低32位相加,设置CPSR的C标志位。 ADC R1,R1,R3 ;高32位的带位相加,两个64位数据的减法运算,结果保存到R0和R1中。 SUBS R0,R0,R2 ;低32位相减,设置CPSR的C标志位。 SBC R1,R1,R3 ;高32位的带位相减 两个64位数据的比较操作,并设置CPSR中的条件标志位。 CMP R1,R3 ;比较高32位 CMPEQ R0,R2 ;如果高32位相等,比较低32位,例3:转换内存中数据存储方式 将寄存器R0中的数据存储方式转换成另一种存储方式。指令执行前R0中数据存储方式为:R0=A,B,C,D;指令执行后R0中数据存储方式为:R0=D,C,B,A。 EOR R1,R0,R0, ROR #16 ;R1=AC,BD,CA,DB BIC R1,R1,#OxFF0000 ;R1=AC,0,CA,DB MOV R0,R0,ROR #8 ;R0=D,A,B,C EOR RO,RO,R1,LSR #8 ;R0=D,C,B,A ;R0=D,A,B,C异或R1=0,AC,0,CA,2、跳转指令的应用 例1:子程序的调用 BL指令在执行跳转操作的同时保存下一条指令的地址,用于从被调用的子程序中返回。 BL function ;调用子程序function ;子程序结束后,程序将返回到这里执行 function ;子程序的程序体 MOV PC,LR ;子程序中的返回语句,例2:条件执行 实现类似于C语言中的if-else功能的代码段。下例的功能为求最大公约数。 C语言代码为: int gcd (int a,int b) while (a!=b) if (ab) a=a-b; else b=b-a; return a; ,对应的ARM汇编代码段。(代码执行前R0中存放a,R1中存放b;代码执行后R0中存放最大公约数。 gcd CMP R0,R1 ;比较a和b的大小 SUBGT R0,R0,R1 ;if(ab) a=a-b SUBLT R1,R1,R0 ;if(ba) b=b-a BNE gcd ;if(a!=b)跳转到gcd继续执行 MOV PC,LR ;子程序结束,返回,例3:循环语句 将内存中从0x400800开始的100个字数据相加,其结果存于R3、R2中(R3中为高32位)。 LDR R0,=0x400800 MOV R1,#100 ;初始化循环次数 MOV R2,#0 MOV R3,#0 loop ;循环体 LDR R4,R0,#4 ADDS R2,R2,R4 ADC R3,R3,#0或者ADDCS R3,R3,#1 SUBS R1,R1,#1 ;循环计数器减1,设置条件标志 BNE loop ;循环计数器不为0,跳到loop继续执行 ;循环计数器为0,程序继续执行,例4:链表操作中的条件码应用 在链表中搜索与某一数据相等的元素。 链表的每个元素包括两个字,第1个字中包含一个字节数据;第2个字中包含指向下一个链表元素的指针,当这个指针为0时表示链表结束。 代码执行前R0指向链表的头元素,R1中存放将要搜索的数据;代码执行后R0指向第1个匹配的元素,或者当没有匹配元素时,R0为0。,SEARCH CMP R0,#0 ;R0指针是否为空 LDRNEB R2,R0 ;读取当前元素中的字节数据 CMPNE R1,R2 ;判断数据是否为搜索的数据 LDRNE R0,R0,#4 ;如果不是,指针R0指

温馨提示

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

评论

0/150

提交评论