当前位置:龙人芯片解密公司 >> 解密技术 >> ARM开发的指令特点分析

ARM开发的指令特点分析

  深圳龙人科技有限公司具备了各种芯片解密、IC解密、单片机破解等解密技术,高效的技术服务团队能够快速地向客户提供最科学、最合理的解密方案。下面给大家分析ARM开发的指令特点,仅供参考。
  
  指令是汇编语言程序设计的基础,在基于ARM的嵌入式软件开发中,即便大部分程序用高级语言完成,但系统的引导、启动代码仍必须用汇编语言来编写。ARM处理器支持ARM指令集、Thumb指令集和Thumb-2指令集。
  
  1 ARM指令集
  ARM指令集是32位的,程序的启动都是从ARM指令集开始。所有的ARM指令集都可以是有条件执行的。ARM指令集是以32位二进制编码的方式给出的,大部分的指令编码中定义了第一操作数、第二操作数、目的操作数、条件标志影响位以及每条指令所对应的不同功能实现的二进制位。每条32位ARM指令都具有不同的二进制编码方式,和不同的指令功能相对应 。
  ARM指令集可以分为六大类,分别为数据处理指令、Load/Store指令、跳转指令、程序状态寄存器处理指令、协处理器指令和异常产生指令。具体的指令及功能如表3.2所示(表中指令为基本ARM指令,不包括派生的ARM指令)。
  ARM指令及功能描述:


  
  2 Thumb指令集
  Thumb指令集可看作是ARM指令集压缩形式的子集,是针对代码密度的问题而提出的,它具有16位的代码密度。虽然所有Thumb指令都有相对应的ARM指令,但Thumb不是一个完整的体系结构,处理器不可能只执行Thumb指令而不支持ARM或Thumb-2指令集。
  Thumb指令集特点如下:
  · Thumb指令继承了ARM指令集的许多特点;
  · Thumb指令也是采用Load/Store结构,有数据处理、数据传送及流控制指令等;
  · Thumb指令集丢弃了ARM指令集一些特性。
  大多数Thumb指令是无条件执行的(除了转移指令B),而所有ARM指令都是条件执行的。许多Thumb数据处理指令采用2地址格式,即目的寄存器与一个源寄存器相同,而大多数ARM数据处理指令采用的是3地址格式(除了64位乘法指令外)。
  16位Thumb指令集是从32位ARM指令集提取指令格式的,每条Thumb指令有相同处理器模型所对应的32位ARM指令。
  ARM开发工具完全支持Thumb指令,应用程序可以灵活的将ARM和Thumb子程序混合编程以便在例程的基础上提高性能或代码密度。在编写Thumb指令时,先要用伪指令CODE16声明(ADS的编译环境下),而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。
  
  3 Thumb-2指令集
  Thumb-2技术是16位和32位指令的结合,实现了32位ARM指令性能,匹配原始的16位Thumb指令集并与之后向兼容。下图显示了预测的ARM、Thumb和Thumb2指令之间性能和代码量的比较结果,由结果可见,Thumb-2技术确实达到了预期的目标。


  ARM7TDMI内核就支持ARM和Thumb两种指令集,而Cortex-M3内核支持Thumb和Thumb-2两种指令集。在基于ARM7处理器的系统中,处理器内核会根据特定的应用切换到Thumb状态(以获取高代码密度)或ARM状态(以获取出色的性能)。然而,在Cortex-M3处理器中无需交互使用指令,16位指令和32位指令共存于同一模式,复杂性大幅下降,代码密度和性能 均得到提高。由于Thumb-2指令是16位Thumb指令的扩展集,所以Cortex-M3处理器可以执行之前所写的任何Thumb代码。得益于Thumb-2指令,Cortex-M3处理器同时兼容于其他ARM Cortex处理器的家族成员。
  Thumb-2指令集用于多种不同应用,使紧凑代码的编写更加简单快捷。BFI和BFC指令为位字段指令,在网络信息包处理等应用中可大派用场。SBFX和UBFX指令改进了从寄存器插入或提取多个位的能力,这一能力在汽车应用中的表现相当出色。RBIT指令的作用是将一个字中的位反转,在DFT等DSP运算法则的应用中非常有用。表分支指令TBB和TBH用于平衡高性能和代码的紧凑性。Thumb-2指令集还引入了一个新的If-Then结构,意味着可以有多达4个后续指令进行条件执行。