第3章Thumb-2指令系统_第1页
第3章Thumb-2指令系统_第2页
第3章Thumb-2指令系统_第3页
第3章Thumb-2指令系统_第4页
第3章Thumb-2指令系统_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

1、Embedded System DevelopmentEmbedded System Development嵌入式系统与应用嵌入式系统与应用 第第3 3章章 Thumb-2Thumb-2指令系统指令系统3.1 Thumb-2指令集指令集简介简介3.2 Cortex-M33.2 Cortex-M3八种寻址方式八种寻址方式3.3 3.3 简单的简单的Thumb Thumb 汇编程序汇编程序3.4 Thumb-23.4 Thumb-2指令基本格式指令基本格式3.53.5 Cortex-M3Cortex-M3常用常用的的Thumb-2Thumb-2指令集指令集3.1 Thumb-2指令集指令集简介简介

2、FThumb-2Thumb-2继承了传统的继承了传统的1616位长度的位长度的ThumbThumb指令集和指令集和3232位长度位长度的的ARMARM指令集的各自优点指令集的各自优点。使。使 Thumb Thumb 成为混合(成为混合(32 32 位和位和 16 16 位)长度指令集,是所有位)长度指令集,是所有 ARMv7 ARMv7 兼容的兼容的 ARM Cortex ARM Cortex 实现所通用的指令集。实现所通用的指令集。FThumb-2Thumb-2与现有与现有 ARM ARM 和和 Thumb Thumb 解决方案向后兼容,同时解决方案向后兼容,同时显著扩展了显著扩展了 Thu

3、mb Thumb 指令集的可用功能,从而使更多应用指令集的可用功能,从而使更多应用程序从程序从 Thumb Thumb 的同类最佳代码密度中获益。的同类最佳代码密度中获益。F为获得性能优化的代码,为获得性能优化的代码,Thumb-2 Thumb-2 技术使用少于技术使用少于 31% 31% 的的内存以降低系统成本,同时,提供比现有高密度代码高出内存以降低系统成本,同时,提供比现有高密度代码高出 38% 38% 的性能,因此可用于延长电池寿命,或丰富产品功能的性能,因此可用于延长电池寿命,或丰富产品功能集。集。FCortex-M3Cortex-M3处理器使用的是处理器使用的是Thumb-2Thu

4、mb-2指令集指令集的子集,的子集,它的它的指指令令工作状态只有工作状态只有Thumb-2Thumb-2状态状态。FT Th hu um mb b- -2 2指指令令集集体体系系架架构构,无无需需处处理理器器进进行行工工作作状状态态的的显显示示切切换换,就就可可运运行行1 16 6位位与与3 32 2位位混混合合代代码码,并并由由同同一一汇汇编编器器对对其其进进行行汇汇编编。 第第3 3章章 Thumb-2Thumb-2指令系统指令系统F3.1 Thumb-2指指令令集集简简介介F3 3. .2 2 C Co or rt te ex x- -M M3 3八八种种寻寻址址方方式式F3 3. .3

5、 3 简简单单的的T Th hu um mb b 汇汇编编程程序序F3 3. .4 4 T Th hu um mb b- -2 2指指令令基基本本格格式式3.2 3.2 Cortex-M3八种寻址方式寻址方式寻址方式是根据指令中给出的地址码字段来实现寻找寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。真实操作数地址的方式。指令的简单格式:指令的简单格式: , , ,Cortex-M3Cortex-M3处理器支持处理器支持8 8种基本寻址方式:种基本寻址方式:1 1、寄存器寻址、寄存器寻址2 2、立即寻址、立即寻址3 3、寄存器移位寻址、寄存器移位寻址4 4、寄存器间接寻址、

6、寄存器间接寻址5 5、基址寻址、基址寻址6 6、多寄存器寻址、多寄存器寻址7 7、堆栈寻址、堆栈寻址8 8、相对寻址、相对寻址 指令中的地址码字段(指令中的地址码字段(第一或第二操作数第一或第二操作数)给出的)给出的是寄存器编号,操作数的值在寄存器中,指令执行是寄存器编号,操作数的值在寄存器中,指令执行时直接取出寄存器值来操作。例:时直接取出寄存器值来操作。例: MOV R1,R2 ; MOV R1,R2 ;将将R2R2的值存入的值存入R1 R1 1 1、寄存器寻址、寄存器寻址SUB R0,R1,R2 SUB R0,R1,R2 ; ;将将R1R1的值减去的值减去R2R2的值,结果存的值,结果存

7、R0 R0 0 xAA0 x55R2R1MOV R1,R2MOV R1,R20 xAA 地址码字段(地址码字段(第一或第二操作数第一或第二操作数)直接给出是一整数)直接给出是一整数(称立即数),例:(称立即数),例: SUBS R0,R0,#1 ; SUBS R0,R0,#1 ;R0R0减减1 1结果放入结果放入R0R0,影响标志位,影响标志位2 2、立即寻址、立即寻址MOV R0,#0 xFF000 ;MOV R0,#0 xFF000 ;将立即数将立即数0 xFF0000 xFF000装入装入R0R00 x55R0MOV R0,#0 xFF00程序存储0 xFF00从代码中获得数据地址码字段

8、(地址码字段(第一或第二操作数第一或第二操作数)在操作之前,先)在操作之前,先进行移位操作。例:进行移位操作。例:MOVMOVR0,R0,R2,LSL #3 R2,LSL #3 ;R2;R2的值左移的值左移3 3位,结果存位,结果存R0R0, ; ;即是即是R0=R2R0=R28 8 3 3、寄存器移位寻址、寄存器移位寻址ANDSANDSR1,R1,R1,R1,R2,LSL R3 ;R2,LSL R3 ;R2R2的值左移的值左移R3R3位,再和位,再和R1R1相相“与与”操作,结果放入操作,结果放入R1R10 x55R0R20 x01MOV R0,R2,LSL #3MOV R0,R2,LSL

9、#30 x080 x08逻辑左移3位可采用的移位操作可采用的移位操作FLSLLSL逻辑左移逻辑左移(Logical Shift Left)(Logical Shift Left):寄存器中数据位低:寄存器中数据位低端空出的位补端空出的位补0 0;FLSRLSR逻辑右移逻辑右移(Logical Shift Right)(Logical Shift Right):寄存器中数据位高:寄存器中数据位高端空出的位补端空出的位补0 0;FASRASR算术右移算术右移(Arithmetic Shift Right)(Arithmetic Shift Right):移位过程中保:移位过程中保持符号位不变,即若

10、源操作数为正数,则数据位的高端空持符号位不变,即若源操作数为正数,则数据位的高端空出的位补出的位补0 0,否则补,否则补1 1;可采用的移位操作可采用的移位操作FRORROR循环右移循环右移(Rtate Right)(Rtate Right):由数据位的低端移出的位填:由数据位的低端移出的位填入数据位的高端空出的位;入数据位的高端空出的位;FRRXRRX带扩展的循环右移带扩展的循环右移(Rotate Right eXtended by 1 (Rotate Right eXtended by 1 place)place):操作数右移一位,高端空出的位用原:操作数右移一位,高端空出的位用原C C标

11、志值填标志值填充。充。 地址码段(地址码段(第一或第二操作数第一或第二操作数)给出的是一个通用寄存)给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,例:单元中,即寄存器为操作数的地址指针,例: LDR R1,R2; LDR R1,R2; 将将R2R2指向的存储单元的数据读出存指向的存储单元的数据读出存R1R1 0 x55R1R2 0 x400000000 xAA0 x400000004 4、寄存器间接寻址、寄存器间接寻址LDR R1,R2LDR R1,R20 xAA 就是将基址寄存器的内容与

12、给出的偏移量相加,形成就是将基址寄存器的内容与给出的偏移量相加,形成操作数的有效地址。用于查表、数组操作、功能部件操作数的有效地址。用于查表、数组操作、功能部件寄存器访问等。例:寄存器访问等。例: LDRLDR R2,R3,#0 x0C;R2,R3,#0 x0C;读读R3+0 x0CR3+0 x0C地址上的存储单元的值存地址上的存储单元的值存R2 R2 5 5、基址寻址、基址寻址0 x55R2R3 0 x400000000 xAA0 x4000000CLDR R2,R3,#0 x0CLDR R2,R3,#0 x0C0 xAA将R3+0 x0C作为地址装载数据 多寄存器寻址一次可传送几个寄存器值

13、,允许一条指令多寄存器寻址一次可传送几个寄存器值,允许一条指令传送传送1616个寄存器的任何子集或所有寄存器。例:个寄存器的任何子集或所有寄存器。例: LDMIA R1!,R2-R4,R6 ;LDMIA R1!,R2-R4,R6 ;将将R1R1指向单元中的数据存到指向单元中的数据存到 ;R2;R2R4R4、R6R6中中(R1(R1自动加自动加4) 4) 0 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存储器6 6、多寄存器寻址、多寄存器寻址L

14、DMIA R1!,R2-R4,R6 LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x040 x40000010STMIASTMIA R0!,R2-R7,R12 ;R0!,R2-R7,R12 ;将寄存器将寄存器R2R2R7R7、R12R12的值的值 ; ;存到存到R0R0指向的存储单元中指向的存储单元中 ;(R0;(R0自动加自动加4)4)7 7、堆栈寻址、堆栈寻址F堆栈是一个按特定顺序进行存取的存储区,后进先出。堆栈是一个按特定顺序进行存取的存储区,后进先出。F堆栈寻址是隐含的,使用一个专门的寄存器堆栈寻址是隐含的,使用一个专门的寄存器-堆栈指针堆栈指针SP,SP,指

15、向堆栈的存储单元即栈顶,指向堆栈的存储单元即栈顶,2 2种堆栈方式:向上生长与种堆栈方式:向上生长与向下生长的堆栈:向下生长的堆栈:栈底栈顶栈区SP堆栈存储区栈顶栈底栈区SP0 x12345678向下增长0 x12345678向上增长0 x123456780 x12345678压栈压栈堆栈寻址堆栈寻址F堆栈指针指向最后压入的有效数据项,称为满堆栈;堆栈指针指向最后压入的有效数据项,称为满堆栈;栈顶SP栈顶SP栈底空堆栈栈底满堆栈0 x123456780 x12345678栈顶SP0 x12345678栈顶SP压栈压栈F堆栈指针指向下一个待压入数据的空位置,称为空堆栈。堆栈指针指向下一个待压入数

16、据的空位置,称为空堆栈。 堆栈寻址堆栈寻址F所以可以组合出四种类型的堆栈方所以可以组合出四种类型的堆栈方式:式: 向上生长的满栈、向上生长的空栈、向上生长的满栈、向上生长的空栈、 向下生长的满栈、向下生长的空栈。向下生长的满栈、向下生长的空栈。 FCortex-M3Cortex-M3向下生长的满栈模型。向下生长的满栈模型。F例:例:FSTMDB SP!, R1-R7, LR ; STMDB SP!, R1-R7, LR ; 将将R1R1R7R7、LR LR 入栈入栈FLDMIA SP!, R1-R7, PC ; LDMIA SP!, R1-R7, PC ; 出栈,到出栈,到R1R1R7R7、L

17、R LR 寄存器寄存器8 8、相对寻址、相对寻址F相对寻址是基址寻址的一种变通。由程序计数器相对寻址是基址寻址的一种变通。由程序计数器PCPC提供提供基准地址,指令中的地址码字段作为偏移量,两者相加基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。后得到的地址即为操作数的有效地址。F例:例: B WAITA ; B WAITA ; 跳转到跳转到WAITAWAITA标号处,跳转范围标号处,跳转范围+16MB+16MB BL SUBR1 ; BL SUBR1 ; 调用到调用到SUBR1SUBR1子程序,并存储返回地子程序,并存储返回地 ;址到;址到LRLR中,其跳转

18、范围为中,其跳转范围为+16MB+16MB SUBR1 SUBR1 WAITA WAITA 第第3 3章章 Thumb-2Thumb-2指令系统指令系统F3.1 Thumb-2指指令令集集简简介介F3 3. .2 2 C Co or rt te ex x- -M M3 3八八种种寻寻址址方方式式F3 3. .3 3 简简单单的的T Th hu um mb b- -2 2汇汇编编程程序序F3 3. .4 4 T Th hu um mb b- -2 2指指令令基基本本格格式式3.3 3.3 简单的简单的Thumb Thumb 汇编程序汇编程序; ;文件名:文件名:TEST1.S AREA |tes

19、t1.s|,CODE,READONLY; AREA |test1.s|,CODE,READONLY;声明只读代码段声明只读代码段 DCD _Vectors DCD _Vectors DCD Reset_Handler DCD Reset_Handler EXPORT _Vectors EXPORT _Vectors EXPORT Reset_Handler EXPORT Reset_Handler_Vectors _Vectors Reset_Handler PROCReset_Handler PROC ; PROC/ENDP ; PROC/ENDP函数起始函数起始STARTSTART MOV

20、 R0,#15 ;R0 = 15 MOV R0,#15 ;R0 = 15 MOV R1,#8 ; R1 =8 MOV R1,#8 ; R1 =8 ADDS R0,R0,R1; R0 = R0 + R1 ADDS R0,R0,R1; R0 = R0 + R1 B BSTART START ENDP ;ENDP ;此处函数起始标记可省此处函数起始标记可省 END END使用使用“;”进行注释进行注释标号顶格写实际代码段声明文件结束第第3 3章章 Thumb-2Thumb-2指令系统指令系统F3 3. .1 1 T Th hu um mb b- -2 2指指令令集集简简介介F3 3. .2 2 C

21、Co or rt te ex x- -M M3 3八八种种寻寻址址方方式式F3 3. .3 3 简简单单的的T Th hu um mb b 汇汇编编程程序序F3 3. .4 4 T Th hu um mb b- -2 2指指令令基基本本格格式式F3 3. .5 5 C Co or rt te ex x- -M M3 3常常用用的的T Th hu um mb b- -2 2指指令令集集3.4 Thumb-23.4 Thumb-2指令基本格式指令基本格式1 1、指指令令基基本本格格式式: S S . .N N| |. .W W , , , , F 号号内内的的项项是是必必需需的的, 号号内内的的项

22、项是是可可选选的的;FO Op pc co od de e 指指令令助助记记符符,如如L LD DR R、S ST TR R 等等;FC Co on nd d 指指令令执执行行条条件件码码,不不选选为为A AL L(无无条条件件执执行行);FS S 有有S S则则运运算算结结果果影影响响A AP PS SR R寄寄存存器器的的标标志志位位;F. .N N| |. .W W . .N N为为1 16 6位位编编码码指指令令,. .W W为为3 32 2位位编编码码指指令令, 建建议议不不选选该该项项让让系系统统自自动动选选择择编编码码类类型型;FR Rd d 目目的的寄寄存存器器;FR Rn n

23、 第第1 1个个操操作作数数的的寄寄存存器器;FO Op pe er ra an nd d2 2 第第2 2个个操操作作数数。F例例:FL LD DR R. .N N R R1 1, , R R2 2, ,# #0 0 x x1 10 0 ; ; 1 16 6 位位指指令令,立立即即数数范范围围为为0 0- -1 12 24 4 ; ;读读R R2 2+ +0 0 x x1 10 0存存储储单单元元的的内内容容,存存到到R R1 12 2、指令执行条件码、指令执行条件码F使用指令条件码可以实现高效的逻辑操作,提高代码的使用指令条件码可以实现高效的逻辑操作,提高代码的执行效率。执行效率。不选为不

24、选为ALAL。指令执行条件码指令执行条件码F在在 Cortex-M3 Cortex-M3中,只有分支转移指令(中,只有分支转移指令(B B指令)才可以随指令)才可以随意使用条件码意使用条件码。例:。例: BEQ label ;BEQ label ;当当 Z = = 1 Z = = 1 时,程序转移到时,程序转移到labellabelF对于其它指令,只有在对于其它指令,只有在I IF-F-T THENHEN(ITIT)指令块中指令块中( (最多最多4 4条条) )才能加条件码,且必须加条件码。才能加条件码,且必须加条件码。FITIT已经带了一个已经带了一个T T,最多再带,最多再带3 3个个T

25、T或或E E( (与与T T相反的条件相反的条件) ),T T、E E排列无顺序排列无顺序。例:例:F CMP R0, R1 ; CMP R0, R1 ; 比较比较R0R0和和R1R1的值,影响标志位的值,影响标志位 ITTEE GT ; ITTEE GT ; 下带下带4 4条指令,条指令,如如R0R1R0R1既既GTGT成立成立,否则,否则LELE成立成立 MOV MOVGTGT R2, R0 ; GT R2, R0 ; GT成立成立,则,则 R2 = R0R2 = R0 MOV MOVGTGT R3, R1 ; R3, R1 ; GTGT成立成立,则,则 R3 = R1 R3 = R1 M

26、OV MOVLELE R2, R1 ; LE R2, R1 ; LE成立,则成立,则 R2 = R1R2 = R1 MOV MOVLELE R3, R0 ; R3, R0 ; LELE成立,则成立,则 R3 = R0R3 = R0 3 3、影响标志位的指令、影响标志位的指令在在C Co or rt te ex x- -M M3 3中中,下下列列指指令令将将会会更更新新 A AP PS SR R 中中的的标标志志位位:F1 16 6 位位算算术术逻逻辑辑指指令令;F3 32 2 位位带带 S S 后后缀缀的的算算术术逻逻辑辑指指令令;F比比较较指指令令(如如C CM MP P/ /C CM MN

27、 N)和和测测试试指指令令(如如T TS ST T/ /T TE EQ Q);F直直接接操操作作 P PS SR R/ /A AP PS SR R 指指令令( M MR RS S读读和和M MS SR R写写指指令令)。4 4、第第2 2个操作数个操作数的格式的格式F立即数:立即数:#immN#immN,3 3、5 5、8 8、1212、1616位长度的常数表达式,如:位长度的常数表达式,如: MOVW R1MOVW R1,#0 x1234 ; #0 x1234 ; 操作数为操作数为#imm16#imm16,范围为,范围为065535065535由一个由一个8 8 位数左移任意位而形成的常数,

28、如:位数左移任意位而形成的常数,如:0 x3FC(0 xFF2)0 x3FC(0 xFF2);重复半字形式重复半字形式0 x00XY00XY0 x00XY00XY、0 xXY00XY000 xXY00XY00、0 xXYXYXYXY0 xXYXYXYXY;FRmRm寄存器方式:操作数即为寄存器的数值,例:寄存器方式:操作数即为寄存器的数值,例:SUB R1SUB R1,R1R1,R2 ;R2 ; R1 R1减减R2R2,保存到,保存到R1R1中中F寄存器移位方式:寄存器移位方式:Rm,ShiftRm,Shift,将寄存器的移位结果作为操,将寄存器的移位结果作为操作数,例移位方法如下:作数,例移

29、位方法如下:ASR #n ASR #n 算术右移算术右移n n位(位(1n32)1n32);F例:例:ADD R1, R1, R1, LSL #3 ;ADD R1, R1, R1, LSL #3 ;逻辑左移逻辑左移R1 = R1+R1R1 = R1+R18 8第第3 3章章 Thumb-2Thumb-2指令系统指令系统F3.1 Thumb-2指指令令集集简简介介F3 3. .2 2 C Co or rt te ex x- -M M3 3八八种种寻寻址址方方式式F3 3. .3 3 简简单单的的T Th hu um mb b 汇汇编编程程序序F3 3. .4 4 T Th hu um mb b-

30、 -2 2指指令令基基本本格格式式F3 3. .5 5 C Co or rt te ex x- -M M3 3常常用用的的T Th hu um mb b- -2 2指指令令集集3.53.5 Cortex-M3Cortex-M3常用常用的的Thumb-2Thumb-2指令集指令集1、数据传送指令数据传送指令2、存储器访问、存储器访问指令指令3、算术运算指令算术运算指令4、逻辑运算指令逻辑运算指令5、移位和循环指令移位和循环指令6、符号扩展指令符号扩展指令7、字节调序指令字节调序指令8、位域处理指令位域处理指令9、子程序调用与无条件转移指令子程序调用与无条件转移指令10、饱和运算指令饱和运算指令1

31、、数据传送指令数据传送指令F 数据传送指令数据传送指令F例例利利用用M MO OV VW W和和M MO OV VT T指指令令的的配配合合来来完完成成3 32 2位位立立即即数数的的传传输输: M MO OV VW W R R1 1,# #0 0 x x1 12 23 34 4; ; R R1 1 = = 0 0 x x1 12 23 34 4,此此指指令令的的立立即即数数为为1 16 6位位 M MO OV VT T R R1 1,# #0 0 x x5 56 67 78 8; ; 此此指指令令的的立立即即数数为为1 16 6位位F两两条条指指令令执执行行后后,R R1 1 = = 0 0

32、 x x5 56 67 78 81 12 23 34 4,相相当当于于:R R1 1 = = ( (R R1 1 & & 0 0 x x0 00 00 00 0F FF FF FF F) ) | | 0 0 x x5 56 67 78 80 00 00 00 0F为为什什么么先先用用M MO OV VW W后后用用M MO OV VT T ?颠颠倒倒顺顺序序结结果果如如何何?FM MR RS S/ /M MS SR R 用用于于特特权权级级别别条条件件下下访访问问特特殊殊功功能能寄寄存存器器:2、存储器访问、存储器访问指令指令FCortex-M3Cortex-M3处理器对存储器

33、的访问只能通过加载处理器对存储器的访问只能通过加载LDRLDR和存储和存储STRSTR指令来实现。指令来实现。FLDRLDR是把存储器中的内容加载到寄存器中,是把存储器中的内容加载到寄存器中,STRSTR则是把寄存则是把寄存器内容存储至存储器中,数据类型:字节、半字、字和双器内容存储至存储器中,数据类型:字节、半字、字和双字;字;FLDM/STMLDM/STM多寄存器加载和存储指令可以实现一条指令加载多寄存器加载和存储指令可以实现一条指令加载和存储多个寄存器的内容,且大大高数据操作效率。和存储多个寄存器的内容,且大大高数据操作效率。四种四种传输模式传输模式: :IAIA:每次传送后地址加:每次

34、传送后地址加4 4;DBDB:每次传送前地址减:每次传送前地址减4 4;FDFD:满递减堆栈;:满递减堆栈;EAEA:空递增堆栈。:空递增堆栈。存储器访问存储器访问指令指令存储器访问存储器访问指令指令S ST TM M/ /L LD DM M 与与 P PU US SH H/ /P PO OP P 的的区区别别:FS ST TM M/ /L LD DM M 能能对对任任意意的的地地址址空空间间进进行行操操作作,而而 P PU US SH H/ /P PO OP P 只只能能对对堆堆栈栈空空间间进进行行操操作作;FS ST TM M/ /L LD DM M 的的生生长长方方式式可可以以支支持持向

35、向上上和和向向下下两两种种方方式式,而而 P PU US SH H/ /P PO OP P 只只能能支支持持向向下下生生长长;F当当两两对对指指令令的的操操作作数数都都为为 S SP P 时时,S ST TM M/ /L LD DM M 可可以以选选择择是是否否回回写写修修改改 S SP P 值值,而而P PU US SH H/ /P PO OP P 指指令令会会自自动动修修改改 S SP P 值值。S ST TM MD DB B S SP P! !, , R R4 4- -R R7 7,L LR R ; ;现现场场保保护护,R R4 4- -R R7 7、L LR R入入栈栈等等价价于于:

36、P PU US SH H R R4 4- -R R7 7,L LR R ;L LD DM MI IA A S SP P! !, , R R4 4- -R R7 7,P PC C ; ;恢恢复复现现场场,R R4 4- -R R7 7、L LR R入入栈栈等等价价于于: P PO OP P R R4 4- -R R7 7,P PC C ;3 3、算术运算指令算术运算指令算术运算指令算术运算指令F除法中,除法中,为捕捉被零除的非法操作,可在为捕捉被零除的非法操作,可在NVICNVIC的配置控制的配置控制寄存器中置位寄存器中置位DIVBZERODIVBZERO位。位。F如出现了被零除的情况,将会引发

37、一个用法如出现了被零除的情况,将会引发一个用法faultfault异常。异常。如没有任何措施,如没有任何措施,RdRd将在除数为零时被清零。将在除数为零时被清零。算术运算指令算术运算指令F以加法为例说明以加法为例说明16bit16bit、32bit32bit的算术四则运算指令:的算术四则运算指令:ADD R0, R1 ; R0 += R1ADD R0, #0 x12 ; R0 += 12ADD.W R0, R1, R2 ; R0 = R1+R2F当使用当使用16 16 位加法时,会自动更新位加法时,会自动更新APSR APSR 中的标志位。中的标志位。F在使用了在使用了“.W.W”显式指定了显

38、式指定了32 32 位指令后,就可以通过位指令后,就可以通过“S”S”后缀控制对后缀控制对APSR APSR 的更新:的更新:ADD.W R0, R1, R2 ; 不更新标志位不更新标志位ADDS.W R0, R1, R2 ; 更新标志位更新标志位4 4、逻辑运算指令、逻辑运算指令5 5、移位和循环指令移位和循环指令F如果是如果是16 位位Thumb-2指令,则总是更新指令,则总是更新C 的。的。F如果在指令上加上如果在指令上加上“S”后缀,会更新进位位后缀,会更新进位位C。6 6、符号扩展指令符号扩展指令F二进制补码表示法中,最高位是符号位二进制补码表示法中,最高位是符号位。F把一个把一个8

39、 8 位或位或16 16 位负数扩展成位负数扩展成32 32 位时位时:对于对于负数负数,必须把所有高位全填必须把所有高位全填1 1,其数值不变其数值不变;至于正数或无符号数,则只需简单地把高位清至于正数或无符号数,则只需简单地把高位清0 0。7 7、字节调序指令字节调序指令例:例:R0=0 x12345678R0=0 x12345678 REV R1, R0 REV R1, R0; REVH R2, R0 REVH R2, R0; REV16 R3, R0 REV16 R3, R0; 则则R1=0 x78563412R1=0 x78563412, R2=0 x12347856 R2=0 x1

40、2347856, R3=0 x34127856 R3=0 x34127856。例:例:R0=0 x33448899R0=0 x33448899 REVSH R1, R0REVSH R1, R0; 后后 R1=0 xFFFF9988 R1=0 xFFFF9988。8 8、位域处理指令位域处理指令例例1 1: LDR R0, =0 x1234FFFF; BFC R0, #4, #10; 结果:结果:R0= 0 x1234C00F。例例2 2:LDR R0, =0 x12345678 LDR R1, =0 xAABBCCDD BFI.W R1, R0, #8, #16结果:结果:R1= 0 xAA5678DD 位域处理指令位域处理指令例例3 3: UBFX LDR R0 =0 x5678ABCD; UBFX.W R1, R0, #12,#16 ;结结果果:R0=0 x0000678A。例例4 4:SBFX也也抽抽取取任任意意的的位位域域,以以带带符符号号的的方方式式进进行行扩扩展展。 LDR R0, =0 x5678ABCD SBFX.W R1, R0, #8,#4 ;结结果果:R0=0 xFFFFFFFB9 9、子程序调用与无条件转移指令子程序调用与无条件转移指令F子子程程序序调调用

温馨提示

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

评论

0/150

提交评论