为了兼容数据总线宽度为16位的应用系统,ARM体系结构除了支持执行效率很高的32位ARM指令集以外,同时支持16位的Thumb指令集。Thumb指令集是ARM指令集的一个子集,允许指令编码为16位的长度。与等价的32位代码相比较,Thumb指令集在保留32代码优势的同时,大大节省了系统的存储空间。
Thumb指令都有对应的ARM指令,而且Thumb的编程模型也对应于ARM的编程模型,在编写应用程序时,只要遵循一定的调用规则,Thumb子程序和ARM子程序就可以互相调用。
当处理器在执行ARM程序段时,处理器处于ARM工作状态,当处理器在执行Thumb程序段时,处理器处于Thumb工作状态。
与ARM指令集相比较,Thumb指令集中数据处理指令的操作数仍然是32位,指令地址也为32位,但是,Thumb指令集为实现16位的指令长度,舍弃了ARM指令集的一些特性,如大多数的Thumb指令是无条件执行的,而几乎所有的ARM指令都是有条件执行的。大多数的Thumb数据处理指令的目的寄存器与其中一个源寄存器相同。
由于Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能,所以,要实现特定的程序功能,所需Thumb指令的条数较ARM指令多。
一般情况下,指令与ARM指令的时间效率和空间效率的关系为:
●Thumb代码所需的存储器空间为ARM代码的60%~70%。(www.daowen.com)
●Thumb代码使用的指令条数比ARM代码多30%~40%。
●若采用32位的存储器,ARM代码比Thumb代码快40%。
●若采用16位的存储器,Thumb代码比ARM代码快40%~50%。
●与ARM代码相比,使用Thumb代码将使存储器的功耗降低30%。
虽然Thumb指令集与ARM指令集各有优点,若对系统的性能有较高要求,则应采用32位的存储器系统和ARM指令集;若对系统的成本和功耗有较高要求,则应采用16位的存储器系统和Thumb指令集。当然最好是两者结合使用,充分发挥其各自优点,以便取得最好效果。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。