第5章 Thumb指令.pptVIP

  • 21
  • 0
  • 约8.2千字
  • 约 70页
  • 2017-11-26 发布于湖北
  • 举报
第5章 Thumb指令

第5章 Thumb指令 ARM指令集与Thumb指令集的关系 一、Thumb指令集 (一)Thumb指令集特点 Thumb指令集是针对代码密度的问题而提出的。可以看作是ARM指令集的子集。 所有Thumb指令均有对应的ARM指令,而Thumb编程模型也对应于Thumb模型。 Thumb是一个不完整的体系结构,不能指望处理器只执行Thumb代码而不支持ARM指令集。一般Thumb代码只需支持通用功能,必要时可以借助ARM指令集(例:所有异常自动进入ARM模式)。只有在命名中有字母T的才支持,例如ARM7TDMI。 Thumb指令集特点 采用16位二进制编码,代码密度大。同时,由于16位的限制,移位操作变成单独指令。 执行Thumb指令时,先动态解压缩,然后作为标准的ARM指令执行。 Thumb指令集没有协处理器指令、单寄存器交换指令、乘加指令、64位乘法指令以及程序状态寄存器处理指令,而且指令的第2操作数受到限制。 Thumb指令集特点 除了分支指令B有条件执行功能外,其他指令均为无条件执行。 应用程序可以灵活的将ARM指令和Thumb程序混合,以便提高性能和代码密度。同时达到降低功耗、节约成本和提高性能的目的。 如何区分指令流取决于CPSR的第5位(位T)。若T置位,则认为指令流为16位的Thumb指令;否则为标准的ARM指令。 二、Thumb指令与ARM指令性能比较 — Thumb代码所需的存储空间约为ARM代码的60%~70% — Thumb代码使用的指令数比ARM代码多约30%~40% — 若使用32位的存储器,ARM代码比Thumb代码快约40% — 若使用16位的存储器,Thumb代码比ARM代码快约40%~50% — 与ARM代码相比较,使用Thumb代码,存储器的功耗会降低约30% 1、ARM状态进入Thumb状态的方法 执行带状态切换的转移指令BX。若BX指令指定的寄存器的最低位为1,则将T置位,并将程序计数器切换为寄存器其他位给出的地址。 BX R0 ;若R0最低位为1,则转入Thumb状态 异常返回也可以将微处理器从ARM状态转换为Thumb状态。通常这种指令用于返回到进入异常前所执行的指令流,而不是特地用于转换到Thumb模式。 MOV PC,LR ;当返回地址保存在LR时 STMFD SP!,{registers,LR} ;当返回地址保存在堆栈时, …… ;进入异常后将R14入栈, …… ;假设异常前执行的是Thumb指令,PC保存于LR中 LDMFD SP!,{registers,PC} ;返回指令 2、 Thumb状态进入ARM状态的方法 执行Thumb指令中的切换转移BX指令可以显式地返回到ARM指令流。 利用异常进入ARM指令流。 Thumb-ARM相似处: Load/Store结构。 支持8位字节、16位半字和32位字数据类型,半字以两字节边界对准,字以4字节边界对准。 Thumb-ARM差异处: 大多数Thumb指令是无条件执行的,所有ARM指令都是条件执行的。 许多Thumb数据处理指令采用2地址格式(目的寄存器与一个源寄存器相同),ARM数据处理指令大多采用3地址格式。 ADD R0,R1 由于采用高密度编码,Thumb指令格式没有ARM指令格式规则。 内容提要 5.1 Thumb数据处理指令 5.2 Thumb存储器操作指令 5.3 Thumb分支指令 5.4 Thumb软中断指令 5.5 Thumb指令功能码段分析 5.1 Thumb数据处理指令 Thumb数据处理指令可以分为5类:数据传送指令、算术运算指令、逻辑运算指令、移位操作指令和比较指令。 5.1.1 寄存器移位指令 opcode Rd, Rs, #shift_immed_5 Rd 目标寄存器; Rs 源操作数寄存器; shift_immed_5 寄存器移位的数值,取值范围为0~31; Thumb寄存器移位指令操作码编码 5.1.2 低位寄存器算术运算指令 1.加法与减法运算指令(对R0~R7操作) 这类指令的汇编语法格式为 opcode Rd, Rs, Rm opcode Rd, Rs, #immed_3 Rd 目标寄存器; Rs 源操作数寄存器; Rm 第二操作数寄存器; immed_3 第二操作数为立即数; I 决定第二操作数是寄存器还是立即数; opcode 指令操作码 2.MOV、CMP、ADD与SUB指令

文档评论(0)

1亿VIP精品文档

相关文档