嵌入式系统原理与开发:arm24_第1页
嵌入式系统原理与开发:arm24_第2页
嵌入式系统原理与开发:arm24_第3页
嵌入式系统原理与开发:arm24_第4页
嵌入式系统原理与开发:arm24_第5页
已阅读5页,还剩195页未读 继续免费阅读

下载本文档

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

文档简介

1、嵌入式系统原理与开发 第二章 嵌入式处理器第二章 嵌入式处理器2.1 引言 2.2 嵌入式处理器概述 2.3ARM处理器基础 2.5ARM程序设计基础2.4ARM指令系统2.4 ARM指令系统 2.4.1 ARM编程模型 2.4.2 ARM寻址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集2.4.1 ARM编程模型2.4 ARM指令系统 体系结构 CISC和RISC 流水线 数据类型 处理器模式 处理器工作状态 寄存器组织 异常 存储器和存储器映射I/O 1、嵌入式微处理器体系结构每个嵌入式系统至少包含一个嵌入式微处理器 嵌入式微处理器体系结构可采用冯诺依曼(Von Neuman

2、n)结构或哈佛(Harvard)结构地址数据主存储器MOV r8,#8CPUPC指令程序存储器CPUPC地址数据存储器MOV r8,#8地址数据冯诺依曼结构哈佛结构1、存储器结构冯诺依曼体系结构与哈佛体系结构冯诺依曼体系结构特点:数据和指令都存储在同一存储器中。通用PC,ARM 7。哈佛体系结构特点:数据存储器和程序都存储分开;数据存储器的带宽较宽;DSP、ARM91、存储器结构冯诺依曼体系结构与哈佛体系结构冯.诺曼结构处理器指令流的定时关系示意图 CISC和RISCCISC:复杂指令集(Complex Instruction Set Computer)具有大量的指令和寻址方式,指令长度可变8

3、/2原则:80%的程序只使用20%的指令大多数程序只使用少量的指令就能够运行。RISC:精简指令集(Reduced Instruction Set Computer)只包含最有用的指令,指令长度固定确保数据通道快速执行每一条指令使CPU硬件结构设计变得更为简单CISC与RISC的数据通道IFIDREGALUMEM开始退出IFIDALUMEMREG微操作通道开始退出单通数据通道RISC:Load/Store结构CISC:寻址方式复杂CISC的背景和特点 背景: 存储资源紧缺, 强调编译优化增强指令功能,设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的(微程序)指令系统来实现为

4、节省存储空间,强调高代码密度,指令格式不固定,指令可长可短,操作数可多可少寻址方式复杂多样,操作数可来自寄存器,也可来自存储器采用微程序控制,执行每条指令均需完成一个微指令序列CPI ,指令越复杂,CPI越大。CISC的主要缺点指令使用频度不均衡。高频度使用的指令占据了绝大部分的执行时间,扩充的复杂指令往往是低频度指令。大量复杂指令的控制逻辑不规整,不适于VLSI工艺VLSI的出现,使单芯片处理机希望采用规整的硬联逻辑实现,而不希望用微程序,因为微程序的使用反而制约了速度提高。(微码的存控速度比CPU慢5-10倍)。软硬功能分配复杂指令增加硬件的复杂度,使指令执行周期大大加长,直接访存次数增多

5、,数据重复利用率低。不利于先进指令级并行技术的采用流水线技术RISC基本设计思想减小CPI: CPUtime=Instr_Count * CPI * Clock_cycle精简指令集:保留最基本的,去掉复杂、使用频度不高的指令采用Load/Store结构,有助于减少指令格式,统一存储器访问方式采用硬接线控制代替微程序控制RISC的提出与发展Load/Store结构提出: CDC6600(1963)-CRAY1(1976)RISC思想最早在IBM公司提出,但不叫RISC,IBM801处理器是公认体现RISC思想的机器。1980年,Berkeley的Patterson和Dizel提出RISC名词,

6、并研制了RISC-,实验样机。1981年Stenford的Hennessy研制MIPS芯片。85年后推出商品化RISC: MIPS1(1986)和SPARC V1(1987)典型的高性能RISC处理器SUN公司的SPARC(1987)MIPS公司的SGI:MIPS(1986)HP公司的PA-RISC,IBM, Motorola公司的PowerPCDEC、Compac公司的Alpha AXPIBM的RS6000(1990)第一台Superscalar RISC机 CISC与RISC的对比类别CISCRISC指令系统指令数量很多较少,通常少于100执行时间有些指令执行时间很长,如整块的存储器内容拷

7、贝;或将多个寄存器的内容拷贝到存贮器没有较长执行时间的指令编码长度编码长度可变,1-15字节编码长度固定,通常为4个字节寻址方式寻址方式多样简单寻址操作可以对存储器和寄存器进行算术和逻辑操作只能对寄存器对行算术和逻辑操作,Load/Store体系结构编译难以用优化编译器生成高效的目标代码程序 采用优化编译技术,生成高效的目标代码程序 3. 流水线 2.4.1 ARM编程模型 流水线技术是现代微处理器普遍采用的一种技术,它可以使得几条指令并行执行,因此可以大大提高处理器的运行效率。 3、流水线技术流水线(Pipeline)技术:几个指令可以并行执行 提高了CPU的运行效率 内部信息流要求通畅流动

8、译码取指执行add译码取指执行sub译码取指执行cmp时间AddSubCmp指令流水线以ARM为例为增加处理器指令流的速度,ARM7 系列使用3级流水线.允许多个操作同时处理,比逐条指令执行要快。 PC指向正被取指的指令,而非正在执行的指令FetchDecodeExecute从存储器中读取指令解码指令寄存器读(从寄存器Bank)移位及ALU操作寄存器写(到寄存器Bank )PCPCPC - 4PC-2PC - 8PC - 4ARMThumb 最佳流水线该例中用6个时钟周期执行了6条指令所有的操作都在寄存器中(单周期执行)指令周期数 (CPI) = 1 操作周期 1 2 3 45 6 ADD S

9、UB MOV AND ORR EOR CMP RSBFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDecodeExecuteFetchDecodeFetchFetch LDR 流水线举例该例中,用6周期执行了4条指令指令周期数 (CPI) = 1.5 周期 操作123456 ADD SUB LDR MOV AND ORRFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDataWritebackFetch

10、DecodeExecuteFetchDecodeFetch分支流水线举例流水线被阻断注意:内核运行在ARM状态周期 1 2 3 4 5 0 x8000 BL 0 x8004 X0 x8008 XX0 x8FEC ADD0 x8FF0 SUB0 x8FF4 MOV地址 操作FetchDecodeExecuteFetchDecodeExecuteFetchDecodeFetchFetchDecodeExecuteLinkretAdjustFetchDecodeFetch超流水线超流水线(superpiplined)是指某型CPU内部的流水线超过通常的56步以上,例如Pentium pro的流水线就

11、长达14步。将流水线设计的步(级)数越多,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。 超标量执行超标量(Superscalar)执行:超标量CPU采用多条流水线结构 执行1取指指令译码2译码1执行2执行1取指译码2译码1执行2流水线1流水线2数据回写流水线技术中涉及到的两个问题相关:在一个流水线系统中,如果第二条指令需要用到第一条指令的结果,这种情况叫做相关。目前解决这个问题的方法是乱序执行。条件转移分支预测技术3. 流水线 2.4.1 ARM编程模型从程序存储器中读取指令,放入流水线中 操作码和操作数被译码,决定执行什么功能,为下一个时钟周期准备数据路径所需要的控制信号执行

12、已译码的指令取 指译 码执 行ARM7的3级流水线: 4. 数据类型 ARM处理器支持以下数据类型:2.4.1 ARM编程模型 Byte字节,8位; Halfword半字,16位(半字必须与2字节边界对准); Word字,32位(字必须与4字节边界对准)。4. 数据类型 2.4.1 ARM编程模型图2-8 ARM数据类型存储图 ARM存储数据类型ARM处理器支持以下六种数据类型: 8位有符号和无符号字节。16位有符号和无符号半字,以2字节的边界对齐。32位有符号和无符号字,以4字节的边界对齐。5. 处理器模式 ARM体系结构支持7种处理器模式 :2.4.1 ARM编程模型处理器模式说 明用户

13、usr程序正常执行模式FIQ fiq支持高速数据传输或通道处理IRQ irq通用中断处理管理 svc操作系统保护模式中止 abt虚拟存储器或存储器保护未定义 und支持硬件协处理器的软件仿真系统 sys运行特权操作系统任务处理器模式说明备注 用户 (usr)正常程序执行模式不能直接切换到其它模式 系统 (sys)运行操作系统的特权任务与用户模式类似,但具有可以直接切换到其它模式等特权 快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护模式系统复位和软件中断响应时进入此模式 中止 (abt

14、)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器软件仿真未定义指令异常响应进入此模式处理器工作模式(1)ARM处理器有7种工作模式CPU模式的转变:软件控制异常外部中断处理器工作模式(2)特权模式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断

15、响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq) 系统 (sys)处理器工作模式(3)用户和系统模式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sy

16、s)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。 系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系

17、统的一些特权任务可以使用这个模式访问一些受控的资源。 系统 (sys) 用户 (usr)ARM微处理器:CPU模式User模式程序不能访问有些受保护的资源只能通过异常的形式来改变CPU的当前运行模式特权模式可以存取系统中的任何资源System模式与User模式的运行环境一样但是它可以不受任何限制的访问任何资源该模式主要用于运行系统中的一些特权任务FIQ模式IRQ模式Supervisor模式Abort模式Undefined模式异常模式:主要是在外部中断或者程序执行非法操作时会触发6. 处理器工作状态 ARM处理器具有特殊的两种工作状态:2.4.1 ARM编程模型 ARM状态:32位,执行字对准的

18、ARM指令; Thumb状态:16位,执行半字对准的Thumb指令。 ARM处理器的操作状态可以通过BX指令(分支和交换指令)在ARM状态和Thumb状态之间切换。例:从ARM状态切换到Thumb状态: LDR R0,=Label+1 BX R0从Thumb状态切换到ARM状态: LDR R0,=Label BX R07. 寄存器组织 ARM处理器共有37个寄存器: 2.4.1 ARM编程模型 31个通用寄存器:32位,含程序计数器PC; 6个状态寄存器:32位,只使用了其中的12位。 当编写用户程序时,37个寄存器中仅有15个通用寄存器r0r14、程序计数器PC(r15)和当前程序状态寄存器

19、CPSR需要考虑。其余寄存器仅用于系统级编程和异常处理(如中断)。 寄存器组织ARM处理器有37个寄存器 30个通用寄存器:堆栈及其他通用寄存器 6个状态寄存器 1个PC(程序计数器)这些寄存器不能同时看到不同的处理器状态和工作模式确定哪些寄存器是对编程者是可见的ARM微处理器: ARM State寄存器1.ARM状态下的通用寄存器通用寄存器包括R0R15,可以分为三类:未分组寄存器R0R7;分组寄存器R8R14程序计数器PC(R15)未分组寄存器R0R7 所有模式下,R0-R7所对应的物理寄存器都是相同的 这八个寄存器是真正意义上的通用寄存器,ARM体系结构中对它们没有作任何特殊的假设,它们

20、的功能都是等同的。在中断或者异常处理程序中一般都需要对这几个寄存器进行保存。分组寄存器R8R14访问的物理寄存器取决于当前的处理器模式,若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。 R8-R13各有两组物理寄存器:一组为FIQ模式,另一组是除FIQ以外的其他模式。R13-R14各有6个分组的物理寄存器,一个用于用户模式和系统模式,其他5个分别用于5种异常模式。R13(也被称为SP指针)被用作栈指针,通常在系统初始化时需要对所有模式下的SP指针赋值,当CPU在不同的模式时栈指针会被自动切换成相应模式下的值。R14有两个用途,一是在调用子程序时用于保存调用返回地址,二是在

21、发生异常时用于保存异常返回地址。程序计数器PC(R15)用作程序计数器(PC),可以被读写ARM state: bits 1:0为0,bits31:2即为 PC. THUMB state:bit 0为0,bits31:1即为 PC3.ARM状态下的状态寄存器R16 寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。每一种运行模式下又都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status

22、Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。由于用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。CPSRCPSR(当前程序状态寄存器)在所有的模式下都是可以读写的,它主要包含:条件标志中断使能标志当前处理器的模式其它的一些状态和控制标志ARM微处理器:程序状态寄存器置0表示执行32bit的ARM指令置1表示执行16bit的Thumb指令 NegativeZeroCarryOverflowIRQ中断的响应:置1:禁止响应置0:允许响应FIQ中断的响应:置1:禁止

23、响应置0:允许响应条件标志模式控制位ARM/Thumb控制标志中断标志标志位含 义N当用两个补码表示的带符号数进行运算时,N=1 表示运算的结果为负数;N=0 表示运算的结果为正数或零;ZZ=1 表示运算的结果为零;Z=0表示运算的结果为非零;C可以有4种方法设置C的值: 加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。 对于其他的非加/减运算指令,C的值通常不改变。V可以有2种方法设置V的值: 对于加

24、/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。 对于其他的非加/减运算指令,V的值通常不改变。Q在ARM v5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其他版本的处理器中,Q标志位无定义。ARM微处理器:程序状态寄存器模式控制位M0-M47. 寄存器组织-当前程序状态寄存器CPSR SPSR 和CPSR具有相同的格式 2.4.1 ARM编程模型Thumb状态下的寄存器组织两种状态下的寄存器组织的关系Thumb状态下的寄存器组织与ARM状态下的寄存器组织的关系:Thumb状态下和ARM状态下的R0R7是相同的。Thu

25、mb状态下和ARM状态下的CPSR和所有的SPSR是相同的。Thumb状态下的SP对应于ARM状态下的R13。Thumb状态下的LR对应于ARM状态下的R14。 Thumb状态下的程序计数器对应于ARM状态下R158. 异常 异常(exception)是指由内部或外部源产生从而使处理器需要处理的一个事件。 2.4.1 ARM编程模型 例如,外部中断或试图实行未定义的指令都会引起异常的发生。 处理异常之前,处理器必须保存当前的状态,以便在异常处理完成后,能够使原来的出现重新执行。 异常ARM体系结构中的异常,与8位/16位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。8. 异常

26、 ARM支持7种类型的异常。对于每种异常,处理器将强制从异常对应的某个固定地址开始执行程序。这些固定地址称为异常向量。 2.4.1 ARM编程模型 多个异常可能会同时发生,因此在ARM中就通过给各个异常赋予不同的优先级来确定处理异常的顺序。1 ARM体系结构所支持的异常类型ARM CPU将引起异常的类型分为7种8. 异常 优先级按照从高到低的顺序排列如下: 2.4.1 ARM编程模型复位数据异常中止FIQIRQ预取指异常中止SWI、未定义指令(这两种异常的指令编码互斥,不可能同时发生) 异常类型具体含义复位当处理器的复位电平有效时产生复位异常,程序跳转到复位异常处理程序处执行。未定义指令当AR

27、M处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。软件中断该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。指令预取中止若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。数据中止若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。IRQ(外部中断请求)当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。FIQ(快速中断请求)当处理

28、器的快速中断请求引脚有效且CPSR中的F位为0时,产生FIQ异常。应用程序中的异常处理当系统运行时,异常可能会随时发生,为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理,采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序,当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序,当异常处理完成以后,返回到主程序继续执行。 异常向量 地 址异 常进入模式0 x0000,0000复位管理模式0 x0000,0004未定义指令未定义模式0 x0000,0008软件中断管理模式0 x0000,000C中止

29、(预取指令)中止模式0 x0000,0010中止(数据)中止模式0 x0000,0014保留保留0 x0000,0018IRQIRQ0 x0000,001CFIQFIQ4 对异常的响应当一个异常出现以后,ARM微处理器会执行以下几步操作 :1、将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。 3、将CPSR复制到相应的SPSR中。3、根据异常类型,强制设置CPSR的运行模式位。 4、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 5 异常返回1、将连接寄存器LR的值减去相应的偏移量后送到PC中。3、将SPSR复制回C

30、PSR中。3、若在进入异常处理时设置了中断禁止位,要在此清除。6 异常进入/退出时的指令返回指令以前的状态ARM R14_xThumb R14_xBLMOV PC,R14PC4PC3SWIMOVS PC,R14_svcPC4PC3UDEFMOVS PC,R14_undPC4PC3FIQSUBS PC,R14_fiq,4PC4PC4IRQSUBS PC,R14_irq,4PC4PC4PABTSUBS PC,R14_abt,4PC4PC4DABTSUBS PC,R14_abt,8PC8PC8RESETNA注意:1、在此PC应是具有预取中止的BL/SWI/未定义指令所取的地址。3、在此PC是从FIQ

31、或IRQ取得不能执行的指令的地址。3、在此PC是产生数据中止的加载或存储指令的地址。4、系统复位时,保存在R14_svc中的值是不可预知的。例子: 用户模式到 FIQ模式*spsr_fiqcpsrr7r4r5r2r1r0r3r6r15 (pc)r14_fiqr13_fiqr12_fiqr10_fiqr11_fiqr9_fiqr8_fiqr14 (lr)r13 (sp)r12r10r11r9r8用户模式 CPSR 复制到 FIQ 模式 SPSRcpsrr15 (pc)r14 (lr)r13 (sp)r12r10r11r9r8r7r4r5r2r1r0r3r6r14_fiqr13_fiqr12_fi

32、qr10_fiqr11_fiqr9_fiqr8_fiq返回一个从用户模式计算的地址,PC值存储在FIQ模式Registers in useRegisters in use异常用户模式FIQ 模式spsr_fiq9. 存储器和存储器映射I/O 与单片机等简单系统相比,现在一些复杂的嵌入式系统中,存储系统的功能更加强大,可能包含有多种现代计算机存储技术,如Cache和Write Buffer、MMU、存储保护机制、快速上下文切换等。 基于ARM内核的嵌入式系统可能包含Flash、ROM、SRAM、SDRAM等多种类型的存储器,不同类型的存储器存取速度和数据宽度等都不尽相同。2.4.1 ARM编程模

33、型9. 存储器和存储器映射I/O 存储系统的设计可以是多种多样的,但是应当遵循一定的规则,否则可能会引起一些不必要的麻烦。2.4.1 ARM编程模型例如: 可能使存储系统的实现比较困难; 可能导致向其它ARM处理器的移植出现麻烦; 可能引起一些标准软件(如编译器)的不适应。 基于系统设计和编程的考虑,关于ARM存储系统一般只需涉及地址空间、存储器格式、存储器访问对准以及存储器映射I/O等方面的问题。 9. 存储器和存储器映射I/O-地址空间 ARM体系结构使用232个8位字节的单一、线性地址空间,字节地址的范围为02321; 也可以将地址空间看作由230个32位的字组成,字地址可被4整除,且按

34、字对准,例如以A为字对准地址的字地址由A、A1、A2、A3共4个字节组成; 在ARM体系结构v4以上版本中,也可以将地址空间看作由231个16位的半字组成,半字地址可被2整除,且按半字对准,例如以A为字对准地址的半字地址由A、A1共2个字节组成。2.4.1 ARM编程模型9. 存储器和存储器映射I/O-存储器格式 存储器格式是指字、半字、字节在存储器中存放的方式,也反映了存储器中字、半字、字节之间的映射关系。 存储器格式包括小端和大端两种格式。 2.4.1 ARM编程模型存储器系统有两种映射机制:小端存储器系统: 在小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线70(低

35、位对齐)。 大端存储器系统: 在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线3124(高位对齐) 。 0 x12345678字数据的大小端存储方式存储器格式0 x12高位地址低位地址0 x340 x560 x78大端模式0 x78高位地址低位地址0 x560 x340 x12小端模式大端的数据存放格式低地址高地址地址A地址A+1地址A+2地址A+3最高有效字节的地址就是该word的地址最高有效字节位于最低地址word a=0 x f6 73 4b cdf6734bcd小端的数据格式低地址高地址地址A地址A+1地址A+2地址A+3最低有效字节的地址就是该word的地址最

36、低有效字节位于最低地址word a=0 x f6 73 4b cdf6734bcd9 存储器和存储器映射I/O-存储器格式 2.4.1 ARM编程模型大、小端存储格式对程序的影响 实例大端: 小端:0 xb32045000 xddddddd00 xb32045000 xddddddd0 f6 f6 73 73 4b 4b cd cddada0000 变量A:word A=0 x f6 73 4b cd,在内存中的起始地址为0 x b3 20 45 00变量B:half word B=218,在内存中的起始地址为0 x dd dd dd d0问题:half word B=218与word C=2

37、18在内存中的存放方式有何不同?请分大端和小端两种情况说明。9 存储器和存储器映射I/O-存储器访问对准 对于非对准的取指,在ARM工作状态下,未对准的地址写入R15后,结果将不可预知或忽略地址位1:0;在Thumb状态下,未对准的地址写入R15后,则通常忽略地址位0。 对于非对准的数据访问,则体系结构可能定义成以下行为之一:2.4.1 ARM编程模型 不可预知; 忽略使访问非对准的低地址位; 忽略使访问非对准的低地址位,但使用这些位控制加载数据的循环移位(适用于LDR和SWP指令)。 9 存储器和存储器映射I/O-存储器映射I/O ARM系统实现I/O功能的标准方法是使用存储器映射I/O。

38、这种方法使用特定的存储器地址,对这些地址加载和存储,即可完成I/O操作。 通常,对存储器映射I/O地址加载对应输入,对对存储器映射I/O地址存储对应输出。 另外,加载和存储也可执行控制功能,替代或附加到正常的I/O操作上。 2.4.1 ARM编程模型2.4 ARM指令系统 2.4.1 ARM编程模型 2.4.2 ARM寻址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集 寻址方式是指根据指令给出的地址码寻找真实操作数地址的方式。 寻址方式的多样化一方面出于编程的需要,另一方面可以增强程序设计的灵活性。2.4.2 ARM寻址方式2.4 ARM指令系统 2.4.2 ARM寻址方式2.4

39、 ARM指令系统 寄存器寻址 立即寻址 寄存器移位寻址 寄存器间接寻址 基址寻址 多寄存器寻址 堆栈寻址 块拷贝寻址 相对寻址 1. 寄存器寻址 指令地址码给出寄存器的编号,寄存器中的内容为操作数。 2.4.2 ARM寻址方式例如: ADD R0,R1,R2;R0R1+R2 写操作数的顺序为:第一个寄存器R0为结果寄存器,第二个寄存器R1为第一操作数寄存器,第三个寄存器R2为第二操作数寄存器。 注意2. 立即寻址 指令操作码后的地址码是立即数,即操作数本身。 2.4.2 ARM寻址方式例如: ADD R3,R3,#1;R3R3+1 AND R8,R7,#&FF;R8R77:0 立即数的表示以“

40、#”为前缀,十六进制的立即数在“#”后面加“&”符号。 注意3. 寄存器移位寻址 寄存器移位寻址是ARM指令集特有的寻址方式。第2个操作数与第1个操作数结合之前,选择进行移位操作。 2.4.2 ARM寻址方式例如: ADD R3,R2,R1,LSL #3;R3R2+8R1 3. 寄存器移位寻址 可采取的移位操作包括:2.4.2 ARM寻址方式 LSL:逻辑左移(Logical Shift Left)。寄存器中字的低端空出的位补0。 LSR:逻辑右移(Logical Shift Right)。寄存器中字的高端空出的位补0。 ASR:算术右移(Arithmetic Shift Right)。算术移

41、位的对象是带符号数。在移位过程中必须保持操作数的符号不变。若源操作数为正数,则字的高端空出的位补0;若源操作数为负数,则字的高端空出的位补1。 ROR:循环右移(ROtate Right)。从字的最低端移出的位填入字的高端空出的位。 RRX:扩展为1的循环右移(Rotate Right eXtended by 1 place)。操作数右移1位,空位(位31)用原C标志填充。3. 寄存器移位寻址 2.4.2 ARM寻址方式移位操作过程4. 寄存器间接寻址 指令地址码给出寄存器的编号,寄存器为地址指针,存放操作数的有效地址。 2.4.2 ARM寻址方式例如:LDR R0,R1;R0R1STRR0,

42、R1;R0R1 5. 基址寻址 基址寻址是将基址寄存器的内容与指令中给出的位移量相加,形成操作数有效地址。 基址寻址用于访问基址附近的存储单元。 包括基址加偏移量寻址和基址加索引寻址,可以将寄存器间接寻址看作是位移量为0的基址加偏移量寻址。 2.4.2 ARM寻址方式5. 基址寻址-基址加偏移量寻址 基址加偏移量寻址中的偏移量最大为4KB,可分为前索引寻址和后索引寻址。 2.4.2 ARM寻址方式前索引寻址举例:LDRR0,R1,#4;R0R1+4 5. 基址寻址-基址加偏移量寻址2.4.2 ARM寻址方式例:LDRR0,R1,#4!;R0R1;R1R1+4 后索引寻址举例:LDR R0,R1

43、,#4;R0R1;R1R1+4这种改变基址寄存器指向下一个传送的地址对数据块传送很有用,还可以采用带自动索引的前索引寻址实现。注意5. 基址寻址-基址加索引寻址 基址加索引寻址是指令指定一个基址寄存器,再指定另一个寄存器(称为索引),其值作为位移加到基址上形成存储器地址。 2.4.2 ARM寻址方式例:LDR R0,R1,R2;R0R1+R2 6. 多寄存器寻址 多寄存器寻址是指一次可以传动多个寄存器的值,允许一条指令可以传送16个寄存器的任何子集,包括16个寄存器。 2.4.2 ARM寻址方式例:LDMIAR1,R0,R2,R5;R0R1;R2R1+4;R5R1+8由于传送的数据总是32位的

44、字,因此基址寄存器R1应当字对准。注意7. 堆栈寻址 堆栈是一种按照特定顺序进行存取的存储区。这种特定的顺序是指“后进先出”(LIFO)或“先进后出”(FILO)。 使用堆栈时需要使用一个专门的寄存器作为堆栈指针,栈指针所指定的存储单元就是堆栈的栈顶。 如果堆栈指针指向最后压入堆栈的有效数据项,就称为满堆栈(full stack);如果堆栈指针指向下一个数据项放入的空位置,就称为空堆栈(empty stack)。2.4.2 ARM寻址方式7. 堆栈寻址 另外,根据堆栈存储区地址增长的方向,可将堆栈分为递增堆栈(ascending stack)和递减堆栈(descending stack)。 以

45、上表示递增、递减、满、空的堆栈的各种组合就产生了4种堆栈类型。 ARM支持所有这4种类型的堆栈,即满递增、空递增、满递减、空递减。 ARM指令使用push向堆栈写数据,称为进栈;使用pop从堆栈读数据,称为出栈。 2.4.2 ARM寻址方式堆栈指针指向最后压入的数据且由低地址向高地址生成堆栈指针指向最后压入的数据且由高地址向低地址生成堆栈指针指向下一个将要放入数据的空位置且由低地址向高地址生成堆栈指针指向下一个将要放入数据的空位置且由高地址向低地址生成8. 块拷贝寻址 从堆栈的角度来看,多寄存器传送指令是把一块数据从存储器的某一个位置拷贝到另一位置。 从块拷贝的角度来看,指令还要基于数据存储在

46、基址寄存器地址之上还是之下,地址在存储第一个值之前或之后增加或减少。这两种角度的映射均取决于执行加载操作还是存储操作。 2.4.2 ARM寻址方式8. 块拷贝寻址 2.4.2 ARM寻址方式向上生长向下生长满空满空增 加之前STMIBSTMFALDMIBLDMED之后STMIASTMEALDMIALDMFD减 少之前LDMDBLDMEASTMDBSTMFD之后LDMDALDMFASTMDASTMED表2-4 多寄存器加载和存储指令映射 8. 块拷贝寻址 2.4.2 ARM寻址方式例如:LDMIAR0!,R2-R9;将数据加载到R2R9STMIAR1,R2-R9;将数据存入存储器执行指令后,由于

47、引用自动索引“!”,R0的值共增加32,而R1不变。 注意8. 块拷贝寻址 2.4.2 ARM寻址方式多寄存器指令的后缀含义如下:I:IncrementD:Decrement or Descending stackA:After or Ascending stackB:BeforeF:FullE:Empty例如“FD”即表明是满递减堆栈寻址方式(full descending stack)。 9. 相对寻址 可以将相对寻址看作是以程序计数器PC为基址的一种基址寻址方式。 指令的地址码作为位移量,与PC相加得到操作数的有效地址。 位移量指出了操作数与当前指令之间的相对位置。 2.4.2 ARM寻

48、址方式例:BL SUBR;转移到SUBR;返回到此SUBR;子程序入口地址MOV PC,R14;返回2.4 ARM指令系统 2.4.1 ARM编程模型 2.4.2 ARM寻址方式 2.4.3 ARM指令集 2.4.4 Thumb指令集2.4 ARM指令系统 ARM指令集编码 条件执行 ARM指令格式 ARM存储器访问指令 ARM数据处理指令 ARM分支指令 ARM协处理器指令 ARM杂项指令 ARM伪指令 2.4.3 ARM指令集1. ARM指令集编码 ARM指令集采用32位二进制编码方式,大部分指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现

49、的二进制位。 每条ARM指令都具有不同的编码方式,与不同的指令功能相对应。 2.4.3 ARM指令集1. ARM指令集编码 2.4.3 ARM指令集ARM指令集编码2. 条件执行 条件执行是指只有在当前程序状态寄存器CPSR中的条件码标志满足指定的条件时,带条件码的指令才能执行。 条件转移是绝大多数指令集的标准特征,但ARM指令集将条件执行扩展到所有指令,包括监控调用和协处理器指令。 2.4.3 ARM指令集2. 条件执行2.4.3 ARM指令集图2-17 ARM的条件代码域操作码31:28助记符后缀标志含义0000EQZ置位相等0001NEZ清零不等0010CS/HSC置位大于或等于(无符号

50、=)0011CC/LOC清零小于(无符号)1001LSC清零或Z置位小于或等于(无符号=1011LTN和V不同带符号1101LEZ置位或N和V不同带符号=1110AL任何总是(缺省)1111NV无从不(不要使用)2. 条件执行2.4.3 ARM指令集对于条件执行,需要说明的有以下两点: 注意几乎所有的ARM数据处理指令都可以根据执行结果来选择是否更新条件码标志。当指令中包含后缀“S”时,指令将更新条件码标志。可以根据另一条指令设置的标志,有条件地执行某条指令。3. ARM指令格式 ARM指令集是Load/Store型,只能通过Load/Store指令实现对存储器的访问,其它类型的指令都基于寄存

51、器完成。2.4.3 ARM指令集操作码;指令助记符,如ADD、LDR等可选的条件码;执行条件,如EQ、NE等可选后缀;若指定S,则根据指令执行结果更新CPSR中的条件码目标寄存器存放第一操作数的寄存器第二操作数例:LDR R0, R1 BEQDATAEVENADDSR2,R1,#1SUBNES R2,R1,#0 x20 ARM指令使用的基本格式如下所示: S, , 3. ARM指令格式 2.4.3 ARM指令集4. ARM存储器访问指令-LDR、STR LDR和STR为单一数据传送指令,可传送字和无符号字节、半字和带符号字节、双字。 2.4.3 ARM指令集(1)字和无符号字节 op cond

52、 B T Rd, Rn ;零偏移 op cond B Rd, Rn, Flexoffset ! ;前索引偏移 op cond B Rd, label ;程序相对偏移 op cond B T Rd, Rn ,Flexoffset ;后索引偏移4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 句法:(1)字和无符号字节 指令用于加载或存储寄存器32位字或8位无符号字节。 对于零偏移形式,Rn的值作为传送数据的地址。 对于前索引偏移形式,在传送数据之前,将偏移量加到Rn中,结果作为传送数据的存储器地址。若使用“!”,则结果写回到Rn,且Rn不允许是R15。 对于程序相对偏移形式,

53、汇编器由PC计算偏移量,并将PC作为Rn生成前索引指令。不能使用后缀“!”。 对于后索引形式,Rn的值作为传送数据的存储器地址。数据传送之后,将偏移量加到Rn中,结果写回到Rn。Rn不允许是R15。4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 指令说明:(1)字和无符号字节 LDR R8,R10LDRNE R2,R5,#960!STR R2,R9,#CONSTRB R0, R3,-R8,ASR #24. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 例:(2)半字和带符号字节 op cond type Rd, Rn;零偏移 op cond type R

54、d, Rn, offset !;前索引偏移 op cond type Rd, label;程序相对偏移 op cond type Rd, Rn, offset;后索引偏移4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 句法:(2)半字和带符号字节 指令用于加载寄存器16位半字或带符号8位字节,存储寄存器16位半字。 带符号加载是指带符号扩展到32位。 无符号半字加载是指零扩展到32位。 半字传送的地址必须是偶数,即按照半字对准。 不能将半字或字节加载到R15。 。4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 指令说明:(2)字和无符号字节 LDRE

55、QSHR11,R6LDRHR1,R0,#12STRHR4,R0,R1!LDRSBR1,R6,R3,LSL #4 4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 例:(3)双字 op cond D Rd, Rn;零偏移 op cond D Rd, Rn, offset !;前索引偏移 op cond D Rd, label;程序相对偏移 op cond D Rd, Rn, offset;后索引偏移4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 句法:(3)双字 指令用于加载或存储两个相邻寄存器64位双字。 对于双字传送,地址必须是8的倍数。 4. AR

56、M存储器访问指令-LDR、STR 2.4.3 ARM指令集 指令说明:(3)双字 LDRDR6,R11LDRDR1,R6STRDR4,R9,#24STRDR14,R9,#24STRDR2,R3,R6 4. ARM存储器访问指令-LDR、STR 2.4.3 ARM指令集 例:op cond mode Rn !, reglist 4. ARM存储器访问指令-LDM、STM 2.4.3 ARM指令集 句法: 指令用于加载或存储多个寄存器,可传送R0R15的任何组合。 指令忽略地址的位1:0。 到R15的加载将引起处理器转移到加载地址处的指令 如果Rn包含在寄存器列表中,且用“!”表明要写回,则若op

57、是STM,且Rn是寄存器列表中数字最小的寄存器,则Rn的初值被保存。否则,Rn的加载和存储值不可预知。 4. ARM存储器访问指令-LDM、STM 2.4.3 ARM指令集 指令说明:LDMIAR8,R0,R2,R9STMDBR1!, R3-R6,R11,R12STMFDR13!,R0,R4-R7,LRLDMFDR13!,R0,R4-R7,PCSTMIAR5!,R5,R4,R9LDMDAR2, 4. ARM存储器访问指令-LDM、STM 2.4.3 ARM指令集 例:PLD RnFlexoffset 4. ARM存储器访问指令-PLD 2.4.3 ARM指令集 句法: 指令用于Cache预加载

58、,提示存储系统从后面的几条指令所指定的存储器地址加载,用这种方法可以加速以后的存储器访问。 指令没有地址的对准限制。 指令说明:4. ARM存储器访问指令-PLD2.4.3 ARM指令集PLDR2PLDR0,#CON;CON范围为4KB 例:4. ARM存储器访问指令-SWP 2.4.3 ARM指令集SWP cond B Rd, Rm, Rn 句法: 指令用于在寄存器和存储器之间进行数据交换,可以使用SWP来实现信号量。对于非字对准的处理与LDR、STR指令中的处理方法相同。 指令说明: 例:SWPBR1,R1,R0;交换字节5. ARM数据处理指令 ARM数据处理指令可以完成的功能包括:2.

59、4.3 ARM指令集数据传送算术运算逻辑运算比较测试乘法 5. ARM数据处理指令 ARM数据处理指令的特点 2.4.3 ARM指令集操作数为32位,来自寄存器或定义的立即数。对于操作数可进行符号扩展和零扩展。处理结果除了长乘法指令为64位之外,均为32位,存放在寄存器中。大多数ARM通用数据处理指令都有一个灵活的第二操作数(flexible second operand)。第二操作数operand2可以是 立即数形式 或 寄存器形式 。 32位立即数 Rm,#shift 5. ARM数据处理指令-移位操作2.4.3 ARM指令集ASR:算术右移。即将寄存器内容除以2n。LSR:逻辑右移。即将

60、寄存器内容除以2n。LSL:逻辑左移。即将寄存器内容乘以2n。ROR:循环右移。RRX:带扩展的循环右移。将寄存器内容循环右移1位,进位标志拷贝到位31。5. ARM数据处理指令-移位操作2.4.3 ARM指令集图2-18 移位操作过程 ADD、SUB、RSB、ADC、SBC、RSC op cond S Rd, Rn, Operand25. ARM数据处理指令-算术运算指令 2.4.3 ARM指令集 句法: 指令用于加、减、反减等算术运算,包括带进位的算术运算。 算术运算中如果使用R15作为Rn,则其值为指令的地址加8。如果使用R15作为Rd,则执行转移到结果相应的地址;或者在使用“S”的情况

温馨提示

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

评论

0/150

提交评论