关于 THumb指令

来源:互联网 发布:锁芯什么牌子好 知乎 编辑:程序博客网 时间:2024/05/21 20:26

Thumb指令集

 

       Thumb指令可以看做是ARM指令压缩形式的子集,是针对代码密度1的问题而提出的,它具有16为的代码密度。Thumb不是一个完整的体系结构,不能指望处理程序只执行Thumb指令而不支持ARM指令集。因此,Thumb指令只需要支持通用功能,必要时,可借助完善的ARM指令集,例如:所有异常自动进入ARM状态。

       在编写Thumb指令时,先要使用伪指令CODE16声明,而且在ARM指令中要使用BX指令跳转到Thumb指令,以切换处理器状态。编写ARM指令时,可使用伪指令CODE32声明。

 

1.代码密度:单位存储空间中包含的指令的个数。例如

              ARM指令是32位的,而Thumb指令时16位的,如果在1K的存储空间中,可以放32ARM指令,就可以放64Thumb指令,因此在存放Thunb指令时,代码密度高。

 

 

为兼容数据总线宽度为 16 位的应用系统, ARM 体系结构除了支持执行效率很高的 32 位 ARM指令集以外,同时支持 16 位的Thumb 指令集。

   Thumb 指令集是 ARM 指令集的一个子集,允许指令编码为 16 位的长度。与等价的 32 位代码相比较,Thumb 指令集在保留 32 代码优势的同时,大大的节省了系统的存储空间。

    所有的 Thumb 指令都有对应的 ARM 指令,而且 Thumb 的编程模型也对应于 ARM 的编程模型,在应用程序的编写过程中,只要遵循一定调用的规则, Thumb 子程序和 ARM 子程序就可以互相调用。

    当处理器在执行 ARM程序段时,称 ARM 处理器处于 ARM 工作状态,当处理器在执行 Thumb程序段时,称 ARM 处理器处于 Thumb 工作状态。

    与 ARM 指令集相比较, Thumb 指令集中的数据处理指令的操作数仍然是 32 位,指令地址也为32 位,但 Thumb指令集为实现 16 位的指令长度,舍弃了 ARM 指令集的一些特性,如大多数的 Thumb指令是无条件执行的,而几乎所有的 ARM指令都是有条件执行的;大多数的 Thumb 数据处理指令的目的寄存器与其中一个源寄存器相同。

    由于 Thumb 指令的长度为 16 位,即只用 ARM 指令一半的位数来实现同样的功能,所以,要实现特定的程序功能,所需的 Thumb指令的条数较 ARM 指令多。在一般的情况下, Thumb 指令与ARM 指令的时间效率和空间效率关系为:

Thumb 代码所需的存储空间约为ARM 代码的60%~70%

Thumb 代码使用的指令数比ARM 代码多约30%~40%

若使用32 位的存储器,ARM 代码比Thumb 代码快约40%

若使用16 位的存储器,Thumb 代码比ARM 代码快约40%~50%

与ARM 代码相比较,使用Thumb 代码,存储器的功耗会降低约30%  

    显然, ARM 指令集和 Thumb 指令集各有其优点,若对系统的性能有较高要求,应使用 32 位的存储系统和 ARM指令集,若对系统的成本及功耗有较高要求,则应使用 16 位的存储系统和Thumb指令集。当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。

原创粉丝点击