




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式微处理器系统及应用嵌入式微处理器系统及应用第三章第三章 ARMARM嵌入式微处理器指令集嵌入式微处理器指令集概览概览主要内容主要内容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架构指令体系架构指令体系 3 ARM v5TE 3 ARM v5TE 架构指令体系架构指令体系 4 ARM v6 4 ARM v6 架构指令体系新特性架构指令体系新特性 5 Thumb5 Thumb指令集指令集 3.1.1 ARM指令集指令集 ARMARM指令集主要包括指令集主要包括6 6大类指令:大类指令: 数据处理指令:如ADD、SUB、AND等 加载存储(Load-Stor
2、e)指令:如LDR等 分支指令:如B、BL等 状态寄存器访问指令:如MRS、MSR等 协处理器指令:如LDC、STC等 异常处理指令:如SWI等3.1.1 ARM指令集指令集 ARMARM指令集的特点指令集的特点 所有ARM指令都是32位定长的 加载存储(Load-Store)架构 提供功能强大的一次加载和存储(Load-Store)多个寄存器的指令 CPU内核硬件中提供了桶型(barrel)移位器,移位操作可以内嵌在其他指令中 所有的ARM指令都是可以条件执行的 3.1.1 ARM指令集指令集 示例示例3.1.2 THUMB指令集指令集 ThumbThumb指令集是指令集是1616位的指令集
3、,它对位的指令集,它对C C代码的密度代码的密度进行了优化,平均达到约进行了优化,平均达到约ARMARM代码大小的代码大小的65%65%。为。为了尽量降低指令编码长度,了尽量降低指令编码长度,ThumbThumb指令集具体采用指令集具体采用了如下约束:了如下约束: 不能使用条件执行,而对于标志则一直都是根据指令结果进行设置的 源寄存器和目标寄存器是相同的 只使用低端寄存器,即不使用寄存器R8-R12 对指令中出现的常量有大小的限制 不能在指令中使用内嵌的桶型移位器(inline barrel shifter)3.1.3 THUMB-2指令集指令集 Thumb-2 Thumb-2 指令集主要是对
4、指令集主要是对ThumbThumb指令集架构的扩展,指令集架构的扩展,其设计目标是以其设计目标是以ThumbThumb的指令密度达到的指令密度达到ARMARM的性能。的性能。它具有如下特性它具有如下特性 增加了32位的指令,因而实现了几乎ARM指令集架构的所有功能 完整保留了16位的Thumb指令集 编译器可以自动地选择16位和32位指令的混合 具有ARM态的行为,包括可以直接处理异常、访问协处理器以及完成v5TE的高级数据处理功能 通过If-Then (IT) 指令,1-4条紧邻的指令可以条件执行3.1.4 JAZELLE JazelleJazelle技术使得技术使得ARMARM核可以执行核
5、可以执行8 8位的位的JavaJava字节码,约字节码,约95%95%的的JAVAJAVA字节码可以由硬件执字节码可以由硬件执行,从而使效率显著提高。行,从而使效率显著提高。 3.1.5 为什么需要学习汇编指令为什么需要学习汇编指令 嵌入式系统的初始化代码需要用汇编指令来编写。初始化嵌入式系统的初始化代码需要用汇编指令来编写。初始化代码通常包括处理器的初始化、内存初始化等,其中涉及代码通常包括处理器的初始化、内存初始化等,其中涉及一些比较特殊的操作,比如设置处理器在不同工作模式下一些比较特殊的操作,比如设置处理器在不同工作模式下的堆栈指针,需要使用特殊的访问处理器状态寄存器的指的堆栈指针,需要
6、使用特殊的访问处理器状态寄存器的指令,强制处理器切换到不同模式下进行操作;令,强制处理器切换到不同模式下进行操作; 一些中断例程尤其是作为一种异常被响应的第一级中断派一些中断例程尤其是作为一种异常被响应的第一级中断派发程序需要用汇编指令来编写,以提高效率;发程序需要用汇编指令来编写,以提高效率; 在软件的调试过程中,熟悉汇编指令更有助于查找疑难问在软件的调试过程中,熟悉汇编指令更有助于查找疑难问题;题; 某些指令本身就是不能直接由编译器产生的,而需要人工某些指令本身就是不能直接由编译器产生的,而需要人工编写。编写。3.1.5 为什么需要学习汇编指令为什么需要学习汇编指令 可以直接控制在可以直接
7、控制在C C语言编程时不能有效使用的语言编程时不能有效使用的3 3个个优化工具:优化工具: 指令调整调整一段代码中的指令序列,以避免处理器的暂停等待。ARM指令执行是在指令流水线中进行的,所以一条指令执行的时间会受其相邻指令的影响,在“附录1指令流水线”中描述了相关问题。 寄存器分配决定如何分配变量给ARM寄存器或者堆栈,以获得最好的性能。目标是要使访问存储器的次数降到最少。有关寄存器的分配见本书第2.3.3.4小节的内容。 条件执行可以使用ARM条件代码和条件指令的全部功能。 主要内容主要内容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架构指令体系架构指令
8、体系 3 ARM v5TE 3 ARM v5TE 架构指令体系架构指令体系 4 ARM v6 4 ARM v6 架构指令体系新特性架构指令体系新特性 5 Thumb5 Thumb指令集指令集 通过在指令后加上合适的条件标志位,通过在指令后加上合适的条件标志位,ARMARM指令可以条件执行指令可以条件执行 通过减少前向的分支数目,增强了指令的代码密度和指令性能CMP r0, r1 ADDGT r2, r2, #1 ADDLE r3, r3, #1默认情况下默认情况下, ,数据处理指令不会影响条件标志位,但是,可在指令后加数据处理指令不会影响条件标志位,但是,可在指令后加“s”(s”(或其它条件位
9、或其它条件位) )后缀,以实现标志位的置位。后缀,以实现标志位的置位。loop ADD r2, r2, r3 SUBS r1, r1, #0 x01 BNE loop r2=r2+r3 如果如果 Z 标志清除则分支跳转标志清除则分支跳转 r1 减减1并设置标志位并设置标志位 r0 - r1, 比较比较 r0 和和 r1 并设置标志位并设置标志位 if r2=r2+1 标志位保持不变标志位保持不变 if = r3=r3+1 标志位保持不变标志位保持不变3.2.1条件执行和标志位条件执行和标志位条件执行的例子条件执行的例子if (r0 = 0) r1 = r1 + 1;else r2 = r2 +
10、 1;C 代码代码 5 条指令 占据 5 个字 5个或者6个时钟周期 3 条指令 占据3 个字 3 个时钟周期 CMP r0, #0 BNE else ADD r1, r1, #1 B endelse ADD r2, r2, #1end .ARM 指令指令 非条件执行非条件执行 CMP r0, #0 ADDEQ r1, r1, #1 ADDNE r2, r2, #1 .条件执行条件执行指令条件码指令条件码 不相等无符号高于或相同无符号低于为负相等溢出无溢出无符号高于无符号低于或相同为正或零小于大于小于或等于总是大于或等于EQNECS/HSCC/LOPLVSHILSGELTGTLEALMIVC后
11、缀后缀描述描述Z=0C=1C=0Z=1被测试的标志被测试的标志N=1N=0V=1V=0C=1 & Z=0C=0 or Z=1N=VN!=VZ=0 & N=VZ=1 or N=!V可能的指令条件码如下所示可能的指令条件码如下所示 注意: AL 是默认的,不需要被特别指出。 3.2.2数据处理指令数据处理指令由以下指令组成由以下指令组成 : : 算术运算:ADDADCSUBSBC 逻辑运算:ANDORREORBIC 比较运算:CMPCMNTSTTEQ 数据传送:MOV这些指令仅对存放于寄存器的数据操作,对内存数据是无效的这些指令仅对存放于寄存器的数据操作,对内存数据是无效的. .语
12、法语法: :S Rd, Rn, Operand2 第二个操作数可以为一个寄存器或者一个立即数 SUB r0, r1, r2 AND r1, r4, #0 xFF 比较指令仅仅设置了条件标志位 无需指定Rd CMP r0, r3 数据传送指令并不指定Rd MOV r0, r1第二个操作数通过桶型移位器传输到第二个操作数通过桶型移位器传输到ALUALU寄存器方式寄存器方式, , 可附加移位操作可附加移位操作 移位的值可为以下的两种: 5位的无符号整数(031) 其它寄存器的最低字节 用来实现乘以一个常数 ADD r0, r5, r5 LSL 1 r0 = r5 x 3 立即数立即数 范围在 0-2
13、55的8位立即数 或者该8位立即数循环右移偶数位得到的数 允许32位的常数直接加载到寄存器中结果结果操作数操作数 1桶型移位器桶型移位器操作数操作数 2ALU第二个操作数第二个操作数移位操作移位操作DestinationCF0DestinationCFLSL: 逻辑左移逻辑左移ASR: 算术右移算术右移相当于乘2相当于除以2, 保留符号位DestinationCF.0DestinationCFLSR: 逻辑右移逻辑右移ROR: 循环右移循环右移相当于除以2最低有效位旋转至最高有效位DestinationRRX: 扩展的循环右移扩展的循环右移寄存器数值右移一位,C标志位填补空出的位,移出的位代替
14、C标志位CF以下的移位操作是数据处理指令的一部分以下的移位操作是数据处理指令的一部分. . 移位的范围为0-31位,对指令的性能不会造成太大的影响ARM ARM 指令不能包含一个指令不能包含一个 3232位的立即数常数位的立即数常数 ARM 指令都是32 位定长的在数据处理指令的格式中,第二个操作数有在数据处理指令的格式中,第二个操作数有1212位来对应位来对应4 4 位的移位数乘以位的移位数乘以2,2,组成了步长为组成了步长为2 2,范围在,范围在0 03030的移位值的移位值 立即数法则:立即数法则: “8 8 位的常数循环右移偶数位得到位的常数循环右移偶数位得到”07118immed_8
15、ShifterRORrotx2小测试小测试: 指令:指令:0 xe3a004ffMOV r0, #?立即数常数立即数常数 为了加载更大的立即数为了加载更大的立即数, , 汇编器提供了伪指令汇编器提供了伪指令: : LDR rd, =const这将这将: : 产生一条 MOV 或者 MVN 指令 或者 产生一条 PC相对寻址的LDR 指令将立即数从literal pool (嵌入在代码中的常数域)里读出来举例举例 LDR r0, =0 xFF=MOV r0, #0 xFF LDR r0, =0 x55555555 =LDR r0, PC, #Imm12DCD 0 x55555555推荐用这种方式
16、将常数加载到寄存器推荐用这种方式将常数加载到寄存器加载加载32位的常数位的常数有两类乘法有两类乘法 分别产生分别产生 3232位和位和 6464位位 的结果的结果3232位的这类乘法在位的这类乘法在 ARM7TDMI ARM7TDMI 会执行会执行 2 2 5 5 时钟周期时钟周期 MUL r0, r1, r2; r0 = r1 * r2 MLA r0, r1, r2, r3; r0 = (r1 * r2) + r36464位的乘法提供了两种乘法指令:无符号和有符号乘位的乘法提供了两种乘法指令:无符号和有符号乘 这类指令有两个目标寄存器 U|SMULL r4, r5, r2, r3; r5:r
17、4 = r2 * r3 U|SMLAL r4, r5, r2, r3; r5:r4 = (r2 * r3) + r5:r4大多数的大多数的 ARM ARM 核不提供整数除法指令核不提供整数除法指令 除法操作由c的库函数例程或者移位操作实现3.2.3乘法和除法乘法和除法3.2.4分支指令分支指令分支跳转指令有如下的格式分支跳转指令有如下的格式: : BL label 子函数调用可加上 L实现实现 在指令编码中,存在一个 24 位的地址域 在执行时它被左移两位 (因为 ARM 指令是字对齐的),产生一个26位的偏移地址,由此可知跳转的范围大体在-32MB+32MB之间 引起了流水线清空 B sta
18、rt . .start PC 相对寻址的标号相对寻址的标号 “start”跳转到此处继续执行跳转到此处继续执行:BL func2:BX lrfunc1func2void func1 (void):func2();:子程序子程序实现一个传统的子程序调用需要两个步骤实现一个传统的子程序调用需要两个步骤: : 保存返回地址 跳转到子程序的首地址这些步骤可以由一条指令完成这些步骤可以由一条指令完成, , BL 返回地址被保存在链接寄存器 (lr/r14) 分支跳转到 +/- 32MB 范围内的任何地址重新加载链接寄存器的内容至重新加载链接寄存器的内容至PCPC寄存器即可实现返回寄存器即可实现返回3.2
19、.5单寄存器数据传输(加载单寄存器数据传输(加载 / 存储指令)存储指令) LDRSTR字 LDRBSTRB字节 LDRHSTRH半字 LDRSB有符号的字节加载 LDRSH有符号的半字加载存储系统必须支持所有的访问尺寸存储系统必须支持所有的访问尺寸语法语法: : LDR Rd, STR Rd, 举例 LDREQB 地址寻址方式地址寻址方式被被LDR/STRLDR/STR指令访问的地址通过一个基址寄存器和一个偏移量来指定指令访问的地址通过一个基址寄存器和一个偏移量来指定 对于字和无符号的字节访问对于字和无符号的字节访问, , 偏移量可以为偏移量可以为: : 一个无符号的12位立即数 (i.e.
20、 0 - 4095 bytes)LDR r0, r1, #8 寄存器, 可附加的对其进行移位LDR r0, r1, r2LDR r0, r1, r2, LSL#2对于半字和有符号的字节访问对于半字和有符号的字节访问, , 偏移量可以为偏移量可以为: : 一个8位的立即数 (i.e. 0 - 255 bytes) 一个寄存器 (不可以被移位)基址寄存器的地址可加也可减基址寄存器的地址可加也可减: :LDR r0, r1, #-8LDR r0, r1, -r2, LSL#2是前序还是后序寻址是前序还是后序寻址是否更新基址寄存器是否更新基址寄存器 ( (仅限于前序寻址仅限于前序寻址) )LDR r0
21、, r1, #-8!0 x7r10 x300基址基址寄存器寄存器0 x300r00 x7源寄存器源寄存器偏移量偏移量80 x308r10 x300初始的基初始的基址寄存器址寄存器0 x300r00 x7源寄存器源寄存器偏移量偏移量80 x308r10 x308更新后的基更新后的基址寄存器址寄存器更新基址寄存器形式更新基址寄存器形式: STR r0,r1,#8!前序寻址和后序寻址前序寻址和后序寻址前序寻址前序寻址: : STR r0, r1, #8后序寻址后序寻址: : STR r0, r1, #80 x780 x7基址寄存器的更新使编写简单的块拷贝例程成为可能基址寄存器的更新使编写简单的块拷贝
22、例程成为可能 举例: 后序寻址可用来拷贝一个内存块; r5 源数据块的起始指针源数据块的起始指针; r6 源数据块的结束指针源数据块的结束指针; r8 目的数据块的起始指针目的数据块的起始指针loopLDRr0, r5, #4; 加载加载4个字节个字节STRr0, r8, #4; 存储至目标地址存储至目标地址CMPr5, r6; 检查是否完毕检查是否完毕BLTloop; 循环循环在这个例子中每次循环拷贝一个字在这个例子中每次循环拷贝一个字内存块的拷贝内存块的拷贝 (1) 内存增长方内存增长方向向r6r5r83.2.6 批量加载批量加载 / 存储指令存储指令 语法语法: : Rb!, 4 4 种
23、地址模式种地址模式: : LDMIA / STMIA increment after LDMIB / STMIB increment before LDMDA / STMDA decrement after LDMDB / STMDB decrement beforeIAr2地址增长地址增长方向方向r3r1r2r3r1r2r3r1r2r3r1r0IBDADBLDMxx r0, r1,r2,r3STMxx r0, r1,r2,r3基址寄存器基址寄存器 (Rb)STM / / LDM不仅可用于堆栈操作,它们也可以用来进行内存块拷贝不仅可用于堆栈操作,它们也可以用来进行内存块拷贝举例举例; r5 源
24、数据块的起始指针源数据块的起始指针; r6 源数据块的结束指针源数据块的结束指针; r8 目的数据块的起始指针目的数据块的起始指针loopLDMIAr5!, r0-r3; 加载加载 16 个字节个字节STMIAr8!, r0-r3; 存储至目标地址存储至目标地址CMPr5, r6; 检查拷贝是否完毕检查拷贝是否完毕BLTloop; 循环循环在这个例子中每次循环拷贝在这个例子中每次循环拷贝8 8个字个字内存块的拷贝内存块的拷贝 (2)内存增长方内存增长方向向r6r5r8堆栈堆栈LDMFD sp!, r4-r7, pcSP100FF1234AOBE80341010123484209753r41r5
25、 14544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753Top of MemorySPSP100FF1234A0BE8034SPOld SP100FF1234A0BE8034ARM ARM 堆栈操作由块数据传输指令堆栈操作由块数据传输指令: : STMFD(Push) 批存储 满递减堆栈满递减堆栈 STMDB LDMFD(Pop)批加载 满递减堆栈满递减堆栈 LDMIA 注意: 寄存器在压栈时
26、的顺序始终是最低编号寄存器的内容压入最低地址的堆栈空间 被指定的寄存器顺序是无效的.STMFD sp!, r4-r7, lr用于在内存和寄存器之间传送一个字节或字的原子操作(不可被打用于在内存和寄存器之间传送一个字节或字的原子操作(不可被打断),先读取内存后写内存。断),先读取内存后写内存。语法语法: : SWPB Rd, Rm, Rn可用于实现信号量可用于实现信号量不能由不能由C C汇编器编译得到,只能直接由汇编指令实现汇编器编译得到,只能直接由汇编指令实现RmRd321tempMemoryRn3.2.7 交换(交换(SWP)指令)指令 3.2.8 软中断指令(软中断指令(SWI) 引起了一
27、个异常自陷,引起了一个异常自陷, 跳转到软中断异常向量跳转到软中断异常向量 软中断处理例程检查软中断号以决定如何处理该号中断软中断处理例程检查软中断号以决定如何处理该号中断 通过软中断这种机制通过软中断这种机制, , 操作系统可以实现一个优先操作集操作系统可以实现一个优先操作集合,它们可被用户模式下的应用代码调用合,它们可被用户模式下的应用代码调用. . 语法语法: : SWI 283124270 Cond 1 1 1 1SWI 号号 (被处理器忽略被处理器忽略)23条件域条件域3.2.9 程序状态寄存器访问指令程序状态寄存器访问指令 MRS / MSRMRS / MSR指令用于在指令用于在
28、CPSR / SPSRCPSR / SPSR寄存器与通用寄存器之间传输数寄存器与通用寄存器之间传输数据据 MSR 指令允许全部或部分的寄存器内容被更新通过写通过写CPSRCPSR寄存器,可以开关中断、改变处理器模式寄存器,可以开关中断、改变处理器模式 典型的是使用一个读/修改/写的操作序列:MRS r0,CPSR; 将 CPSR 的内容读至 r0BIC r0,r0,#0 x80 ; 将第7位清零以允许IRQ中断MSR CPSR_c,r0; 将修改后的值仅写入c字节在用户模式下在用户模式下, , 所有的位都可以被读出来,但是仅有条件标志位(所有的位都可以被读出来,但是仅有条件标志位(f f)可以
29、被改变可以被改变fsxc2731N Z C V Q2867I F T mode1623 15 54024J1089 19GE3:0 E A IT cond_abcde3.2.10 协处理器指令协处理器指令 ARM ARM 体系支持体系支持1616个协处理器个协处理器每个协处理器的指令集都占据了每个协处理器的指令集都占据了 ARMARM指令集的固定部分指令集的固定部分 如果系统中没有某个协处理器, 那么就会触发未定义指令异常有三种协处理器指令有三种协处理器指令 协处理器数据操作指令 CDP : 初始化协处理器的数据处理操作 协处理器寄存器与ARM处理器寄存器数据传输指令 MRC : 协处理器寄存
30、器到ARM 处理器寄存器的数据传输指令 MCR : ARM 处理器寄存器到协处理器寄存器的数据传输指令 协处理器寄存器和内存的数据传输指令 LDC : 协处理器数据加载指令 STC : 协处理器数据存储指令主要内容主要内容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架构指令体系架构指令体系 3 ARM v5TE 3 ARM v5TE 架构指令体系架构指令体系 4 ARM v6 4 ARM v6 架构指令体系新特性架构指令体系新特性 5 Thumb5 Thumb指令集指令集 ARM v5TE 架构架构v5TE v5TE 架构包含了架构包含了v4Tv4T架构下所
31、有的架构下所有的ARM / ThumbARM / Thumb指令集指令集, , 新增了新增了: : 对ARM / Thumb交互支持的改进 在 ARM / Thumb 交互这一章做了介绍 前导0计数指令 半字的符号乘法指令 对饱和运算的支持 程序状态寄存器新增Q标志位 双字的加载 / 存储指令 断点中断指令 (ARM 和 Thumb) 高速缓存(cache)预加载指令3.3.1 前导前导0计数指令计数指令 CLZcond Rd, Rm 返回寄存器内容中第一个1之前的二进制0的个数 源寄存器扫描从最高位到最低位 在 1 个时钟周期的内完成 如果没有位为 1 则返回 32 , 如果第 31 位为
32、1 则返回 0 在软件除法和浮点运算中使用左移左移位可规范化位可规范化RmRm带符号的规范化需要额外的一个周期带符号的规范化需要额外的一个周期0000 0010 1110 1101.0R1 =CLZ R0, R10 x6R0=1011 1011 0100 0000.0R1 =MOV R1, R1 LSL R0TRmRsBTBW 选项16161616321632/6432/64Rd(RdHi,RdLo)Rn(RdHi,RdLo)3.3.2 符号乘法操作指令符号乘法操作指令 SMULxycond Rd, Rm, RsSMULxycond Rd, Rm, RsSMULWycond Rd, Rm, R
33、sSMULWycond Rd, Rm, RsSMLAxycond Rd, Rm, Rs, RnSMLAxycond Rd, Rm, Rs, RnSMLAWycond Rd, Rm, Rs, RnSMLAWycond Rd, Rm, Rs, RnSMLALxycond RdLo, RdHi, Rm, RsSMLALxycond RdLo, RdHi, Rm, Rs SMLA 指令会影响指令会影响Q Q标志位标志位 x, y 代表高半字(代表高半字(T Topop)或者低半字)或者低半字(B Bottomottom) W 代表选择代表选择4848位乘积的高位乘积的高3232位位不要去影响不要去影响
34、 NZCVNZCV标志位标志位 ( (指令后加指令后加SS后缀是不允许的后缀是不允许的) )3.3.3 饱和运算指令饱和运算指令 饱和运算饱和运算 向0 x7FFFFFFF加1导致了正值向负值的转变 从0 x80000000 减1导致负值向正值的转变在电信领域中,一些在电信领域中,一些DSPDSP算法要求饱和度可以保证算法要求饱和度可以保证 G.723.1 VoIP(IP语音技术) AMR - Adaptive MultiRate(自适应多码率 )QSUBcond Rd, Rm, Rn;Rd = saturate(Rm - Rn)QADDcond Rd, Rm, Rn;Rd = saturat
35、e(Rm + Rn)QDSUBcond Rd, Rm, Rn;Rd = saturate(Rm - saturate(Rn2)QDADDcond Rd, Rm, Rn;Rd = saturate(Rm + saturate(Rn2)在这些指令的执行中,如果饱和发生,那么在这些指令的执行中,如果饱和发生,那么Q Q 标志位就会被置位标志位就会被置位0 x00 x7FFFFFFF0 x80000000-ve+ve3.3.4 加载加载 / 存储存储2个寄存器指令个寄存器指令 LDR/STRD , 内存中相邻的两个字与寄存器对内存中相邻的两个字与寄存器对 (r0,r1), (r2,r3), (r4,r
36、5), (r0,r1), (r2,r3), (r4,r5), (r6,r7), (r8,r9), (r10,r11) or (r12,r13)(r6,r7), (r8,r9), (r10,r11) or (r12,r13)的数据传输的数据传输RdRd需指定为偶数号的寄存器需指定为偶数号的寄存器 紧跟其后的奇数号寄存器用来传输第紧跟其后的奇数号寄存器用来传输第二个字二个字使用与使用与 LDRH/STRHLDRH/STRH指令相同的寻址模式指令相同的寻址模式 LDRD 指令加载的是两个字中内存较小的地址较高地址由该地址指令加载的是两个字中内存较小的地址较高地址由该地址+4+4产生产生地址必须是地址
37、必须是8 8字节对齐的字节对齐的3.3.5 断点指令断点指令 断点指令断点指令 - - BKPT 执行该指令或将引起一个预取指令异常,或者使处理器进入调试状态 若有调试软件,它将该指令处理为断点 若有调试硬件,那么将被直接作为一个断点处理 立即数的值将被处理器忽略3.3.6 高速缓存预加载指令高速缓存预加载指令 高速缓存预加载指令高速缓存预加载指令 - - PLD Rn, 偏移量可以为 无符号的12位立即数 (ie 0 - 4095 bytes). 寄存器, 可选择移位操作 它告诉存储系统对一个指定地址的数据访问即将到来 PLD 是一条提示指令 如果在实现时对该指令不支持,那么相当于做了一条空
38、操作语句 NOP主要内容主要内容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架构指令体系架构指令体系 3 ARM v5TE 3 ARM v5TE 架构指令体系架构指令体系 4 ARM v6 4 ARM v6 架构指令体系新特性架构指令体系新特性 5 Thumb5 Thumb指令集指令集 V6的新特性的新特性 ARM ARM 的的 V6 V6 版本版本 包含了包含了 81 81 条新的指令条新的指令 几类附加的指令几类附加的指令 打包数据 SIMD (单指令多数据处理) 绝对差值求和操作 饱和运算 对混合端(大/小端)的支持 异常入口与返回指令 不同于以前对原
39、指令集的扩充不同于以前对原指令集的扩充 ( (例如例如 BLX offset), BLX offset), V6 V6 扩充的指令几乎都是条件执行的扩充的指令几乎都是条件执行的3.4.1 打包数据类型指令打包数据类型指令 V6 V6 引入了新的指令以打包引入了新的指令以打包 / / 拆分数据拆分数据 PKHBT , , LSL # 将第一个操作数的低半字和第二个操作数的高半字组合成一个新字放入 第二个操作数可逻辑左移0-31位 PKHTB , , ASR # 将第一个操作数的高半字和第二个操作数的低半字组合成一个新字放入 第二个操作数可算术右移 0-31位 UXT , , 循环移位值可以为 #
40、8, #16 or #24 类型 ABRd = Rn + (rotate(Rm) AND 0 x000000FF) AHRd = Rn +(rotate(Rm) AND 0 x0000FFFF) BRd = rotate(Rm) AND 0 x000000FF B16Rd = rotate(Rm) AND 0 x00FF00FF HRd = rotate(Rm) AND 0 x0000FFFF数据打包举例数据打包举例AB00.00B00.00AUXTH r3, r1r2r3r1r1UXTH r2, r1, ROR #16PKHBT r1, r3, r2, LSL #16AB3.4.2 字节选择
41、指令字节选择指令 根据状态寄存器根据状态寄存器GE3:0 GE3:0 位的值,决定目标寄存器中每个字节该是选择第一位的值,决定目标寄存器中每个字节该是选择第一个寄存器的值还是第二个寄存器的值。个寄存器的值还是第二个寄存器的值。 SEL Select的缩写 语法:SEL Rd, Rn, Rm 操作:IF GE0=1 Rd7:0 = Rn7:0 else Rm7:0IF GE1=1 Rd15:8 = Rn15:8 else Rm15:8Rd31:24和Rd23:16的值根据GE2和G3位同理可得 在分离的加法和减法运算结果中,一些打包数据指令设置了GE3:0 (如 SADD8/16, SSUB8/
42、16) SEL 指令可紧跟这样的指令以提取合适的数据域 e.g. USUB8 Rd, Ra, Rb SEL Rd, Rb, Ra 设置 Rd 中的每个字节为 Ra 和 Rb 中对应的较小字节3.4.3 单指令多数据处理指令单指令多数据处理指令SIMD v6 v6 引入了新的指令来执行数据的并行处理,这些操作引入了新的指令来执行数据的并行处理,这些操作被称之为被称之为SIMDSIMD ( (单指令多数据单指令多数据) ) 在在 v6 v6 中中 SIMD SIMD 指令可分为下面三种指令可分为下面三种: : 加法和减法 乘法 差的绝对值和SIMD 加法加法 & 减法减法(1) Rd, R
43、n, Rm ADD16 & SUB16 从第一个操作数中的每个半字上加上或减去第二个操作数对应的半字 ADD8 & SUB8 从第一个操作数中的每个字节上加上或减去第二个操作数对应的字节前缀前缀: :S S 有符号有符号SHSH有符号平分(减半)有符号平分(减半)U U无符号无符号UH UH 无符号平分无符号平分UQUQ无符号饱和无符号饱和Q Q饱和饱和 ( (有符号有符号) )+RmRd+RnGE3GE2GE1GE0UADD8 Rd, Rn, RmSIMD 加法加法 & 减法减法(2)ADDSUBXADDSUBX & & SUBADDXSUBADDX
44、结合的16 位加法和减法GE3:2GE1:0Rd-+RbRaUADDSUBX Rd, Ra, Rb根据加法是否产生进位或减法是否产生借位的情况设置根据加法是否产生进位或减法是否产生借位的情况设置GE3:0GE3:0SIMD 乘法乘法 SMUADX Rd, Rm, Rs 双重乘加(有符号) SMUSDX Rd, Rm, Rs 双重乘减(有符号) SMLALDX Rd, Rm, Rs, Rn 双重乘加累加(有符号) SMLSLDX Rd, Rm, Rs, Rn 双重乘减累加(有符号)X X 表示在计算前表示在计算前RsRs中的两个半字互换中的两个半字互换L L 表示表示6464位的累加位的累加如果
45、发生累加溢出,如果发生累加溢出,Q Q 标志位置位标志位置位xRdRsxRmSMUAD Rd, Rm, Rs+3.4.4 绝对差值求和指令绝对差值求和指令 在许多在许多多媒体数字信号编码多媒体数字信号编码算法算法, ,尤其是视频运动估计尤其是视频运动估计(video motion (video motion estimation) estimation) 算法中,绝对差值求和运算是主要操作算法中,绝对差值求和运算是主要操作对象素数组数据的运算对象素数组数据的运算 ( (通常是通常是8 8位位) )ABSDIFFABSDIFFABSDIFFABSDIFF+可选择累加可选择累加3.4.5 SETE
46、ND指令指令 选择数据访问的大小端方式选择数据访问的大小端方式 ( ( BE8 or LEBE8 or LE ) ) 为了在系统中可以使用混合大小端的数据 (如外设与处理器的大小端不一致)SETEND SETEND 语法:SETEND BE | LE 操作:设置了CPSR寄存器中的E位 使用使用 SETENDSETENDLE没有没有SETENDMRS r0, cpsrBIC r0, r0, #0 x0200MSR cpsr_x, r0举例举例 :在大端存储系统中中访问小端的结构元素:在大端存储系统中中访问小端的结构元素SETEND BELDR r0, r7, #4 ; big-endianSE
47、TEND LE LDR r1, r7, #4 ; little-endian 3.4.6 字节反转指令字节反转指令 V6版本版本REV r0, r0V6以前的版本以前的版本EORr1, r0, r0, ROR #16BICr1, r1, #0 xFF0000MOVr0, r0, ROR #8EORr0, r0, r1, LSR #8字节反转指令字节反转指令 REVcond Rd, Rm将一个字内的字节反转将一个字内的字节反转 REV16cond Rd, Rm将两个半字内的字节反转将两个半字内的字节反转 REVSHcond Rd, Rm反转最低的两个字节反转最低的两个字节,并将结果扩并将结果扩展
48、为展为32位位32010132REV r0, r03.4.7 饱和指令饱和指令 将固定的位后数值设为饱和将固定的位后数值设为饱和 USAT 无符号的32位饱和,可以移位 语法:USAT Rd, #sat, Rm shift 操作:Rd = Saturate(Shift(Rm), #sat) 其它指令其它指令 SSAT 有符号的32位饱和,可以移位 USAT16 无符号的在2个半长数据同一位置的双16位饱和,不允许移位 SSAT16 有符号的在2个半长数据同一位置的双16位饱和,不允许移位 #sat 表示 0 到 31的立即数 shift 是可选的并被限制为 LSL or ASR 如果发生饱和,
49、将 Q 标志位置位3.4.8 排他的加载排他的加载 / 存储指令存储指令 标记内存访问为标记内存访问为“ 排他排他 ” 的指令的指令LDREX “ 排他 ” 的加载指令语法:LDREX Rd, Rn操作:Rd = *RnSTREX - “ 排他 ” 的存储指令语法:STREX Rd, Rm, Rn操作:*Rn = Rm; Rd = 0 如果内存更新了, 否则为1可以用来实现操作系统的信号量可以用来实现操作系统的信号量 在多处理器系统中要求存储系统的支持MOVr1, #0 xFF; 读取 lock taken 的值try_for_lockLDREXr0, LockAddr; 加载 lock va
50、lueCMPr0, #0; lock 空闲?STREXEQr0, r1, LockAddr; 是的,尝试声明CMPEQr0, #0; 成功?BNEtry_for_lock; 否, 再次尝试.; 是的 现在拥有了 lock3.4.9 异常进入与退出指令异常进入与退出指令 加快异常进入退出的一些指令加快异常进入退出的一些指令 CPS 改变处理器状态 语法: CPSIE|ID #mode 操作: 如果指定 “IE” 使能中断, 否则屏蔽中断 ;通过指定设置模式 域指定哪类中断(IRQ, FIQ, Imprecise abort)需要被使能/屏蔽 SRS 保存返回状态 语法: SRS #mode! 操
51、作: 保存 r14,spsr 到r13_mode寄存器指定的地址处,可选择对r13_mode回写 RFE 从异常返回 语法: RFE Rn! 操作: 将 Rn 所指的内容加载到 pc 和 cpsr 寄存器 ,可选择对 Rn 回写这些指令都是无条件的这些指令都是无条件的主要内容主要内容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架构指令体系架构指令体系 3 ARM v5TE 3 ARM v5TE 架构指令体系架构指令体系 4 ARM v6 4 ARM v6 架构指令体系新特性架构指令体系新特性 5 Thumb5 Thumb指令集指令集 ARM 与与 Thumb
52、的比较的比较Thumb Thumb 是一个是一个1616位的指令集位的指令集 从 C 代码得到最优的代码密度 (约为 ARM 指令集65%左右) 对窄内存系统有更好的指令性能但是但是它有如下限制它有如下限制 它是 ARM 指令集的一个功能子集 也许几条 Thumb 指令才能代替一条ARM 指令 有限制的条件执行 数据处理指令只能使用低编号的寄存器(r0 - r7) 不能使用内嵌的桶型移位器. 立即数的范围更小 不能访问协处理器所以所以,thumbthumb指令集指令集 适合作为编译器的输出,而并非处理代码3.5.1 v4T 和和 v5TE的的Thumb指令集指令集 分支跳转指令分支跳转指令B label 范围在+/- 256字节B label 范围在+/- 2KBBL label 范围在 +/- 4MB (被编码为一对指令)BX Rd 绝对跳转,可能伴随状态切换BLX label与 BL 指令相同, 但会切换到 ARM 状态 (仅对 v5TE版本)BLX Rd与 BX 指令相同, 但会
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东电力高等专科学校《科技英语》2023-2024学年第二学期期末试卷
- 深圳技术大学《播音与主持实践1》2023-2024学年第二学期期末试卷
- 茶饮品牌门店运营效率提升策略:2025年管理优化报告
- 职业技能培训在乡村振兴中的农村社会保障体系建设创新研究报告
- 旅游与文化融合创新发展-2025年资金申请政策分析报告
- 2025 年广东省公务员录用考试《行政职业能力测验》试卷及答案
- 内部线路维修合同范例
- 农村土地股合同标准文本
- 劳动合同样本 工资
- 办公耗材维修合同样本
- 六年级期末试卷听力稿及参考答案
- 浙江杭州地区重点中学2025届高三六校第一次联考英语试卷含解析
- 河北省衡水2025届高考压轴卷数学试卷含解析
- DB14-T2551-2022公路隧道缺陷与病害处治及验收技术规范
- 文化产业示范基地创建验收标准
- 医学美容美学设计师培训
- GB/T 44569.1-2024土工合成材料内部节点强度的测定第1部分:土工格室
- 《智能网联汽车智能传感器测试与装调》电子教案
- 阿米巴管理模式培训
- DB3501T 006-2022 工业(产业)化工园区环境综合管理导则
- 《居民参与社区治理问题及对策探究:以L街道为例》
评论
0/150
提交评论