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

下载本文档

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

文档简介

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-2Thu

2、mb-2指令集指令集 3.1 Thumb-2指令集指令集简介简介 FCortex-M3Cortex-M3处理器使用的是处理器使用的是Thumb-2Thumb-2指令集指令集的子集,的子集,它的它的指指 令令工作状态只有工作状态只有Thumb-2Thumb-2状态状态。 FThumb-2Thumb-2继承了传统的继承了传统的ThumbThumb指令集和指令集和ARMARM指令集的各自优指令集的各自优 点点,并不是并不是ThumbThumb的升级的升级,包含,包含16-bit16-bit指令集指令集和和32-bit32-bit指指 令集令集两种长度的指令子集。两种长度的指令子集。 FThumb-2

3、Thumb-2指令集体系架构,无需指令集体系架构,无需处理器进行工作状态的显处理器进行工作状态的显 示示切换切换,就就可可运行运行1616位与位与3232位混合代码位混合代码,并由同一汇编器,并由同一汇编器 对其进行汇编。对其进行汇编。 第第3 3章章 Thumb-2Thumb-2指令系统指令系统 F3.1 Thumb-2指令集指令集简介简介 F3.2 Cortex-M33.2 Cortex-M3八种寻址方式八种寻址方式 F3.3 3.3 简单的简单的Thumb Thumb 汇编程序汇编程序 F3.4 Thumb-23.4 Thumb-2指令基本格式指令基本格式 3.2 3.2 Cortex-

4、M3八种寻址方式寻址方式 寻址方式是根据指令中给出的地址码字段来实现寻找寻址方式是根据指令中给出的地址码字段来实现寻找 真实操作数地址的方式。真实操作数地址的方式。指令的简单格式:指令的简单格式: , , , Cortex-M3Cortex-M3处理器支持处理器支持8 8种基本寻址方式:种基本寻址方式: 1 1、寄存器寻址、寄存器寻址 2 2、立即寻址、立即寻址 3 3、寄存器移位寻址、寄存器移位寻址 4 4、寄存器间接寻址、寄存器间接寻址 5 5、基址寻址、基址寻址 6 6、多寄存器寻址、多寄存器寻址 7 7、堆栈寻址、堆栈寻址 8 8、相对寻址、相对寻址 指令中的地址码字段(指令中的地址码

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

6、直接给出是一整数)直接给出是一整数 (称立即数),例:(称立即数),例: 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装入装入R0R0 0 x55R0 MOV R0,#0 xFF00 程序存储 0 xFF00 从代码中获得数据 地址码字段(地址码字段(第一或第二操作数第一或第二操作数)在操作之前,先)在操作之前,先 进行移位操作。例:进行移位操作。例: MOVMO

7、VR0,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相相“与与”操作,结果放入操作,结果放入R1R1 0 x55R0 R20 x01 MOV R0,R2,LSL #3MOV R0,R2,LSL #3 0 x08 0 x08 逻辑左移3位 可采用的移位操作可采用的移位操作 FLSLLSL逻辑左移逻辑左移(Lo

8、gical Shift Left)(Logical Shift Left):寄存器中数据位低:寄存器中数据位低 端空出的位补端空出的位补0 0; FLSRLSR逻辑右移逻辑右移(Logical Shift Right)(Logical Shift Right):寄存器中数据位高:寄存器中数据位高 端空出的位补端空出的位补0 0; FASRASR算术右移算术右移(Arithmetic Shift Right)(Arithmetic Shift Right):移位过程中保:移位过程中保 持符号位不变,即若源操作数为正数,则数据位的高端空持符号位不变,即若源操作数为正数,则数据位的高端空 出的位补出

9、的位补0 0,否则补,否则补1 1; 可采用的移位操作可采用的移位操作 FRORROR循环右移循环右移(Rtate Right)(Rtate Right):由数据位的低端移出的位填:由数据位的低端移出的位填 入数据位的高端空出的位;入数据位的高端空出的位; FRRXRRX带扩展的循环右移带扩展的循环右移(Rotate Right eXtended by 1 (Rotate Right eXtended by 1 place)place):操作数右移一位,高端空出的位用原:操作数右移一位,高端空出的位用原C C标志值填标志值填 充。充。 地址码段(地址码段(第一或第二操作数第一或第二操作数)给出

10、的是一个通用寄存)给出的是一个通用寄存 器的编号,所需的操作数保存在寄存器指定地址的存储器的编号,所需的操作数保存在寄存器指定地址的存储 单元中,即寄存器为操作数的地址指针,例:单元中,即寄存器为操作数的地址指针,例: LDR R1,R2; LDR R1,R2; 将将R2R2指向的存储单元的数据读出存指向的存储单元的数据读出存R1R1 0 x55R1 R2 0 x40000000 0 xAA0 x40000000 4 4、寄存器间接寻址、寄存器间接寻址 LDR R1,R2LDR R1,R2 0 xAA 就是将基址寄存器的内容与给出的偏移量相加,形成就是将基址寄存器的内容与给出的偏移量相加,形成

11、 操作数的有效地址。用于查表、数组操作、功能部件操作数的有效地址。用于查表、数组操作、功能部件 寄存器访问等。例:寄存器访问等。例: LDRLDR R2,R3,#0 x0C;R2,R3,#0 x0C;读读R3+0 x0CR3+0 x0C地址上的存储单元的值存地址上的存储单元的值存R2 R2 5 5、基址寻址、基址寻址 0 x55R2 R3 0 x40000000 0 xAA0 x4000000C LDR R2,R3,#0 x0CLDR R2,R3,#0 x0C 0 xAA 将R3+0 x0C作为 地址装载数据 多寄存器寻址一次可传送几个寄存器值,允许一条指令多寄存器寻址一次可传送几个寄存器值,

12、允许一条指令 传送传送1616个寄存器的任何子集或所有寄存器。例:个寄存器的任何子集或所有寄存器。例: LDMIA R1!,R2-R4,R6 ;LDMIA R1!,R2-R4,R6 ;将将R1R1指向单元中的数据存到指向单元中的数据存到 ;R2;R2R4R4、R6R6中中(R1(R1自动加自动加4) 4) 0 x40000000R1 R20 x?0 x010 x40000000 0 x?R3 R40 x? R60 x? 0 x02 0 x03 0 x04 0 x40000004 0 x40000008 0 x4000000C 存储器 6 6、多寄存器寻址、多寄存器寻址 LDMIA R1!,R2

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

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

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

16、IA SP!, R1-R7, PC ; 出栈,到出栈,到R1R1R7R7、LR LR 寄存器寄存器 8 8、相对寻址、相对寻址 F相对寻址是基址寻址的一种变通。由程序计数器相对寻址是基址寻址的一种变通。由程序计数器PCPC提供提供 基准地址,指令中的地址码字段作为偏移量,两者相加基准地址,指令中的地址码字段作为偏移量,两者相加 后得到的地址即为操作数的有效地址。后得到的地址即为操作数的有效地址。 F例:例: B WAITA ; B WAITA ; 跳转到跳转到WAITAWAITA标号处,跳转范围标号处,跳转范围+16MB+16MB BL SUBR1 ; BL SUBR1 ; 调用到调用到SUB

17、R1SUBR1子程序,并存储返回地子程序,并存储返回地 ;址到;址到LRLR中,其跳转范围为中,其跳转范围为+16MB+16MB SUBR1 SUBR1 WAITA WAITA 第第3 3章章 Thumb-2Thumb-2指令系统指令系统 F3.1 Thumb-2指令集指令集简介简介 F3.2 Cortex-M33.2 Cortex-M3八种寻址方式八种寻址方式 F3.3 3.3 简单的简单的Thumb Thumb 汇编程序汇编程序 F3.4 Thumb-23.4 Thumb-2指令基本格式指令基本格式 3.3 3.3 简单的简单的Thumb Thumb 汇编程序汇编程序 ; ;文件名:文件名

18、:TEST1.S AREA |test1.s|,CODE,READONLY; AREA |test1.s|,CODE,READONLY;声明只读代码段声明只读代码段 THUMB THUMB 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 ;

19、PROC/ENDP函数起始函数起始 STARTSTART MOV 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.1 Thumb-23.1 Th

20、umb-2指令集指令集简介简介 F3.2 Cortex-M33.2 Cortex-M3八种寻址方式八种寻址方式 F3.3 3.3 简单的简单的Thumb Thumb 汇编程序汇编程序 F3.4 Thumb-23.4 Thumb-2指令基本格式指令基本格式 F3.53.5 Cortex-M3Cortex-M3常用常用的的Thumb-2Thumb-2指令集指令集 3.4 Thumb-23.4 Thumb-2指令基本格式指令基本格式 1 1、指令基本格式:、指令基本格式: S.N|.W ,S.N|.W , F 号内的项是必需的,号内的项是必需的,号内的项是可选的;号内的项是可选的; FOpcode

21、Opcode 指令助记符,如指令助记符,如LDRLDR、STR STR 等;等; FCondCond 指令执行条件码,不选为指令执行条件码,不选为ALAL(无条件执行);(无条件执行); FS S 有有S S则运算结果影响则运算结果影响APSRAPSR寄存器的标志位;寄存器的标志位; F.N|.W .N.N|.W .N为为1616位编码指令,位编码指令,.W.W为为3232位编码指令,位编码指令, 建议不选该项让系统自动选择编码类型;建议不选该项让系统自动选择编码类型; FRd Rd 目的寄存器;目的寄存器; FRn Rn 第第1 1个操作数的寄存器;个操作数的寄存器; FOperand2 O

22、perand2 第第2 2个操作数。个操作数。 F例:例: FLDR.N R1,R2,#0 x10 ; LDR.N R1,R2,#0 x10 ; 16 16 位指令,立即数范围为位指令,立即数范围为0-1240-124 ; ;读读R2+0 x10R2+0 x10存储单元的内容,存到存储单元的内容,存到R1R1 2 2、指令执行条件码、指令执行条件码 F使用指令条件码可以实现高效的逻辑操作,提高代码的使用指令条件码可以实现高效的逻辑操作,提高代码的 执行效率。不选为执行效率。不选为ALAL。 条件码条件码标志标志含义含义 EQEQZ=1Z=1相等相等 NENEZ=0Z=0不相等,与不相等,与EQ

23、EQ相反相反 CS/HSCS/HSC=1C=1进位(无符号数大于或等于)进位(无符号数大于或等于) CC/LOCC/LOC=0C=0未进位(无符号数小于)未进位(无符号数小于) MIMIN=1N=1负数负数 PLPLN=0N=0非负数非负数 VSVSV=1V=1溢出溢出 VCVCV=0V=0没有溢出没有溢出 HIHIC = = 1 BEQ label ;当当 Z = = 1 Z = = 1 时,程序转移到时,程序转移到labellabel F对于其它指令,只有在对于其它指令,只有在I IF-F-T THENHEN(ITIT)指令块中指令块中( (最多最多4 4条条) ) 才能加条件码,且必须加

24、条件码。才能加条件码,且必须加条件码。 FITIT已经带了一个已经带了一个T T,最多再带,最多再带3 3个个T 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 M

25、OV MOVGTGT R3, R1 ; R3, R1 ; GTGT成立成立,则,则 R3 = R1 R3 = R1 MOV MOVLELE R2, R1 ; LE R2, R1 ; LE成立,则成立,则 R2 = R1R2 = R1 MOV MOVLELE R3, R0 ; R3, R0 ; LELE成立,则成立,则 R3 = R0R3 = R0 3 3、影响标志位的指令、影响标志位的指令 在在Cortex-M3Cortex-M3中,下列指令将会更新中,下列指令将会更新 APSR APSR 中的标志位:中的标志位: F16 16 位算术逻辑指令;位算术逻辑指令; F32 32 位带位带 S S

26、 后缀的算术逻辑指令;后缀的算术逻辑指令; F比较指令比较指令(如(如CMP/CMNCMP/CMN)和测试指令和测试指令(如(如TST/TEQTST/TEQ); F直接操作直接操作 PSR/APSR PSR/APSR 指令(指令( MRS MRS读和读和MSRMSR写写指令)。指令)。 4 4、第、第2 2个操作数的格式个操作数的格式 F立即数:立即数:#immN#immN, 3 3、5 5、8 8、1212、1616位长度的常数表达式,如:位长度的常数表达式,如: MOVW R1MOVW R1,#0 x1234 ; #0 x1234 ; 操作数为操作数为#imm16#imm16,范围为,范围

27、为065535065535 由一个由一个8 8 位数左移任意位而形成的常数,如:位数左移任意位而形成的常数,如: 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,Shif

28、t,将寄存器的移位结果作为操,将寄存器的移位结果作为操 作数,例移位方法如下:作数,例移位方法如下: 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.2 Cortex-M33.2 Cortex-M3八种寻址方式八种寻址方式 F3.3 3.3 简单的简单的Thumb Thumb 汇

29、编程序汇编程序 F3.4 Thumb-23.4 Thumb-2指令基本格式指令基本格式 F3.53.5 Cortex-M3Cortex-M3常用常用的的Thumb-2Thumb-2指令集指令集 3.53.5 Cortex-M3Cortex-M3常用常用的的Thumb-2Thumb-2指令集指令集 1、数据传送指令数据传送指令 2、存储器访问、存储器访问指令指令 3、算术运算指令算术运算指令 4、逻辑运算指令逻辑运算指令 5、移位和循环指令移位和循环指令 6、符号扩展指令符号扩展指令 7、字节调序指令字节调序指令 8、位域处理指令位域处理指令 9、子程序调用与无条件转移指令子程序调用与无条件转移

30、指令 10、饱和运算指令饱和运算指令 1、数据传送指令数据传送指令 F 指令指令功能描述功能描述 MOVMOV , # , #将将8 8位位立即数传到目标寄存器立即数传到目标寄存器 MOV , MOV , 将寄存器值传给低目标寄存器将寄存器值传给低目标寄存器 MVNMVN , , 寄存器值取反后传给目标寄存器寄存器值取反后传给目标寄存器 MOVS.W , #MOVS.W , #将将1212位立即数传送到寄存器中位立即数传送到寄存器中 MOVS.W , ,MOVS.W , ,将移位后的寄存器值传到寄存器将移位后的寄存器值传到寄存器 MOVTMOVT.W , #.W , # 将将1616位立即数传

31、送到寄存器的高位立即数传送到寄存器的高 半字半字31:1631:16 MOVWMOVW.W , #.W , # 1616位立即数传到寄存器的低半字位立即数传到寄存器的低半字 15:015:0,将,将高半字高半字31:1631:16清零清零 MRSMRS , , Reg读读特殊功能寄存器特殊功能寄存器SRegSReg MSRMSR , , n写写特殊功能寄存器特殊功能寄存器SRegSReg 数据传送指令数据传送指令 F例例利用利用MOVWMOVW和和MOVTMOVT指令的配合来完成指令的配合来完成3232位立即数的传输位立即数的传输: MOVW R1 MOVW R1,#0 x1234; #0 x

32、1234; R1 = 0 x1234R1 = 0 x1234,此指令的立即数为,此指令的立即数为1616位位 MOVT R1 MOVT R1,#0 x5678;#0 x5678; 此指令的立即数为此指令的立即数为1616位位 F两条指令执行后,两条指令执行后,R1 = 0 x56781234R1 = 0 x56781234,相当于:相当于: R1 = (R1 LR;现场保护,现场保护,R4-R7R4-R7、LRLR入栈入栈 等价等价于于: PUSH R4-R7PUSH R4-R7,LRLR; LDMIA SP!,R4-R7LDMIA SP!,R4-R7,PC;PC;恢复现场恢复现场,R4-R7

33、R4-R7、LRLR入栈入栈 等价于:等价于: POP R4-R7POP R4-R7,PCPC; 3 3、算术运算指令、算术运算指令 ADD Rd, Rn, Rm ; Rd = Rn+RmADD Rd, Rn, Rm ; Rd = Rn+Rm 常规加法常规加法 ADD Rd, Rm ; Rd += RmADD Rd, Rm ; Rd += Rm ADD Rd, #imm ; Rd += immADD Rd, #imm ; Rd += imm im8im8(16 16 位指令)或位指令)或im12im12 (3232位指令)位指令) ADC Rd, Rn, Rm ; Rd = Rn+Rm+CAD

34、C Rd, Rn, Rm ; Rd = Rn+Rm+C 带进位的加法带进位的加法, , Im8 Im8 或或im12im12 ADC Rd, Rm ; Rd += Rm+CADC Rd, Rm ; Rd += Rm+C ADC Rd, #imm ; Rd += imm+CADC Rd, #imm ; Rd += imm+C SUB Rd, Rn ; Rd -= RnSUB Rd, Rn ; Rd -= Rn 常规减法常规减法 SUB Rd, Rn, #imm3 ; Rd = Rn-imm3SUB Rd, Rn, #imm3 ; Rd = Rn-imm3 SUB Rd, #imm8 ; Rd -

35、= imm8SUB Rd, #imm8 ; Rd -= imm8 SUB Rd, Rn, Rm ; Rd = Rm-RmSUB Rd, Rn, Rm ; Rd = Rm-Rm SBC Rd, Rm ; Rd -= Rm+CSBC Rd, Rm ; Rd -= Rm+C 带借位的减法带借位的减法SBC.W Rd, Rn, #imm12 ; Rd = Rn-imm12-CSBC.W Rd, Rn, #imm12 ; Rd = Rn-imm12-C SBC.W Rd, Rn, Rm ; Rd = Rn-Rm-CSBC.W Rd, Rn, Rm ; Rd = Rn-Rm-C 算术运算指令算术运算指令

36、F除法中,除法中,为捕捉被零除的非法操作,可在为捕捉被零除的非法操作,可在NVICNVIC的配置控制的配置控制 寄存器中置位寄存器中置位DIVBZERODIVBZERO位。位。 F如出现了被零除的情况,将会引发一个用法如出现了被零除的情况,将会引发一个用法faultfault异常。异常。 如没有任何措施,如没有任何措施,RdRd将在除数为零时被清零。将在除数为零时被清零。 RSB.W Rd, Rn, #imm12 ; Rd = imm12-RnRSB.W Rd, Rn, #imm12 ; Rd = imm12-Rn 反向减法反向减法 RSB.W Rd, Rn, Rm ; Rd = Rm-RnR

37、SB.W Rd, Rn, Rm ; Rd = Rm-Rn MUL Rd, Rm ; Rd MUL Rd, Rm ; Rd * *= Rm= Rm 常规乘法常规乘法 MUL.W Rd, Rn, Rm ; Rd = RnMUL.W Rd, Rn, Rm ; Rd = Rn* *RmRm MLA Rd, Rm, Rn, Ra ; Rd = Ra+RmMLA Rd, Rm, Rn, Ra ; Rd = Ra+Rm* *RnRn乘加乘加 MLS Rd, Rm, Rn, Ra ; Rd = Ra-RmMLS Rd, Rm, Rn, Ra ; Rd = Ra-Rm* *RnRn乘减乘减 UDIV Rd, R

38、n, Rm ; Rd = Rn/Rm UDIV Rd, Rn, Rm ; Rd = Rn/Rm 无符号除法无符号除法硬件支持的除法,硬件支持的除法, 余数被丢弃余数被丢弃SDIV Rd, Rn, Rm ; Rd = Rn/Rm SDIV Rd, Rn, Rm ; Rd = Rn/Rm 带符号除法带符号除法 SMULL RL, RH, Rm, Rn ;RH:RL= RmSMULL RL, RH, Rm, Rn ;RH:RL= Rm* *RnRn 带符号的带符号的64 64 位乘法位乘法 SMLAL RL, RH, Rm, Rn ;RH:RL+= RmSMLAL RL, RH, Rm, Rn ;R

39、H:RL+= Rm* *RnRn UMULL RL, RH, Rm, Rn ;RH:RL= RmUMULL RL, RH, Rm, Rn ;RH:RL= Rm* *RnRn 无符号的无符号的64 64 位乘法位乘法 SMLAL RL, RH, Rm, Rn ;RH:RL+= RmSMLAL RL, RH, Rm, Rn ;RH:RL+= Rm* *RnRn 算术运算指令算术运算指令 F以加法为例说明以加法为例说明16bit16bit、32bit32bit的算术四则运算指令:的算术四则运算指令: ADD R0, R1 ; R0 += R1 ADD R0, #0 x12 ; R0 += 12 AD

40、D.W R0, R1, R2 ; R0 = R1+R2 F当使用当使用16 16 位加法时,会自动更新位加法时,会自动更新APSR APSR 中的标志位。中的标志位。 F在使用了在使用了“.W.W”显式指定了显式指定了32 32 位指令后,就可以通过位指令后,就可以通过 “S”S”后缀控制对后缀控制对APSR APSR 的更新:的更新: ADD.W R0, R1, R2 ; 不更新标志位不更新标志位 ADDS.W R0, R1, R2 ; 更新标志位更新标志位 4 4、逻辑运算指令、逻辑运算指令 AND Rd, Rn ; Rd Rd = Rn Rd = Rm Rd |= Rn ORR.W Rd

41、, Rn, #imm12 ; Rd = Rn | imm12 ORR.W Rd, Rm, Rn ; Rd = Rm | Rn 按位或 BIC Rd, Rn ; Rd Rd = Rn Rd = Rm Rd = Rn | imm12 ORN.W Rd, Rm, Rn ; Rd = Rm | Rn 按位或反码 EOR Rd, Rn ; Rd = Rn EOR.W Rd, Rn, #imm12 ; Rd = Rn imm12 EOR.W Rd, Rm, Rn ; Rd = Rm Rn (按位)异 或,异或总 是按位的 5 5、移位和循环指令、移位和循环指令 LSL Rd, Rn, #imm5 ; Rd

42、 = Rnimm5 LSL Rd, Rn ; Rd = Rn LSL.W Rd, Rm, Rn ; Rd = Rmimm5 LSR Rd, Rn ; Rd = Rn LSR.W Rd, Rm, Rn ; Rd = RmRn 逻辑右移 ASR Rd, Rn, #imm5 ; Rd = Rnimm5 ASR Rd, Rn ; Rd = Rn ASR.W Rd, Rm, Rn ; Rd = Rm Rn 算术右移 ROR Rd, Rn ; Rd = Rn ROR.W Rd, Rm, Rn ; Rd = Rm Rn 循环右移 RRX.W Rd, Rn ; Rd=(Rn1)+(C31) 带进位的右移一位

43、F如果是如果是16 位位Thumb-2指令,则总是更新指令,则总是更新C 的。的。 F如果在指令上加上如果在指令上加上“S”后缀,会更新进位位后缀,会更新进位位C。 6 6、符号扩展指令、符号扩展指令 F二进制补码表示法中,最高位是符号位二进制补码表示法中,最高位是符号位。 F把一个把一个8 8 位或位或16 16 位负数扩展成位负数扩展成32 32 位时位时: 对于对于负数负数,必须把所有高位全填必须把所有高位全填1 1,其数值不变其数值不变; 至于正数或无符号数,则只需简单地把高位清至于正数或无符号数,则只需简单地把高位清0 0。 指令指令功能描述功能描述 SXTB Rd, Rm ; Rd

44、 = Rm带符号扩展带符号扩展 把带符号字节整数扩展到把带符号字节整数扩展到 32 位位 SXTH Rd, Rm ; Rd = Rm带符号带符号扩展扩展把带符号半字整数扩展到把带符号半字整数扩展到 32 位位 7 7、字节调序指令、字节调序指令 REV.W Rd, Rn 在字中调整字节序在字中调整字节序 REV16.W Rd, Rn 在高低半字中调整字节序在高低半字中调整字节序 REVSH.W 在低半字中调整字节序,并带符号扩展在低半字中调整字节序,并带符号扩展 例:例:R0=0 x12345678R0=0 x12345678 REV R1, R0 REV R1, R0; REVH R2, R

45、0 REVH R2, R0; REV16 R3, R0 REV16 R3, R0; 则则R1=0 x78563412R1=0 x78563412, R2=0 x12347856 R2=0 x12347856, 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; 结果:结果:

46、R0= 0 x1234C00F。 指令指令功能描述功能描述 BFC.W Rd, #, #位域位域清零:第清零:第lsb位开始的位开始的width宽度宽度 BFI.W Rd, Rn, #, #将寄存器的将寄存器的位域位域插入另一个寄存器中插入另一个寄存器中 CLZ.W Rd, Rn 计算前导计算前导0 的数目的数目 RBIT.W Rd, Rn 按位旋转按位旋转180 度度 SBFX.W Rd, Rn, #, # 拷贝位域,并带符号扩展到拷贝位域,并带符号扩展到32 位位 UBFX.W Rd, Rn, #, # 拷贝位域,并无符号扩展到拷贝位域,并无符号扩展到32 位位 例例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也抽取任意的位域,以带符号的方式进行扩也抽取任意的位域,以带符号的方式进行扩

温馨提示

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

评论

0/150

提交评论