ARM、THUMB指令集

为兼容数据总线宽度为 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指令集。当然,若两者结合使用,充分发挥其各自的优点,会取得更好的效果。

你可能感兴趣的:(ARM,体系构架)