Presentation is loading. Please wait.

Presentation is loading. Please wait.

第四章 Thumb 指令集 4.1 Thumb 指令集概述 4.2 Thumb 指令详细介绍.

Similar presentations


Presentation on theme: "第四章 Thumb 指令集 4.1 Thumb 指令集概述 4.2 Thumb 指令详细介绍."— Presentation transcript:

1 第四章 Thumb 指令集 4.1 Thumb 指令集概述 4.2 Thumb 指令详细介绍

2 4.1 Thumb指令集概述 4.1.1 Thumb指令集编码 4.1.2 Thumb状态切换 4.1.3 编程模型
ARM开发工具完全支持Thumb指令,应用程序可以灵活的将ARM和Thumb子程序混合编程以便在例程的基础上提高性能或代码密度。在编写Thumb指令时,先要用伪指令CODE16声明(ADS的编译环境下),而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。本节可以分为以下几个部分: 4.1.1 Thumb指令集编码 4.1.2 Thumb状态切换 4.1.3 编程模型 4.1.4 Thumb指令集特性

3 4.1.1Thumb指令集编码 Thumb指令集编码如下:

4 4.1.2Thumb状态切换 在任何时刻,CPSR的第5位(位T)决定了ARM微处理器执行的是ARM指令流还是Thumb指令流。当T置1,则认为是16位的Thumb指令流;当T置0,则认为是32位的ARM指令流。 进入Thumb模式 进入Thumb指令模式有两种方法:一种是执行一条交换转移指令BX,另一种方法是利用异常返回,也可以把微处理器从ARM模式转换为Thumb模式。 退出Thumb模式 退出Thumb指令模式也有两种方法:一种是执行Thumb指令中的交换转移BX指令可以显式的返回到ARM指令流。另一种是利用异常进入ARM指令流 。

5 4.1.3编程模型 Thumb指令集是ARM指令集的一个子集,并只能对限定的ARM寄存器进行操作。其编程模型如下图所示: r0 r1 r2
SP(r13) LR(r14) PC(r15) Lo寄存器 Hi寄存器 CPSR 有阴影的寄存器 访问时受到限制

6 4.1.4Thumb指令集特点 Thumb指令继承了ARM指令集的许多特点 Thumb指令集丢弃了ARM指令集一些特性
Thumb指令也是采用Load/Store结构,有数据处理、数据传送及流控制指令等。 Thumb指令集丢弃了ARM指令集一些特性 大多数Thumb指令是无条件执行的(除了转移指令B),而所有ARM指令都是条件执行的。许多Thumb数据处理指令采用2地址格式,即目的寄存器与一个源寄存器相同,而大多数ARM数据处理指令采用的是3地址格式(除了64位乘法指令外)。 Thumb异常时表现的一些特点 所有异常都会使微处理器返回到ARM模式状态,并在ARM的编程模式中处理。由于ARM微处理器字传送地址必须可被4整除(即字对准),半字传送地址必须可被2整除(即半字对准)。而Thumb指令是2个字节长,而不是4个字节,所以,由Thumb执行状态进入异常时其自然偏移与ARM不同。

7 4.2 Thumb指令集详细介绍 16位Thumb指令集是从32位ARM指令集提取指令格式的,每条Thumb指令有相同处理器模型所对应的32位ARM指令。 4.2.1 数据处理指令; 4.2.2 转移指令; 4.2.3 Load/Store指令; 4.2.4异常中断指令。

8 4.2.1Thumb数据处理指令 Thumb数据处理指令包括一组高度优化且相当复杂的指令,范围涵盖编译器通常需要的大多数操作。ARM指令支持在单条指令中完成一个操作数的移位及一个ALU操作,但Thumb指令集将移位操作和ALU操作分离为不同的指令。本部分从以下几个方面介绍: 数据处理指令的二进制编码 数据处理指令的分类 ARM指令与Thumb指令比较

9 数据处理指令 数据处理指令的二进制编码如下图:

10 数据处理指令 按照数据处理指令的功能,可以将其分为以下几类: 算术运算指令,它又分为以下几类:
移位和循环移位操作(ASR,LSL,LSR和ROR) 比较指令(CMP和CMN) 传送和取负指令(MOV,MVN和NEG) 测试指令(TST) ADD与SUB—低寄存器加法和减法 ADD—高或低寄存器 ADD与SUB—SP ADD—PC或SP相对偏移 ADC,SBC和MUL

11 数据处理指令 ARM指令与Thumb指令低寄存器比较: ARM指令 Thumb指令 MOVS Rd, #<#imm8> MOV
MOV MVNS Rm MVN CMP RN, Rn, CMN TST ADDS #<#imm3> ADD ADCS ADC SUBS SUB SBCS SBC RSBS #0 NEG Rn Rm, LSL #<#sh> LSL #<#sh> LSL Rs Rs LSR #<#sh> LSR LSR Rs ASR #<#sh> ASR ROR Rs ROR ANDS AND EORS EOR ORRS ORR BICS BIC MULS Rd MUL

12 数据处理指令 ARM指令与Thumb指令高寄存器比较: ARM指令 Thumb指令 ADD Rd, Rm Rm (1/2 Hi regs)
CMP Rn, PC, #<#imm8> SP, #<#imm7> SUB

13 4.2.2Thumb转移指令 ARM指令有一个大的(24位)偏移域(offset field),这不可能在16位Thumb指令格式中表示。为此Thumb指令集有多种方法实现其子功能。本部分从以下几个方面介绍: 转移指令的二进制编码 转移指令的汇编格式 转移指令的分类

14 转移指令 转移指令的二进制编码如下:

15 转移指令 转移指令的汇编格式如下: 转移链接产生两条格式3指令。格式3指令必须成对出现而不能单独使用。同样BLX产生一条格式3指令和一条格式3a指令。汇编器根据当前指令地址、目标指令标识符的地址以及对流水线行为的微调计算出应插入指令中相应的偏移量。若转移目标不在寻址范围内则给出错误信息。 B <cond> <label> ;格式1 目标为Thumb代码 B <label> ;格式2 目标为Thumb代码 BL <label> ;格式3 目标为Thumb代码 BLX <label> ;格式3a 目标为ARM代码 B{L}X Rm ;格式4 目标为ARM或Thumb代码

16 转移指令 转移指令分类如下: B-分支指令,Thumb指令集惟一可条件执行的指令。 BL-带链接的长分支。
BX-分支指令,并可选择地切换指令集。 BLX-带链接分支,并可选地交换指令集。

17 4.2.3数据存取指令 Thumb的数据存取指令又可以分为: 单寄存器数据存取指令(LDR和STR)
多寄存器数据存取指令 (LDM和STM)

18 单寄存器数据存取指令(LDR和STR) 二进制编码如下:

19 单寄存器数据存取指令(LDR和STR) 汇编格式如下:
<op> Rd,[Rn,#<#off5>] ;<op> = LDR|LDRB|STR|STRB <op> Rd,[Rn,#<#off5>] ;<op> = LDRH| STRH <op> Rd,[Rn,Rm] ;<op> =LDR|LDRH|LDRSH|LDRB|LDRSB|STR|STRH|STRB <op> Rd,[PC,#<#off8>] <op> Rd,[SP,#<#off8>] ;<op> = LDR| STR//该两条指令偏移量为8位

20 多寄存器数据存取指令 二进制编码如下:

21 多寄存器数据存取指令 汇编格式如下: LDMIA Rn!,{<reg list>} STMIA Rn!,{<reg list>} POP {<reg list>{,pc}} PUSH {<reg list>{,lr}}

22

23

24

25 4.2.4异常中断指令 Thumb软件中断指令 Thumb软件中断指令的二进制编码如下: Thumb软件中断指令的汇编格式如下:
SWI <8位立即数>;<8位立即数>为数字表达式,其取值为0~255范围内的整数。

26 异常中断指令 Thumb断点指令 Thumb断点指令的二进制编码如下: Thumb断点指令的汇编格式如下: BKPT immed_8


Download ppt "第四章 Thumb 指令集 4.1 Thumb 指令集概述 4.2 Thumb 指令详细介绍."

Similar presentations


Ads by Google