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. 数据链路层协议(Ethernet、IEEE802.3、PPP、HDLC)

    目录 数据链路层协议 Ethernet以太网协议 以太网数据帧的封装 IEEE802.3协议 PPP协议 HDLC协议 数据链路层协议 首先Ethernet.IEEE802.3.PPP和HDLC都是数 ...

  2. 关于 C/C++ 函数调用约定

    关于 C/C++ 函数调用约定,大多数时候并不会影响程序逻辑,但遇到跨语言编程时,了解一下还是有好处的. VC 中默认调用是 __cdecl 方式,Windows API 使用 __stdcall 调 ...

  3. svchost服务(DLL服务)

    相比于exe服务,DLL服务只需要一个dll,而且运行是通过svchost.exe来运行的,同时安装和卸载的时候需要自己手动修改相关注册表.原理及其细节就不多说了,直接上代码吧(我写的这个是创建新组然 ...

  4. android The content of the adapter has changed but ListView did not receive a notification 错误的解决方案

    使用了AsyncTask在后台刷新适配器,并且通知ui线程更新ListView,运行时发现时不时的出现 如题 的错误, 导致程序崩溃,解决方法如下: 1.建立一个缓冲数据集,这个数据集就是填充适配器的 ...

  5. XCTF-fakebook

    fakebook stm的fakebook,乍一看还以为是facebook,果然fake 看题 有登录和注册两个功能点 看了下robots.txt,发现有备份文件 果断下载,内容如下 这里的blog在 ...

  6. 【hugo】- hugo 博客 添加鼠标单击特效

    hugo 博客 监听鼠标点击事件,添加动画效果 js下载 链接:https://pan.baidu.com/s/1SZu76WdEXRxLCfqJ2lbbtQ 密码:r056 移入hugo博客中 打开 ...

  7. LeetCode---42. 接雨水 (hard)

    题目:42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 示例: 输入:height = [0,1,0,2,1,0,1,3,2,1,2, ...

  8. transformer模型转torchscript格式

    from transformers import BertModel, BertTokenizer, BertConfig import torch enc = BertTokenizer.from_ ...

  9. Spring的安装

    Spring的安装 Spring框架包 spring-framework-4.3.6RELEASE-dist.zip http://repo.spring.io/simple/libs-release ...

  10. Rabbit MQ一些参数解释

    //ConnectionFactory(连接工厂): 生产Connection的的工厂 //Connection(连接):是RabbitMQ的socket的长链接,它封装了socket协议相关部分逻辑 ...