Thumb扩展
Thumb扩展
ARM处理器已在嵌入式系统,手持计算机和其系统中得到了最大的应用,在这些系统中,系统对使用有限资源进行大量工作的要求很高。Thumb扩展是为解决资源消耗中的某些方面而创建的,已成为当今几乎所有ARM芯片上的标准扩展。
小型系统上受限的资源之一是指令存储器。有限的指令存储器限制了可以在处理器上运行的程序的大小,因此想寻找减小代码大小的方法。当可以找到编译优化时,编译时优化是实现此目标的一种显而易见的方法。增大指令集的大小是另一种方法,但这通常会导致整个板上各个指令的大小增加,这将导致存储指令所需的存储量相应增加。可能无法通过减少编写程序所需的指令数量来抵消。
正在寻找的质量称为代码密度。希望以某种方式完成同样数量的工作,但使程序占用更少的空间。这是Thumb扩展的用处。Thumb尝试通过允许使用大(32位)指令集,同时提供可以完成大部分工作的备用小(16位)指令集来获得两全其美的效果。而仅占用一半的空间。称此概念为“代码压缩”,其思想是在运行之前将小型Thumb指令“解压缩”为等效的全尺寸32位ARM指令。
Thumb指令的外观如何,与32位指令相比如何?
下图显示了如何将ADD指令从Thumb转换为ARM的示例。注意,立即操作数(Thumb中的8位)是如何用等于ARM的零填充的。还要注意,add指令在解压缩时会采用一个附加的操作数。
较小的指令意味着必须具有较小的操作码,并且必须具有更少或更少(或两者都有)的操作数。Thumb通过将其大部分指令限制为使用8个通用寄存器来代替通常的15个寄存器,从而部分确保了较小的操作数。一些指令可以访问完整的寄存器集(例如MOV),以解决较小的一些限制。寄存器组。
ARM如何知道正在运行的指令是Thumb指令还是常规ARM指令?
ARM芯片包含一个特殊的状态位,该位告诉CPU是期望压缩的Thumb指令还是标准的ARM指令。该位由其自己的指令BX切换,每次程序员或编译器希望在Thumb模式和标准ARM模式之间切换时,都必须将其插入代码中。显而易见的结果是,在模式之间进行切换会产生一些开销,因此切换到Thumb可能不是一个好主意,除非可以为节省两条以上的等效ARM代码指令。
最新文章
- 无光驱在32位windows系统下安装64位windows系统
- haploview出现“more than two alleles”的解决方法
- XPath 详解,总结
- Bash中的shopt选项
- hdu 4424 并查集
- 前端响应式设计中@media等的相关运用
- 音频播放(iOS开发)
- 如何在eclips下将一段代码抽取为方法Extract Method
- (转载)php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗?
- FilenameUtils工具类
- JS中!=、==、!==、===的用法和区别
- 七牛php-sdk使用-多媒体处理
- WinForm中,设置不显示窗口的标题栏
- CodeFirst+MySQL+.Net Core配置详情
- Python内置函数(42)——hash
- java JDK配置环境变量
- Java遍历List5种方法的效率对比
- Oracle条件判断if...elsif
- 【洛谷】【单调栈】P1901 发射站
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) C. Table Tennis Game 2 水题