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代码指令。

最新文章

  1. 无光驱在32位windows系统下安装64位windows系统
  2. haploview出现“more than two alleles”的解决方法
  3. XPath 详解,总结
  4. Bash中的shopt选项
  5. hdu 4424 并查集
  6. 前端响应式设计中@media等的相关运用
  7. 音频播放(iOS开发)
  8. 如何在eclips下将一段代码抽取为方法Extract Method
  9. (转载)php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗?
  10. FilenameUtils工具类
  11. JS中!=、==、!==、===的用法和区别
  12. 七牛php-sdk使用-多媒体处理
  13. WinForm中,设置不显示窗口的标题栏
  14. CodeFirst+MySQL+.Net Core配置详情
  15. Python内置函数(42)——hash
  16. java  JDK配置环境变量
  17. Java遍历List5种方法的效率对比
  18. Oracle条件判断if...elsif
  19. 【洛谷】【单调栈】P1901 发射站
  20. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) C. Table Tennis Game 2 水题

热门文章

  1. hdu4496并查集的删边操作
  2. DVWA之Brute Force(暴力破解)
  3. Intel汇编语言程序设计学习-第六章 条件处理-上
  4. Andrew Ng机器学习算法入门((五):矩阵和向量
  5. 前端小白的学习之路html与css的较量【二】
  6. 那些好用的 VS Code 插件,究竟是如何提高编码效率的?
  7. 敏杰开题——软工团队项目选择与NABCD分析
  8. 关于ajax的数据传输类型,字符串传输
  9. webpack解析(1)
  10. 下载最新版本Fiddler