1、第3章 ARM体系结构第3章 ARM体系结构l3.1 ARM微处理器基础l3.2 ARM的内核系列l3.3 ARM微处理器的指令系统3.1 ARM微处理器基础pARM的运行模式pARM的工作状态pARM的寄存器组织pARM的异常pARM的存储器格式pARM的特点和优势ARM的运行模式ARM微处理器支持7种运行模式,分别为:p用户模式(usr):ARM处理器正常的程序执行状态p快速中断模式(fiq):用于高速数据传输或通道处理p中断模式(irq):用于通用的中断处理p管理模式(svc):操作系统使用的保护模式p终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。p系统
2、模式(sys):运行具有特权的操作系统任务。p未定义模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。ARM的工作状态 ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:pARM状态,此时处理器执行32位的字对齐的ARM指令pThumb状态,此时处理器执行16位的、半字对齐的Thumb指令ARM的寄存器组织 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问。在某种时刻,通用寄存器R14R0、程序计数器PC、一个或两个状态寄存器都是可访问的。ARM的寄存器组织ARM的寄存器组织ARM的寄存器组织
3、ARM的寄存器组织ARM的寄存器组织PSR寄存器的各个位:p 中断禁止位I、Fp Thumb标志位p 运行模式位M4:0ARM的寄存器组织M4M4:00处理器模式处理器模式0b10000用户模式0b10001FIQ0b10010IRQ0b10011管理模式0b10111终止模式0b11011未定义模式0b11111系统模式状态寄存器模式位的含义ARM的异常异常类型异常类型具体含义具体含义复位(Reset)当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。未定义指令(Undefined)当ARM 处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进
4、行软件仿真。软件中断(SWI)该异常由执行SWI 指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。指令预取终止(Prefetch Abort)若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出终止信号,但当预取的指令被执行时,才会产生指令预取终止异常。数据终止(Data Abort)若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据终止异常。外部中断请求(IRQ)当处理器的外部中断请求引脚有效,且CPSR 中的I 位为0 时,产生IRQ 异常。系统的外设可通过该异常请求中断服务。快速中断请求(FIQ)当处理器
5、的快速中断请求引脚有效,且CPSR 中的F 位为0 时,产生FIQ 异常。ARM的异常返回指令 以前的状态ARMThumbBLMOV PC,R14PC4PC2SWIMOVS PC,R14_svcPC4PC2UDEFMOVS PC,R14_undPC4PC2FIQSUBS PC,R14_fiq,4PC4PC4IRQSUBS PC,R14_irq,4PC4PC4PABTSUBS PC,R14_abt,4PC4PC4DABTSUBS PC,R14_abt,8PC8PC8ARM的异常1(最高)复位2 数据终止3 FIQ4 IRQ5 预取指令终止6(最低)未定义指令、SWIARM异常的优先级ARM的存储
6、器格式 ARM体系结构将存储器看作是从零地址开始的字节的线性组合。从第0字节到第3字节放置第一个存储的字数据,从第4个字节到第7个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(32位)。ARM体系结构可以用两种方法存储字数据,称之为大端格式大端格式和小端格式小端格式。ARM的存储器格式 大端格式大端格式ARM的存储器格式 小端格式小端格式。ARM的特点和优势1内核编程体系内核编程体系l 多种模式的切换l 众多的通用寄存器l 32位地址/数据操作l 指令集中的特殊功能l 高效的C和C+编译器l 硬件乘法器l Thumb指令集l E增强DS
7、P指令l Jazzle技术2协处理器协处理器l MMUl MPUl VFP3AMBA(先进控制器总线体系先进控制器总线体系)4.嵌入式嵌入式ICE、低功耗、小体积、低功耗、小体积3.2 ARM的内核系列pARM内核分类与系列pARM体系结构版本ARM内核分类与系列ARM内核系列pARM7 系列pARM9 系列pARM9E 系列pARM10E 系列pSecurCore 系列pStrongARM/XscalepARM11系列pCortexARM内核分类与系列1994-2004年发布的ARM内核ARM内核分类与系列处理器内核 内核分类ARM7 ARM7DMI(-S)ARM720T ARM7EJ-SA
8、RM9 ARM920T ARM922TARM9E ARM926EJ-S ARM946E-S ARM966E-S ARM968E-SARM10E ARM1020E ARM1022E ARM1026EJ-S处理器内核内核分类ARM11 ARM1136J(F)-S ARM1156T2(F)-S ARM1176JZ(F)-SSecurCore SC100 SC110 SC200 SC210Strong ARMXscaleARM7内核ARM7TDMIARM7TDMI-SARM720TARM7EJ-SARM9内核ARM920TARM922TARM9E内核 ARM926EJ-SARM946E-SARM966
9、E-SARM968E-SARM10E内核 ARM1020EARM1026EJ-SARM11内核 ARM1136J(F)-SARM1156T2(F)-SARM1176JZ(F)-SSecurCore内核 SC100/SC110SC200/SC210其他ARM内核 n StrongARMn Intel XScalen Cortex ARM Cortex A(应用内核)ARM Cortex R(实时内核)ARM Cortex M(微控制器)ARM体系结构版本 ARM V1体系是最初的版本,只有26位的寻址空间,没有乘法指令,最终也没有商业化。ARM V2体系与V1体系同为26位寻址空间具有乘法和乘加
10、指令,支持协处理器。ARM V3体系的寻址范围扩展到32位,具有乘法和乘加指令,支持协处理器。ARM V3体系增加了半字存储操作,对调试的支持以及支持嵌入的ICE。ARM V3体系增加了 DSP指令支持和对 Java指令的支持。ARM V6体系增加了媒体指令,ARMv6指令集合中加入了超过60条SIMD单指令多数据指令。ARM V7体系定义了三种独立的内核型 A(应用领域),R(实时领域),M(控制领域)。3.2 ARM微处理器的指令系统pARM指令系统的概述 pARM的寻址模式 pARM的指令集 pThumb的指令集 ARM指令系统的概述助记符助记符指令功能描述指令功能描述ADC带进位加法指
11、令ADD加法指令AND逻辑与指令B跳转指令BIC位清零指令BL带返回的跳转指令BLX带返回和状态切换的跳转指令BX带状态切换的跳转指令CDP协处理器数据操作指令CMN比较反值指令CMP比较指令EOR异或指令LDC存储器到协处理器的数据传输指令LDM加载多个寄存器指令LDR存储器到寄存器的数据传输指令MCR从ARMMLA乘加运算指令MOV数据传送指令 助记符助记符指令功能描述指令功能描述MRC从协处理器寄存器到ARMMRS传送CPSRMSR传送通用寄存器到CPSRMUL32MLA32MVN数据取反传送指令ORR逻辑或指令RSB逆向减法指令RSC带借位的逆向减法指令SBC带借位减法指令STC协处理
12、器寄存器写入存储器指令STM批量内存字写入指令STR寄存器到存储器的数据传输指令SUB减法指令SWI软件中断指令SWP交换指令TEQ相等测试指令TST位测试指令ARM指令系统的概述 条件码条件码助记符后缀助记符后缀标志标志含义含义0000EQZ置位相等0001NEZ清零不相等0010CSC置位无符号数大于或等于0011CCC清零无符号数小于0100MIN置位负数0101PLN清零正数或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位无符号数大于1001LSC清零无符号数小于或等于1010GEN等于V带符号数大于或等于1011LTN不等于V带符号数小于1100GTZ清零且(N等
13、于V)带符号数大于1101LEZ 置位或(N 不等于V)带符号数小于或等于1110AL忽略无条件执行ARM的寻址模式1.立即寻址立即寻址 立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:ADD R0,R0,1;R0R01 ADD R0,R0,0 x3f;R0R00 x3f 在以上两条指令中,第二个源操作数即为立即数,要求以“”为前缀,对于以十六进制表示的立即数,还要求在“”后加上“0 x”或“&”。ARM的寻址模式2 寄存器寻址寄存器寻址 寄存器寻址就是利用寄存器中的数
14、值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:ADD R0,R1,R2;R0R1R2 该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。ARM的寻址模式3.寄存器间接寻址寄存器间接寻址寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:LDR R0,R1;R0R1STR R0,R1;R1R0第一条指令将以R1 的值为地址的存储器中的数据传送到R0 中。第二条指令将R0 的值传送到以R1 的值为地址的存储器中。ARM的寻址模式4 基址变址寻址基址变址寻址基址变址寻址就是将寄存器
15、(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式,如下所示:LDR R0,R1,4;R0R14LDR R0,R1,4!;R0R14、R1R14LDR R0,R1,4;R0R1、R1R14LDR R0,R1,R2;R0R1R2在第一条指令中,将寄存器R1 的内容加上4 形成操作数的有效地址,从而取得操作数存入寄存器R0 中。在第二条指令中,将寄存器R1 的内容加上4 形成操作数的有效地址,从而取得操作数存入寄存器R0 中,然后,R1 的内容自增4 个字节。ARM的
16、寻址模式5.多寄存器寻址多寄存器寻址采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16 个通用寄存器的值。以下指令:LDMIA R0,R1,R2,R3,R4;R1R0;R2R04;R3R08;R4R012该指令的后缀IA 表示在每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到R1R4。ARM的寻址模式6.多寄存器寻址多寄存器寻址采用多寄存器寻址方式,一条指令可以完成多个寄存器值的传送。这种寻址方式可以用一条指令完成传送最多16 个通用寄存器的值。以下指令:LDMIA R0,R1,R2,R3,R4 ;R1R0;
17、R2R04;R3R08;R4R012该指令的后缀IA 表示在每次执行完加载/存储操作后,R0 按字长度增加,因此,指令可将连续存储单元的值传送到R1R4。ARM的寻址模式7.堆栈寻址堆栈寻址堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack)。同时,根据堆栈的生成方式,又可以分为递增堆栈(Ascending Stack)和递减堆栈(
18、DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。ARM指令集ARM指令集:跳转指令 ARM 指令集中的跳转指令可以完成从当前指令向前或向后的32MB 的地址空间的跳转,包括以下4 条指令:u B 跳转指令u BL 带返回的跳转指令u BLX 带返回和状态切换的跳转指令u BX 带状态切换的跳转指令 ARM指令集:数据处理指令 传送指令:传送指令:uMOV 数据传送指令uMVN 数据取反传送指令比较指令:比较指令:uCMP 比较指令uCMN 反值比较指令uTST 位测试指令uTEQ 相等测试指令算术指令:算术指令:uADD
19、加法指令uADC 带进位加法指令uSUB 减法指令uSBC 带借位减法指令uRSB 逆向减法指令uRSC 带借位的逆向减法指令uAND 逻辑与指令uORR 逻辑或指令uEOR 逻辑异或指令uBIC 位清除指令ARM指令集:乘法指令 乘法指令与乘加指令:uMUL 32 位乘法指令uMLA 32 位乘加指令uSMULL 64 位有符号数乘法指令uSMLAL 64 位有符号数乘加指令uUMULL 64 位无符号数乘法指令uUMLAL 64 位无符号数乘加指令ARM指令集:加载/存储指令 单寄存器加载存储指令:uLDR 字数据加载指令uLDRB 字节数据加载指令uLDRH 半字数据加载指令uSTR 字
20、数据存储指令uSTRB 字节数据存储指令uSTRH 半字数据存储指令uLDRSB有符号的字节加载uLDRSH有符号的半字加载多寄存器加载存储指令:uLDM 多字节加载指令uSTM 多字节存储指令lIA:每次传送后地址+4lIB:每次传送前地址+4lDA:每次传送后地址-4lDB:每次传送前地址-4lFD:满递减堆栈lED:空递减堆栈lFA:满递增堆栈lEA:空递增堆栈ARM指令集:程序状态寄存器指令 ARM 微处理器支持程序状态寄存器访问指令,用于在程序状态寄存器和通用寄存器之间传送数据,程序状态寄存器访问指令包括以下两条:uMRS 程序状态寄存器到通用寄存器的数据传送指令uMSR 通用寄存器
21、到程序状态寄存器的数据传送指令ARM指令集:协处理器指令 ARM 的协处理器指令主要用于ARM 处理器初始化ARM 协处理器的数据处理操作,以及在ARM 处理器的寄存器和协处理器的寄存器之间传送数据,和在ARM 协处理器的寄存器和存储器之间传送数据。ARM 协处理器指令包括以下5 条:uCDP 协处理器数操作指令uLDC 协处理器数据加载指令uSTC 协处理器数据存储指令uMCR ARM 处理器寄存器到协处理器寄存器的数据传送指令uMRC 协处理器寄存器到ARM 处理器寄存器的数据传送指令Thumb指令集为兼容数据总线宽度为16 位的应用系统,ARM 体系结构除了支持执行效率很高的32 位AR
22、M指令集以外,同时支持16 位的Thumb 指令集。Thumb 指令集是ARM 指令集的一个子集,允许指令编码为16 位的长度。与等价的32 位代码相比较,Thumb 指令集在保留32 代码优势的同时,大大的节省了系统的存储空间。所有的Thumb 指令都有对应的ARM 指令,而且Thumb 的编程模型也对应于ARM 的编程模型,pThumb 代码所需的存储空间约为ARM 代码的6070pThumb 代码使用的指令数比ARM 代码多约3040p若使用32 位的存储器,ARM 代码比Thumb 代码快约40p若使用16 位的存储器,Thumb 代码比ARM 代码快约4050p与ARM 代码相比较,
23、使用Thumb 代码,存储器的功耗会降低约30Thumb指令集1、分支指令、分支指令l程序相对转移,特别是条件转移与ARM代码下的转移相比,在范围上受更多的限制,转向子程序是无条件的转移。2、数据处理指令、数据处理指令l数据处理指令是对通用寄存器进行操作。在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第三个寄存器中。l数据处理操作比ARM状态的更少。l访问寄存器R8-R15外,收到一定的限制。l除MOV和ADD指令访问器R8-R15外,其他数据处理指令总是更新CPSR中的ALU状态标志。l访问寄存器R8-R15的THUMB数据处理指令不能更新CPSR中的ALU状态标志。Thumb指令集3、单寄存器加载和存储指令、单寄存器加载和存储指令l 在thumb状态下,单寄存器加载和存储指令只能访问寄存器R0-R7。4、多寄存器加载和存储指令、多寄存器加载和存储指令lLDM和STM指令可以将任何范围为R0-R7的寄存器子集加载或存储。lPUSH和POP指令使用堆栈指令R13作为基址实现满递减堆栈。除R0-R7外,PUSH指令还可以存储连接寄存器R14,并且POP指令可以加载程序指令PC。lThumb指令集没有协处理器指令、信号量指令及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且第二操作的数收到限制;课程结束