ARM指令集与Thumb指令集
1、Thumb指令集来源
ARM的RISC体系结构的发展中已经提供了低功耗、⼩体积、⾼性能的⽅案。⽽为了解决代码长度的问题,ARM体系结构⼜开发了⼀种新
的指令体系,就是Thumb指令集,称之为T变种。
Thumb是ARM体系结构的扩展(thumb不是⼀个完整的体系结构,不能指望处理器只执⾏thumb指令集⽽不⽀持arm指令集)。它从标准
32位ARM指令集抽出来的36条指令格式,重新编成16位的操作码。这能带来很⾼的代码密度,例如:在1K的存储空间中,可以放32条
ARM指令,就可以放64条Thumb指令,因此Thunb指令代码密度⾼。
2、Thumb指令集和ARM指令的时间复杂度和空间复杂度对⽐
在ARM处理器中,内核同时⽀持32位的ARM指令和16位的Thumb令。
当⽤户使⽤C程序来处理应⽤时,如果编译为Thumb指令,Thumb代码使⽤的指令数要⽐ARM代码多约30%~40%,但最终⽣成的⽬
标代码所需的存储空间约为ARM代码的60%~70%(因为每条指令所占空间是arm指令的⼀半)。
使⽤32位存储器,ARM代码⽐Thumb代码快约40%;使⽤16位存储器,Thumb代码⽐ARM指令快约40%~50%。具体解释如下:
在存储器是32位的情况下,ARM性能较好,这时因为同样的代码编译的结果Thumb指令将会⽐ARM多,Thumb指令仍旧花费指令
周期来从32-bit块内存预取。在16-bit内存上,即使有⽐ARM多的代码,这时Thumb性能也较好,因为Thumb每⼀条指令预取需要
⼀个周期⽽每条ARM指令需要两个周期。
另外在16-bit内存上,Thumb的性能降低了;这是因为数据去操作和特殊的堆栈操作,即使在Thumb下,堆栈操作仍是32-bit操
作,导致低的性能在16-bit内存架构上。⼀个改进的⽅法是提供32-bit的内存来放置堆栈。在这种情况下的性能提⾼到了32-bit内存
架构的⽔平。主要的差别是因为使⽤的整型的(32-bit)全局数据将仍被存储在16-bit内存上。
与ARM代码相⽐较,使⽤Thumb代码,存储器的功耗会降低约30%。
3、Thumb指令集和ARM指令的混合编程
若两者结合使⽤,充分发挥其各⾃的优点,会取得更好的效果。Thumb以其较⾼的代码密度和在窄存储器上的性能,使得它在很多系统中
得到⼴泛应⽤。但在很多情况下,还是不得不使⽤ARM指令,这是因为:
①ARM处理器的⼀些特定功能必须由ARM指令实现,其中包括PSR指令(不能直接访问CPSR和SPSR,必须先切换到ARM状态下,再
使⽤MSR和MRS来实现)、协处理器指令;
②异常发⽣时,处理器⾃动进⼊ARM状态,即在异常中断处理程序⼊⼝的⼀些指令是ARM指令(ARM程序头ARMasmblerheader),
然后根据需要程序可以切换到Thumb状态,在异常中断处理程序返回前,程序再切换到ARM状态。如果异常处理程序需要使⽤Thumb指
令也必须通⽤⼀个。
③ARM处理器总是从ARM状态开始执⾏,如果要在调试器中运⾏Thumb程序,必须为该Thumb程序添加⼀个ARM程序头,然后再切换到
Thumb状态,调⽤该Thumb程序。
基于以上原因,即使程序需要由Thumb代码实现,也必须通过ARM-Thumb互交(ARM-Thumbinterworking)进⼊Thumb状态。
ARM-Thumb互交是指对汇编语⾔和C/C++语⾔的ARM和Thumb代码进⾏连接的⽅法,它进⾏两种状态(ARM和Thumb状态)间的切
换。在进⾏这种切换时,有时需使⽤额外的代码,这些代码被称为Veneer。AAPCS定义了ARM和Thumb过程调⽤的标准。
ref:
本文发布于:2022-12-30 08:48:31,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/58661.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |