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

Thumb扩展的更多相关文章

  1. WPF控件经验小结:(1) ToolBar去掉右边箭头(扩展图标)

    今天开发时,同事问我一个问题.怎么去除ToolBar右边扩展图标.我想了一下,说改Style.同事说太麻烦了.可不可以快速修正.我说应该动态去读取Template模板中的Style,然后隐藏.怎么实现 ...

  2. ThinkCMF-smeta扩展字段

    ThinkCMF - 添加文章功能 没有上传文件功能,为了扩展这一功能,在页面加入如下代码: <tr> <td> <div style="text-align: ...

  3. YII 1.0 扩展第三方类

    扩展缩略图类在blog\protected\extensions 中建立 Image/CThumb.php 1. 自己瞎弄的,一点都不优雅 include_once Yii::app()->Ba ...

  4. ARM处理器架构的Thumb指令集中关于IT指令的使用

    在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性. Thumb中有一个比较有意思的指令--IT,这条指令用于根据指定的条件来执行后面相继的四条指令 ...

  5. atitit.thumb生成高质量缩略图 php .net c++ java

    atitit.java thumb生成高质量缩略图 php .net c++ 1. 图像缩放(image scaling)---平滑度(smoothness)和清晰度(sharpness) 1 2.  ...

  6. Yii 1.1.17 四、属性标签、AR类增删改查、使用上传类与扩展第三方类库

    一.属性标签与规则设置 当进入网站页面,将会读数据库返回信息到视图上.那么,现在定义模型中的属性在视图标签上的显示, 也就是模型属性到前台标签的映射 // 定义模型属性到前台标签的映射 public ...

  7. 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  8. 13 ARM指令集与Thumb指令集

    指令格式 ARM基本格式 <opcode>{<cond>}{S}{.W|.N}<Rd>,<Rn>{,<operand2>} opecode: ...

  9. Asp.net Boilerplate之AbpSession扩展

    当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...

随机推荐

  1. hdu4278 小想法

    题意:       有几个计数器,从1开始计数,计数器有问题,没有3,8这两个数字,只要出现3或者8,那么直接跳过,如 12579 下一个数字就是 12590 ,给你一个数字,问他实际计数了多少. 思 ...

  2. 开启Android Apk调试与备份选项的Xposed模块的编写

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80963610 在进行Android应用程序逆向分析的时候,经常需要进行Andro ...

  3. C#-CMD

    private static string InvokeCmd(string cmdArgs) { string Tstr = ""; Process p = new Proces ...

  4. android Javah生成JNI头文件

    项目要用到c语言库,因此来学习下jni 首先是在cmd中使用javah,出现了javah不是内部或外部命令的错误提示,javah是jdk自带的工具,提示说明在系统环境变量中没有jdk的路径,或者配置错 ...

  5. 【vue】报错This dependency was not found

    报错 ERROR Failed to compile with 1 errors 10:33:34 ├F10: PM┤ This dependency was not found: * @/views ...

  6. Jmeter软件安装之Mac

    Jmeter软件安装之Mac 一.环境准备 安装JDK 下载Jmeter 二.下载Jmeter 下载地址: http://jmeter.apache.org/download_jmeter.cgi,下 ...

  7. VS中光标变成方块状,输入时会把光标覆盖的部分替换掉的解决方法

    按下键盘上的Insert键,切换为插入模式.

  8. QFNU-ACM 2020.04.05个人赛补题

    A.CodeForces-124A (简单数学题) #include<cstdio> #include<algorithm> #include<iostream> ...

  9. OO_Unit2_多线程电梯

    CSDN博客链接 一.第一次作业 1.需求分析 单部多线程傻瓜调度(FAFS)电梯 2.实现方案 输入接口解析 类似于Scanner,我们使用ElevatorInput进行阻塞式读取(第一次作业较简单 ...

  10. 向Vertex Shader传递vertex attribute

    在VBO.VAO和EBO那一节,介绍了如何向Vertex Shader传递vertex attribute的基本方法.现在我准备把这个话题再次扩展开. 传递整型数据 之前我们的顶点属性数据都是floa ...