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代码指令。
Thumb扩展的更多相关文章
- WPF控件经验小结:(1) ToolBar去掉右边箭头(扩展图标)
今天开发时,同事问我一个问题.怎么去除ToolBar右边扩展图标.我想了一下,说改Style.同事说太麻烦了.可不可以快速修正.我说应该动态去读取Template模板中的Style,然后隐藏.怎么实现 ...
- ThinkCMF-smeta扩展字段
ThinkCMF - 添加文章功能 没有上传文件功能,为了扩展这一功能,在页面加入如下代码: <tr> <td> <div style="text-align: ...
- YII 1.0 扩展第三方类
扩展缩略图类在blog\protected\extensions 中建立 Image/CThumb.php 1. 自己瞎弄的,一点都不优雅 include_once Yii::app()->Ba ...
- ARM处理器架构的Thumb指令集中关于IT指令的使用
在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性. Thumb中有一个比较有意思的指令--IT,这条指令用于根据指定的条件来执行后面相继的四条指令 ...
- atitit.thumb生成高质量缩略图 php .net c++ java
atitit.java thumb生成高质量缩略图 php .net c++ 1. 图像缩放(image scaling)---平滑度(smoothness)和清晰度(sharpness) 1 2. ...
- Yii 1.1.17 四、属性标签、AR类增删改查、使用上传类与扩展第三方类库
一.属性标签与规则设置 当进入网站页面,将会读数据库返回信息到视图上.那么,现在定义模型中的属性在视图标签上的显示, 也就是模型属性到前台标签的映射 // 定义模型属性到前台标签的映射 public ...
- 【基于Android的ARM汇编语言系列】之五:ARM指令集与Thumb指令集
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- 13 ARM指令集与Thumb指令集
指令格式 ARM基本格式 <opcode>{<cond>}{S}{.W|.N}<Rd>,<Rn>{,<operand2>} opecode: ...
- Asp.net Boilerplate之AbpSession扩展
当前Abp版本1.2,项目类型为MVC5. 以属性的形式扩展AbpSession,并在"记住我"后,下次自动登录也能获取到扩展属性的值,版权归"角落的白板报"所 ...
随机推荐
- 从苏宁电器到卡巴斯基第25篇:难忘的三年硕士时光 III
阴差阳错,走上了讲师的道路 时间已经来到了2015年的1月,我的找工作之路也是屡败屡战,屡战屡败.金山.百度以及腾讯不约而同地不要我,使得我对于自己的未来充满了迷茫.尽管才研二而已,可是对于我这种没有 ...
- hdu5012 水搜索
题意: 给你一个正方体的初始状态和末状态,问你是否可以再6步之内转到这个状态,有四种转的方式,如果你面对的是正方向的正前方,那么转的方式就是 顺时针,逆时针,上,下. 思路: ...
- Win64 驱动内核编程-2.基本框架(安装.通讯.HelloWorld)
驱动安装,通讯,Hello World 开发驱动的简单流程是这样,开发驱动安装程序,开发驱动程序,然后安装程序(或者其他程序)通过通讯给驱动传命令,驱动接到之后进行解析并且执行,然后把执行结果返回. ...
- C#-宽带连接
public static string Connect(string UserS,string PwdS) { string arg = @"rasdial.exe 宽带连接" ...
- Windows核心编程 第九章 线程与内核对象的同步(下)
9.4 等待定时器内核对象 等待定时器是在某个时间或按规定的间隔时间发出自己的信号通知的内核对象.它们通常用来在某个时间执行某个操作. 若要创建等待定时器,只需要调用C r e a t e Wa i ...
- java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
问题描述 Tomcat启动报错 java.lang.ClassNotFoundException: org.apache.jsp.index_jsp 问题原因 因为tomcat在启动过程中jsp和se ...
- python-内置函数-callable,chr,ord,bytes,随机验证码生成
s="老男人" bytes(s,encoding="utf-8") 随机验证码的实现方法: 大写字母: li = [] for i in range(6): t ...
- c#操作可道云api帮助类
代码: public class KodCloudHelper { static readonly string kodCloudUrl = Configs.GetString("KodCl ...
- 如何通过在线CRM提升企业竞争力?
随着信息技术的快速发展,在线CRM系统也得到了更加广泛的应用,已经在企业中逐渐开始普及.CRM系统对于优化企业流程有着十分重要的意义,它能够让企业的经营管理更加敏捷,并且可以快速地响应企业的业务流程. ...
- linux下dmidecode命令获取硬件信息
linux下dmidecode命令获取硬件信息 2 A+ 所属分类:Linux 运维工具 dmidecode在 Linux 系统下获取有关硬件方面的信息.dmidecode 遵循 SMBIOS/DMI ...