ARM体系结构课件_第1页
ARM体系结构课件_第2页
ARM体系结构课件_第3页
ARM体系结构课件_第4页
ARM体系结构课件_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

第2章 ARM体系结构第2章 ARM体系结构ARM概述

ARM-AdvancedRISCMachines

ARM公司从事基于RISC芯片技术开发的公司,是IP供应商。该企业设计了大量高性能、廉价、耗能低的RISC(精简指令集)处理器。公司的特点是只设计芯片,而不生产。它将技术授权给世界上许多著名的半导体、软件和OEM厂商,并提供服务。IP(IntellectualProperty)知识产权。Fabless(无生产线)RISC(ReducedInstructionSetComputer)

ARM:RISC处理器IP核+FablessARM概述ARM-AdvancedRISCMachinARM公司成立于1981年,最初与英国广播公司合作为英国教育界设计小型机,当时采用的是美国的6502芯片。取得成功后,他们开始设计自己的芯片,受当时美国加洲大学伯克利分校提出的RISC思想的影响,他们设计的芯片也采用RISC体系结构,并命名为“AcornRISCMachine”。ARM公司的第一款芯片ARM1在1985年被设计出来,次年又设计了真正实用的ARM2。ARM2具有32位数据总线和24位地址总线,带有16个寄存器。ARM2可能是当时最简化的32位微处理器,上面仅有30000个晶体管(4年前Motorola公司的68000则有68000个晶体管)。这种精简的结构使ARM2具有优异的低功耗特性,而性能则超过了同期Intel公司的286(134K个晶体管)。1990年ARM公司另外组建了一个名为“AdvancedRISCMachines”的公司,专门从事ARM系列微处理器的开发。1998年ARM公司在伦敦证券交易所和NASDAQ上市。ARM公司成立于1981年,最初与英国广播公司合作为英国教育ARM微处理器的特点体积小、低功耗、低成本、高性能支持Thumb(16位)/ARM(32位)双指令集大量使用寄存器,指令执行速度更快大多数数据操作都在寄存器中完成寻址方式灵活简单,执行效率高指令长度固定

ARM微处理器的特点体积小、低功耗、低成本、高性能2.1RISC技术和流水线技术2.1.1计算机体系结构1.冯·诺依曼体系结构冯·诺依曼机:将数据和指令都存储在存储器中的计算机。(延用至今)计算系统由一个中央处理单元(CPU)和一个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进行读或写。冯·诺依曼简化了十进制的第一台计算机,最大的贡献:提出了二进制的存储程序模式处理器PC存储器指令数据2.1RISC技术和流水线技术2.1.1计算机体系结构冯2.1.1计算机体系结构(2)2.哈佛体系结构为数据和程序提供了各自独立的存储器。程序计数器只指向程序存储器而不指向数据存储器两组数据线允许同时访问指令和数据(访问指令和数据互不干扰)2.1.1计算机体系结构(2)2.哈佛体系结构2.1.2

RISC技术CISC:复杂指令集计算机(ComplexInstructionSetComputer)计算机性能的提高往往是通过增加硬件的复杂性来获得。随着集成电路技术,特别是VLSI(超大规模集成电路)技术的迅速发展,为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加可实现复杂功能的指令和多种灵活的编址方式。甚至某些指令可支持高级语言语句归类后的复杂操作。至使硬件越来越复杂,造价也相应提高。为实现复杂操作,微处理器除向程序员提供类似各种寄存器和机器指令功能外.CISC不适用于嵌入式系统,因为嵌入式要求精简指令。2.1.2RISC技术CISC:复杂指令集计算机(CompRISC:1979年美国加州大学伯克利分校提出精简指令集计算机(ReducedInstructionSetComputer,RISC)RISC的目标:设计出简单有效的指令集。(需要用软件降低硬件执行的指令的复杂度。)RISC能够精简指令集的复杂度,简化指令实现的硬件设计,硬件只执行很有限的最常用的的那部分指令,大部分复杂的操作则由简单指令合成。80%的程序只用到了20%的指令。RISC:编译器处理器(复杂性高)编译器(复杂性高)处理器CISCRISCCISC和RISC的不同编译器处理器编译器处理器CISCRISCCISC和RISC的RISC体系结构特点:大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率(优点:大部分的操作可在寄存器内执行,不需经过处理器,提高了处理速度,寄存器的速度比存储器快。)在进行指令系统设计时,只选择使用频率很高的指令,在此基础上增加少量能有效支持操作系统和高级语言实现以及其他功能的指令,使指令条数大大减少简单的寻址模式采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种使用单周期指令,便于流水线操作执行为提高指令执行速度,大部分指令直接采用硬件电路实现,少量采用微码实现RISC体系结构特点:RISC体系结构特点 ARM体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗。大多数的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率可用加载/存储指令批量传输数据,以提高数据的传输效率可在一条数据处理指令中同时完成逻辑处理和移位处理在循环处理中使用地址的自动增减来提高运行效率RISC体系结构特点 ARM体系结构还采用了一些特别的技术,取指令3执行指令32.1.3流水线技术2.指令的二级流水1.指令的串行执行取指令

取指令部件完成总有一个部件空闲指令预取若取指和执行阶段时间上完全重叠指令周期减半速度提高1倍…执行指令

执行指令部件

完成取指令1执行指令1取指令2执行指令2取指令3执行指令3取指令2执行指令2取指令1执行指令1取指令3执行指令32.1.3流水线技术2.指令的二指令的三级流水线取指译码执行从存储器取指指令译码从寄存器组中读寄存器,移位和ALU操作,将寄存器写回到寄存器组取指译码执行取指译码执行取指译码执行t指令123三级指令流水线功能段划分如下:ARM单周期指令3级流水线操作指令的三级流水线取指译码执行从存储器取指指令译码从寄存器组中三级流水线如何在实际指令中体现?ADDR0,R1,R2SUBR3,R4,#2CMPR5,R1第一个周期:第二个周期:第三个周期:执行完上述指令需要几个周期?三级流水线如何在实际指令中体现?流水线技术(3)ARM7系列微处理器采用3级流水线结构(取指、译码、执行)ARM9系列微处理器采用5级流水线结构(取指、译码、执行、存储器访问、回写)ARM10系列微处理器采用6级流水线结构PXA270微处理器采用7级超级流水线结构

注:流水线级数增加,每一段的工作量减小,处理器可工作在更高的频率,性能得到改善流水线技术(3)ARM7系列微处理器采用3级流水线结构2.2ARM体系结构简介ARM命名规则:ARMxyzTDMIEJFSx:系列y:存储管理/保护单元z:Cache(高速缓冲存储器)2.2ARM体系结构简介ARM命名规则:ARMxyzTD2.2.1ARM体系结构的演变(V1、V2、V3、V4、V5、V6、cortex)一、版本V1本版本包括下列指令:1、乘法指令之外的基本数据处理指令;2、基于字节、字和多字的存储器访问操作指令(Load/Sore);3、子程序调用指令BL在内的跳转指令;4、完成系统调用的软件中断指令SWI。2.2.1ARM体系结构的演变二、版本V2它仍然26位地址的机器,但包含了对32位结果的乘法指令和协处理器的支持。与版本1相比,版本2(2a)增加了下列指令:1、乘和乘加指令;2、支持协处理器的指令;3、对于FIQ模式,提供了额外的影子寄存器;4、SWP指令及SWPB指令。二、版本V2三、版本V3版本3较以前的版本发生了大的变化,具体的改进如下:1、地址空间扩展到了32位,但除了版本3G外的其他版本是向前兼容的,也支持26位的地址空间;2、分开的当前程序状态寄存器CPSR(CurrentProgramStatusRegister)和备份的程序状态寄存器SPSR(SavedProgramStatusRegister),SPSR用于在程序异常中断时保存被中断的程序状态;3、增加了两种异常模式,使操作系统代码可方便地使用数据访问中止异常、指令预取中止异常和未定义指令异常;4、增加MRS指令和MSR指令,用于完对CPSR和SPSR寄存器的读/写;5、修改了原来的从异常中返回的指令。三、版本V3四、版本V4与版本3相比,版本4增加了下列指令:1、有符号、无符号的半字和有符号字节的Load和Store指令。2、增加了T变种,处理器可工作于Thumb状态,在该状态下的指令集是16位的Thumb指令集。3、增加了处理器的特权模式。在该模式下,使用的是用户模式下的寄存器。版本4不再强制要求与26位地址空间兼容,而且还明确了那些指令会引起未定义指令异常。四、版本V4五、版本V5ARM10处理器是最早支持版本5T的(很快也会支持5TE版本)处理器。与版本4相比,版本5的指令集有了如下变化:1、提高了T变种中ARM/Thumb混合使用的效率;2、增加前导零记数(CLZ)指令,该指令可使整数除法和中断优先级排队操作更为有效;3、增加了BKPT(软件断点)指令;4、为协处理器设计提供了更多的可供选择的指令;5、更加严格地定义了乘法指令对条件码标志位的影响。五、版本V5六、版本V6ARM体系版本6是2001年发布的。新架构V6在降低耗电量的同时,还强化了图形处理性能。通过追加有效进行多媒体处理的SIMD功能,将语音及图象的处理功能提高到了原机型的4倍。V6还支持微处理器内核。七、版本V7-Cortex前所未有的低成本实现

六、版本V6表ARM体系结构总结核体系结构

第2章ARM体系结构课件2.2.2ARM体系结构的特征一些特定指令的周期数可变内嵌桶形移位寄存器产生了更为复杂的指令Thumb16位指令集条件执行增强指令:DSP的应用2.2.2ARM体系结构的特征2.2.3ARM体系的变种T变种:

16位指令集M变种:长乘法指令E变种:增强型DSP指令J变种:JAVA加速器SIMD变种:媒体功能扩展2.2.3ARM体系的变种2.2.4ARM系列ARM7ARM9ARM9EARM10EARM11strongARM、XScale2.2.4ARM系列2.2.5ARM存储数据类型字(Word) 在ARM体系结构中,字的长度为32位半字(Half-Word) 在ARM体系结构中,半字的长度为16位

字节(Byte) 在ARM体系结构中,字节的长度为8位。字对齐:四字节对齐半字对齐:两字节对齐2.2.5ARM存储数据类型字(Word)练习:

1.哈佛体系结构和冯·诺依曼体系结构有何不同?

冯·诺依曼机:将数据和指令都存储在存储器中的计算机。计算系统由一个中央处理单元(CPU)和一个存储器组成。存储器拥有数据和指令,并且可以根据所给的地址对它进行读或写。哈佛机:为数据和程序提供了各自独立的存储器。程序计数器只指向程序存储器而不指向数据存储器练习:

1.哈佛体系结构和冯·诺依曼体系结构有何不同?练习:2.ARM7TDMI中的T、D、M、I的含义是什么?ARM7TDMI采用几级流水线?使用何种体系结构?高密度16位的Thumb指令机扩展(带T后缀的)支持片上调试(带D后缀的)、64位乘法指令(带M后缀的)、嵌入式ICE,支持片上断点和调试点(带I后缀的)三级流水线(取指译码执行);使用了冯·诺依曼(VonNeumann)结构,指令和数据共用一条32位总线。练习:2.ARM7TDMI中的T、D、M、I的含义是什么?2.3ARM微处理器工作状态 2.3.1两种工作状态:ARM状态:处理器执行32位的字对齐的ARM指令Thumb状态:处理器执行16位的、半字对齐的Thumb指令 在程序的执行过程中,微处理器可以随时在上述两种状态之间切换。处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。2.3ARM微处理器工作状态 2.3.1两种工作状态:2.3ARM微处理器的工作状态(2)

2.3.2工作状态的切换:ARM指令集和Thumb指令集均有切换处理器状态的指令。通过这些指令就可以在两种工作状态之间切换。V4版本中,BX指令可以实现程序间处理器工作状态切换(BX:带状态切换的跳转指令)V5版本中,BLR、LDR、LDM指令可以实现程序间处理器工作状态切换(BLR:带返回和状态切换的跳转指令)2.3ARM微处理器的工作状态(2) 2.3.2工作状态ARM微处理器的工作状态(2)2.3.2状态切换:

BX{<cond>}<Rm><cond>指令的条件码。忽略时无条件执行。<Rm>寄存器中为跳转的目标地址当<Rm>寄存器的bit[0]为0时,目标地址处的指令为ARM指令当<Rm>寄存器的bit[0]为1时,目标地址处的指令为Thumb指令。注意:ARM微处理器在复位或上电时处于ARM状态,发生异常时也处于ARM状态。如果处理器在Thumb状态进入异常,当异常处理返回时,处理器仍然处在Thumb状态

ARM微处理器的工作状态(2)2.3.2状态切换:2.4ARM微处理器工作模式ARM系统结构支持7种处理器模式:用户模式(usr): 用户应用程序系统模式(sys): 特权模式快速中断模式(fiq):用于快速数据传输中断模式(irq): 通用的中断处理管理模式(svc): 操作系统使用的保护模式终止模式(abt): 数据访问中止或指令预取中止未定义指令模式(und):未定义的指令执行时

管理模式(svc)是系统复位后的默认模式 特权模式(PrivilegedModes) 异常模式(ExceptionModes)异常模式特权模式2.4ARM微处理器工作模式ARM系统结构支持7种处理器模ARM微处理器的运行模式可以通过两种方式改变:软件(特权模式)外部中断或异常处理大多数的应用程序运行在用户模式下,当处理器运行在用户模式下,某些被保护的系统资源不能被访问,也不能改变模式,除非异常发生特权模式可以自由地访问系统资源和改变模式。ARM微处理器的处理器模式(2)ARM微处理器的运行模式可以通过两种方式改变:ARM微处理器2.5ARM处理器寄存器组织

ARM处理器共有37个32位的寄存器:31个通用寄存器,分为三类: 未分组寄存器(UnbankedRegister):R0~R7

分组寄存器(BankedRegister):R8~R14

程序计数器R15(PC指针)6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,目前只使用了其中的一部分在每一种处理器模式下均有一组相应的寄存器与之对应。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器写汇编程序时都会用到2.5ARM处理器寄存器组织 ARM处理器共有37个32位2.5ARM处理器寄存器组织

ARM处理器共有37个32位的寄存器:31个通用寄存器,分为三类: 未分组寄存器(UnbankedRegister):R0~R7

分组寄存器(BankedRegister):R8~R14

程序计数器R15(PC指针)6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,目前只使用了其中的一部分在每一种处理器模式下均有一组相应的寄存器与之对应。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器2.5ARM处理器寄存器组织 ARM处理器共有37个32位2.5.1ARM状态下的寄存器组织未分组寄存器(UnbankedRegister)R0~R7 同一个寄存器名,在ARM微处理器内部只有一个独立的物理寄存器与之对应。 在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途。 在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。

任何可采用通用寄存器的应用场合都可以使用未分组寄存器。2.5.1ARM状态下的寄存器组织未分组寄存器(Unban2.5.1ARM状态下的寄存器组织(2)分组寄存器(BankedRegister)R8~R14 同一个寄存器名,在ARM微处理器内部存在多个独立的物理寄存器 对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。 R8~R12:对应两个不同的物理寄存器,有两种不同的模式: fiq模式(快速中断): R8_fiq~R12_fiq 非fiq模式: R8_usr~R12_usr2.5.1ARM状态下的寄存器组织(2)分组寄存器(Ban2.5.1ARM状态下的寄存器组织(2)分组寄存器(BankedRegister)R8~R14(2)

R13、R14:每个寄存器对应6个不同的物理寄存器 用户模式与系统模式共用一个物理寄存器 另外5个物理寄存器对应于其他5种不同的运行模式 可用下面的方式区分不同的物理寄存器 R13_<mode> R14_<mode> mode为模式:usr、fiq、irq、svc、abt、und2.5.1ARM状态下的寄存器组织(2)分组寄存器(Ban未分组寄存器分组寄存器程序计数器PC异常模式System特权模式未分组寄存器分组寄存器程序计数器PC异常模式System特权2.5.1ARM状态下的寄存器组织(3)寄存器R13 寄存器R13在ARM指令中常用作堆栈指针SP。 在用户应用程序的初始化部分,一般都要初始化每种模式下的R13(R13_svc、R13_irq、R13_fiq、R13_abt和R13_und),使其指向该运行模式的栈空间。

当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。2.5.1ARM状态下的寄存器组织(3)寄存器R132.5.1ARM状态下的寄存器组织(4)寄存器R14 又称子程序链接寄存器(SubroutineLinkRegister)或链接寄存器LR。作用 1.子程序调用时:当执行BL(BLX)子程序调用指令时R14自动被设置成当前子程序的返回地址;当子程序返回时,R14中得到R15(程序计数器PC)的备份。完成子程序返回。(BL为带返回的跳转指令) 2.中断或异常时: 对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。 R14可以作为通用寄存器使用2.5.1ARM状态下的寄存器组织(4)寄存器R142.5.1ARM状态下的寄存器组织(5)程序计数器PC:寄存器R15

寄存器R15用作程序计数器(PC)。在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,位[31:1]用于保存PC。

由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。

R15在程序运行中起到至关重要的作用,存储着下一条要执行的指令的地址2.5.1ARM状态下的寄存器组织(5)程序计数器PC:寄Lable程序A程序BR14R14寄存器与子程序调用BLLable地址A???MOVPC,LRR14(地址A)Lable???程序A执行过程中调用程序B;[操作流程]程序跳转至标号Lable,执行程序B。同时硬件将“BLLable”指令的下一条指令所在地址存入R14;程序B执行完后,将R14寄存器的内容放入PC,返回程序A;Lable程序A程序BR14R14寄存器与子程序调用BL2.5.1ARM状态下的寄存器组织(6)程序状态寄存器:包含一个当前程序状态寄存器CPSR和五个备份的程序状态寄存器SPSR当前程序状态寄存器

CPSR

CPSR(CurrentProgramStatusRegister)

CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。

备份的程序状态寄存器SPSR(SavedProgramStatusRegister),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。

用户模式和系统模式不属于异常模式,他们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。非常重要,反应了当前的状态2.5.1ARM状态下的寄存器组织(6)程序状态寄存器:包2.5.1ARM状态下的寄存器组织(8)条件码标志(ConditionCodeFlags)(28~31位)

N、Z、C、V:条件码标志位。可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。 在ARM状态下,绝大多数的指令都是有条件执行的。 在Thumb状态下,仅有分支指令是有条件执行的。2.5.1ARM状态下的寄存器组织(8)条件码标志(Con2.5.1ARM状态下的寄存器组织(9) 在ARMv5及以上版本的E系列处理器中,用Q标志位指示增强的DSP运算指令是否发生了溢出。在其他版本的处理器中,Q标志位无定义。Q(第27位) 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。 对于其他的非加/减运算指令,C的值通常不改变。V 加法运算(包括比较指令CMN):当运算结果产生了进位时(无符号数溢出),C=1,否则C=0。 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。 对于其他的非加/减运算指令,C的值通常不改变。C Z=1表示运算的结果为零;Z=0表示运算的结果为非零。Z N=1表示运算的结果为负数;N=0表示运算的结果为正数或零。N含义标志位2.5.1ARM状态下的寄存器组织(9) 在ARMv5及2.5.1ARM状态下的寄存器组织(10)CPSR控制位(7~0位) CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器处于特权模式,这些位也可以由程序修改。 中断禁止位I、F: I=1禁止IRQ中断(外部中断) F=1禁止FIQ中断(快速中断) T标志位: T=1 Thumb状态 T=0 ARM状态

2.5.1ARM状态下的寄存器组织(10)CPSR控制位(2.5.1ARM状态下的寄存器组织(11)M[4:0]运行模式位:这些位决定了处理器的运行模式。

M[4:0]处理器模式可访问的寄存器0b10000用户模式PC,CPSR,R0-R140b10001FIQ模式PC,CPSR,SPSR_fiq,R14_fiq-R8_fiq,R7~R00b10010IRQ模式PC,CPSR,SPSR_irq,R14_irq,R13_irq,R12~R00b10011管理模式PC,CPSR,SPSR_svc,R14_svc,R13_svc,,R12~R0,0b10111中止模式PC,CPSR,SPSR_abt,R14_abt,R13_abt,R12~R0,0b11011未定义模式PC,CPSR,SPSR_und,R14_und,R13_und,R12~R0,0b11111系统模式PC,CPSR,R14~R02.5.1ARM状态下的寄存器组织(11)M[4:0]运行2.5.1ARM状态下的寄存器组织(12)保留位

CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。

2.5.1ARM状态下的寄存器组织(12)保留位2.5.2Thumb状态下的寄存器组织R0-R7与ARM状态一致CPSR、SPSR与ARM状态一致SP映射到R13LR映射到R14PC映射到R152.5.2Thumb状态下的寄存器组织R0-R7与ARM练习1、ARM处理器模式和ARM处理器状态有何区别?处理器模式指的是处理器在执行程序时在不同时刻所处的不同状态,处理器状态指的是处理器当前所执行的指令集。2、分别列举ARM的处理器模式和状态。状态:ARM状态:32位,这种状态下执行的是字方式的ARM指令Thumb状态:16位,这种状态下执行半字方式的Thumb指令模式:用户模式、快中断模式、中断模式、管理模式、中止模式、未定义模式和系统模式。练习1、ARM处理器模式和ARM处理器状态有何区别?练习(1)ARM模式中有多少通用寄存器?31个通用寄存器(2)CPRS作用是什么?寄存器CPSR为当前程序状态寄存器,可以在任何工作模式下被访问。状态标志:5个,N符号位,Z零标志,C进位,V溢出位,QDSP运算溢出位。控制标志:4个,I中断允许,F快速中断允许,T状态选择,M[4:0]处理器工作模式(3)Z位的作用是什么?Z=1表示运算的结果为零;Z=0表示运算的结果不为零;(4)程序计数器保存在何处?寄存器R15为程序计数器(PC),它指向正在取指的地址。练习(1)ARM模式中有多少通用寄存器?练习5、PC和LR分别使用哪个寄存器?PC使用R15寄存器,LR使用R14寄存器6、R13寄存器的通用功能是什么?堆栈练习5、PC和LR分别使用哪个寄存器?2.6ARM异常只要正常的程序流被暂时中止,处理器就进入异常模式。例如响应一个来自外设的中断。在处理异常之前,ARM内核保存当前的处理器状态,这样当处理程序结束时可以恢复执行原来的程序。如果同时发生两个或更多异常,那么将按照固定的顺序来处理异常,详见“异常优先级”部分。

2.6ARM异常只要正常的程序流被暂时中止2.6ARM异常ARM程序执行流程顺序执行:执行一条ARM指令,PC+4,执行一条Thumb指令,PC+2跳转:PC=目标地址

异常中断:PC=异常中断处理程序入口2.6ARM异常ARM程序执行流程2.6ARM异常异常中断:PC=异常中断处理程序入口当异常中断发生时:系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行;在当异常中断处理程序执行完成后,程序返回到发生中断的指令的下一条指令处执行;

进入异常中断处理程序时,要保存被中断的程序的执行现场,从异常中断处理程序退出时,要恢复被中断的程序的执行现场。2.6ARM异常异常中断:PC=异常中断处理程序入口2.6.1ARM微处理器的异常概述(1)异常(Exception) 当正常的程序执行流程发生改变时,称之为异常。异常类型 (7种) 运行模式 复位 svc(管理模式) 未定义指令 und(未定义指令中止模式) 软件中断 svc(管理模式) 指令预取中止 abt(数据访问中止模式) 数据中止 abt(数据访问中止模式) IRQ(外部中断请求) irq(外部中断模式) FIQ(快速中断请求) fiq(快速中断模式)异常可通过内部或外部中断源产生。2.6.1ARM微处理器的异常概述(1)异常(ExceptARM微处理器的异常概述(2) 当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。FIQ(快速中断请求) 当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。IRQ(外部中断请求) 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。数据中止 若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。指令预取中止 该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。软件中断 当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。未定义指令 当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。复位具体含义异常类型ARM微处理器的异常概述(2) 当处理器的快速中断请求引脚有在异常发生后,ARM内核自动完成以下动作:在适当的LR中保存下一条指令的地址。将CPSR复制到适当的SPSR中。将CPSR模式位强制设置为与异常类型相对应的值。强制PC从相关的异常向量处取指。2.6.2ARM异常处理注:异常总是在ARM状态中进行处理。当处理器处于Thumb状态时发生了异常,在异常向量地址加载入PC时,会自动切换到ARM状态。在异常发生后,ARM内核自动完成以下动作:2.6.2AR2.6.2ARM异常处理对异常的响应

ARM微处理器对异常的响应过程用伪码可以描述为: (1)R14_<Exception_Mode>=ReturnLink (2)SPSR_<Exception_Mode>=CPSR (3)CPSR[4:0]=ExceptionModeNumber CPSR[5]=0 /*在ARM状态执行*/ If<Exception_Mode>==ResetorFIQthen CPSR[6]=1 /*禁止快速中断*/ /*否则CPSR[6]不变*/ CPSR[7]=1/*禁止外部中断*/ (4)PC=ExceptionVectorAddress将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。将CPSR复制到相应的SPSR中。根据异常类型,强制设置CPSR的运行模式位。

强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。

2.6.2ARM异常处理对异常的响应将下一条指令的地址存入M[4:0]处理器模式可访问的寄存器0b10000用户模式PC,CPSR,R0-R140b10001FIQ模式PC,CPSR,SPSR_fiq,R14_fiq-R8_fiq,R7~R00b10010IRQ模式PC,CPSR,SPSR_irq,R14_irq,R13_irq,R12~R00b10011管理模式PC,CPSR,SPSR_svc,R14_svc,R13_svc,,R12~R0,0b10111中止模式PC,CPSR,SPSR_abt,R14_abt,R13_abt,R12~R0,0b11011未定义模式PC,CPSR,SPSR_und,R14_und,R13_und,R12~R0,0b11111系统模式PC,CPSR,R14~R0M[4:0]处理器模式可访问的寄存器0b10000用户模式P2.6.2ARM异常处理(3)复位 复位完成下列操作: R14_svc=UNPREDICTABLEvalue SPSR_svc=UNPREDICTABLEvalue CPSR[4:0]=0b10011 /*进入管理模式*/ CPSR[5]=0 /*在ARM状态执行*/ CPSR[6]=1 /*禁止快速中断*/ CPSR[7]=1 /*禁止正常中断*/ Ifhighvectorsconfiguredthen PC=0xFFFF0000 else PC=0x00000000 复位不需要返回。2.6.2ARM异常处理(3)复位2.6.2ARM异常处理(4)未定义指令异常 未定义指令异常出现时,执行下列操作: R14_und=addressofnextinstructionaftertheundefinedinstruction SPSR_und=CPSR CPSR[4:0]=0b11011 /*进入未定义模式*/ CPSR[5]=0 /*在ARM状态执行*/ /*CPSR[6]不变*/ CPSR[7]=1 /*禁止正常中断*/ Ifhighvectorsconfiguredthen PC=0xFFFF0004 else PC=0x00000004

返回: MOVSPC,LR

设置“S”bit,PC做为目的寄存器,在特权模式不仅仅更新PC,而且拷贝SPSR到CPSR。2.6.2ARM异常处理(4)未定义指令异常2.6.2ARM异常处理(5)软件中断(SWI)管理异常 管理异常异常出现时,执行下列操作: R14_svc=addressofnextinstructionaftertheSWIinstruction SPSR_svc=CPSR CPSR[4:0]=0b10011 /*进入管理模式*/ CPSR[5]=0 /*在ARM状态执行*/ /*CPSR[6]不变*/ CPSR[7]=1 /*禁止正常中断*/ Ifhighvectorsconfiguredthen PC=0xFFFF0008 else PC=0x00000008 返回: MOVSPC,LR2.6.2ARM异常处理(5)软件中断(SWI)管理异常2.6.2ARM异常处理(6)预取中止异常 预取中止异常出现时,执行下列操作: R14_abt=addressoftheabortedinstruction+4 SPSR_abt=CPSR CPSR[4:0]=0b10111 /*进入指令预取中止模式*/ CPSR[5]=0 /*在ARM状态执行*/ /*CPSR[6]不变*/ CPSR[7]=1 /*禁止正常中断*/ Ifhighvectorsconfiguredthen PC=0xFFFF000C else PC=0x0000000C 返回: SUBSPC,LR,#42.6.2ARM异常处理(6)预取中止异常2.6.2ARM异常处理(7)数据中止异常 预取中止异常出现时,执行下列操作: R14_abt=addressoftheabortedinstruction+8 SPSR_abt=CPSR CPSR[4:0]=0b10111 /*进入中止模式*/ CPSR[5]=0 /*在ARM状态执行*/ /*CPSR[6]不变*/ CPSR[7]=1 /*禁止正常中断*/ Ifhighvectorsconfiguredthen PC=0xFFFF0010 else PC=0x00000010 返回: SUBSPC,LR,#82.6.2ARM异常处理(7)数据中止异常2.6.2ARM异常处理(8)中断请求(IRQ)异常 通过处理器上的IRQ输入引脚,由外部产生IRQ异常。IRQ异常的优先级比FIQ异常低。当进入FIQ处理时,会屏蔽掉IRQ异常。 若CPSR的I位为1,则禁止IRQ异常。若I位为0,则ARM在指令执行完之后检查IRQ输入。

IRQ异常出现时,执行下列操作: R14_irq=addressofnextinstructiontobeexecuted+4 SPSR_irq=CPSR CPSR[4:0]=0b10010 /*进入IRQ模式*/ CPSR[5]=0 /*在ARM状态执行*/ /*CPSR[6]不变*/ CPSR[7]=1 /*禁止正常中断*/ Ifhighvectorsconfiguredthen PC=0xFFFF0018 else PC=0x00000018 返回: SUBSPC,LR,#42.6.2ARM异常处理(8)中断请求(IRQ)异常2.6.2ARM异常处理(9)快速中断请求(FIQ)异常 通过处理器上的FIQ输入引脚,由外部产生FIQ异常。 若CPSR的F位为1,则禁止FIQ异常。若F位为0,则ARM在指令执行完之后检查FIQ输入。

FIQ异常出现时,执行下列操作: R14_fiq=addressofnextinstructiontobeexecuted+4 SPSR_fiq=CPSR CPSR[4:0]=0b10001 /*进入FIQ模式*/ CPSR[5]=0 /*在ARM状态执行*/ CPSR[6]=1 /*禁止快速中断*/ CPSR[7]=1 /*禁止正常中断*/ Ifhighvectorsconfiguredthen PC=0xFFFF001C else PC=0x0000001C 返回: SUBSPC,LR,#4 2.6.2ARM异常处理(9)快速中断请求(FIQ)异常当异常结束时,需要执行以下操作:1.恢复用户寄存器值;2.将LR中的值减去偏移量后存入PC,偏移量根据异常的类型而有所不同;3.将SPSR的值复制回CPSR;4.清零在进入异常时置位的中断禁止标志。退出异常当异常结束时,需要执行以下操作:退出异常2.6.2ARM异常处理(10)从异常返回

异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回:1、将连接寄存器LR的值减去相应的偏移量后送到PC中2、将SPSR复制回CPSR中3、若在进入异常处理时设置了中断禁止位,要在此清除2.6.2ARM异常处理(10)从异常返回程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异常过程1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2.用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示对该位不关心程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示对该位不关心在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务2.6.2ARM异常处理(11)返回指令BLMOVPC,LR;R14SWI(软件中断)MOVSPC,LR;R14_svcUDEF(未定义)MOVSPC,LR;R14_undFIQ(快速)SUBSPC,LR,#4;R14_fiqIRQ(外部)SUBSPC,LR,#4;R14_irqPABT(指令中止)SUBSPC,LR,#4;R14_abtDABT(数据中止)SUBSPC,LR,#8;R14_abtRESETNA异常进入/退出小结 2.6.2ARM异常处理(11)返回指令BLMOVPC2.6.3ARM异常向量表异常向量(ExceptionVectors) 异常出现后强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量。地址异常进入模式0x0000,0000复位管理模式0x0000,0004未定义指令未定义模式0x0000,0008软件中断管理模式0x0000,000C中止(预取指令)中止模式0x0000,0010中止(数据)中止模式0x0000,0014保留保留0x0000,0018IRQIRQ0x0000,001CFIQFIQ管理模式管理模式中止模式2.6.3ARM异常向量表异常向量(ExceptionV>32Mbytes<4KbytesLiteralpoolcontainingaddressofUndefHandlerIRQhandlerwithin32MBytesBranch

instructionrangeSWIExceptionhandlerplacedonapplicableaddressboundaryFIQhandlerfollowsvectortableUndefhandleroutside32MBytes

branchinstructionrange0x00x10000x20000000xFFC0x80x180x300000000xFFFFFFFF0x1C0x4MOVPC,#0x30000000BIRQ_handler0x30008000IRQHandlerSWIHandlerFIQHandlerLDRPC,[PC,#+0xFF0]UndefHandler0x30008000>32Mbytes<4KbytesLiteralp当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序:异常类型优先级复位1(最高优先级)数据中止2FIQ3IRQ4预取中止5未定义指令6SWI6(最低优先级)优先级降低2.6.4ARM异常状态优先级注意:未定义的指令和SWI异常互斥。因为同一条指令不能既是未定义的,又能产生有效的软件中断;当FIQ使能,并且FIQ和数据中止异常同时发生时,ARM7TDMI内核首先进入数据中止处理程序,然后立即跳转到FIQ向量。在FIQ处理结束后返回到数据中止处理程序。数据中止的优先级必须高于FIQ以确保数据转移错误不会被漏过。当多个异常同时发生时,一个固定的优先级系统决2.6.5ARM异常中断使用的寄存器地址异常进入模式0x0000,0000复位管理模式0x0000,0004未定义指令未定义模式0x0000,0008软件中断管理模式0x0000,000C中止(预取指令)中止模式0x0000,0010中止(数据)中止模式0x0000,0014保留保留0x0000,0018IRQIRQ0x0000,001CFIQFIQ当异常中断发生时,系统会自动切换到相应的处理器工作模式,各个异常都对应固定的处理器模式。如下表:由于各个处理器工作模式都有对应的物理寄存器,所以各个异常都有相应的物理寄存器。见表2.11:2.6.5ARM异常中断使用的寄存器地址异常进入模式2.7ARM存储器和存储器映射I/O2.7.1ARM体系的存储空间

(补充)指令长度: 32位(在ARM状态下) 16位(在Thumb状态下)数据宽度: 字节(8位) 半字(16位) 字(32位) 三种数据宽度对存储器及外部设备的访问。 其中,字数据需要按4字节对齐(地址的低两位为0)、半字数据需要按2字节对齐(地址的最低位为0)。2.7ARM存储器和存储器映射I/O2.7.1ARM体系2.7ARM存储器和存储器映射I/O2.7.1ARM体系的存储空间

ARM体系结构所支持的最大寻址空间为4GB(232字节)

ARM体系结构,32位地址线,使用单个平面的232个8位字节地址空间。字节地址按照无符号数排列,从0到232-1。地址空间可以看作是包含230个32位字,或231个16位半字。(ARM可用32位的指令系统,也可用16位的指令系统)2.7ARM存储器和存储器映射I/O2.7.1ARM体系2.7ARM存储器和存储器映射I/O2.7.1ARM体系的存储空间

230个32位的字,字地址能被4整除ARM的地址空间也可以看作是2^30个32位的字单元。这些字单元的地址可以被4整除,也就是该地址的低两位为0b00。地址为A的字数据包括地址为A、A+1、A+2、A+34个字节单元的内容。231个16位的半字,半字地址能被2整除在ARM版本4以及以上的版本中,ARM的地址空间也可以看作是2^31个16位的半字单元。这些半字单元的地址可以被2整除,也就是该地址空间的最低位为0b0。地址为A的半字数据包括地址为A、A+1两个字节单元的内容。

2.7ARM存储器和存储器映射I/O2.7.1ARM体系对于字对齐的地址A,地址空间的规则:位于地址A的字包含的字节位于地址A,A+1,A+2和A+3;位于地址A的半字包含的字节位于地址A和A+1;位于地址A+2的半字包含的字节位于地址A+2和A+3;位于地址A的字包含的半字位于地址A和A+2;

字节字节字节字节地址AA+1A+2A+3半字半字字2.7.2ARM存储器格式对于字对齐的地址A,地址空间的规则:字节字节字节字节地址AA2.7.2ARM存储器格式根据上述地址空间规则,组成一个字的4个字节哪一个是高位字节,哪一个是低位字节未确定,可将存储数据的格式分为大端格式和小端格式:大端格式(BigEndian) 字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。

小端格式(LittleEndian) 低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。2.7.2ARM存储器格式根据上述地址空间规则,组成一个字0x12345678字数据的大小端存储方式0x12低位地址高位地址0x340x560x78小端格式0x78低位地址高位地址0x560x340x12大端格式字数据r0=0x12345678进制字数据的高位字数据的低位0x12345678字数据的大小端存储方式0x12低位地址高ARM体系结构的存储器格式(2)地址数据(0H)=0123H(4H)=4567H(8H)=89ABH大端格式(0H)=3210H(4H)=7654H(8H)=BA98H小端格式字地址0123456789AB048低高字地址0123456789AB048低高ARM体系结构的存储器格式(2)地址数据大端格式(0HARM体系结构的存储器格式(3)r0=0x11223344STRr0,[r1]LDRBr2,[r1]r1=0x100Memory32100123ByteLane312423161587011223344312423161587011223344312423161587011223344312423161587000000044312423161587000000011小端格式大端格式r2=0x44r2=0x11STR,LDRB指令执行后,相关寄存器中的内容是什么?把寄存器r0中的内容存向r1代表的地址所指的内存单元的内容。其中r0是32位的寄存器LDRB把内存的内容调出。按r1代表的地址所指的内存单元的内容放到r2中,指令中的B代表只放1个字节,即取数据的最低位。ARM体系结构的存储器格式(3)r0=0x112233注意:一个基于ARM内核的芯片可以只支持大端模式或小端模式,也可以两者都支持。在ARM指令集中不包含任何直接选择大小端的指令,但是一个同时支持大小端模式的ARM芯片可以通过硬件配置(一般使用芯片的引脚来配置)来匹配存储器系统所使用的规则。在大端模式或小端模式两种情况下,存储数据可能会收到不同的结果,日后设计程序时要关注大小端注意:一个基于ARM内核的芯片可以只支持大端模式或小2.7.3非对齐存储访问操作指令长度: 32位(在ARM状态下) 16位(在Thumb状态下)数据宽度: 字节(8位) 半字(16位) 字(32位) 三种数据宽度对存储器及外部设备的访问。 其中,字数据需要按4字节对齐(地址的低两位为0)、半字数据需要按2字节对齐(地址的最低位为0)。2.7.3非对齐存储访问操作指令长度:2.7.3非对齐存储访问操作在ARM中,通常希望字单元的地址是字对齐的(地址的低两位为0b00),半字单元的地址是

温馨提示

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

评论

0/150

提交评论