ARM的体系结构与编程系列博客——ARM体系变种
ARM体系变种的简介
有人会很奇怪一件事情,ARM居然会变种,不会是基因突变了吧,呵呵,其实ARM变种通俗一点来讲呢,就是ARM突然具备了一种特定的功能!并非是基因突变哦!ARM是reboot好不好?
ARM体系变种
首先让我们通过一个表格来看看ARM变种。了解ARM变种涉及到了什么!
现在让我来为大家解释一下这张图:
- ARMv你就不用去管它了
- v后面对应的是ARM指令集的版本号
- 有x呢,表示排除某项功能
要说的是自版本4之后M变种就为标准功能了,不再列出了!
那么这个就是ARM/Thumb的命名格式啦!不要着急还不了解什么ARM体系变种,且听我细细道来!
T变种
t变种的全名——Thumb指令集,可以说T变种是ARM的效率上质一般的飞跃,thumb指令集是ARM指令集的一个子集重新编码而成的。它使ARM更加高效地进行运作。
ARM的指令长度为32位,而Thumb指令长度只有16位,对于一些冗余空余位的操作来讲的话,在使用16位的基础上,明显比使用32位更加高效!
但是thumb自身也有一定的局限性:
- 完成相同的操作时,Thumb指令通常情况下需要比ARM更多的指令。
- Thumb指令集是不包含异常处理时的一些指令的
因此ARM是不能舍弃ARM的32位指令的!它与16位的Thumb指令配合才能更加有效率地执行
那么发展至今,Thumb有哪些版本呢?
- Thumb指令集版本1,这个适用在ARM体系版本4中
- Thumb指令集版本2,这个适用在ARM体系版本5中
M变种
我们通常称之为长乘法指令,那么注意了:
上篇我们说到了长乘法操作与长乘加操作(乘法指令和乘加法指令的操作),现在就为大家解释一下这两个操作。
- 长乘法操作:32位整数乘以32位整数,生成64位整数
- 长乘加操作:32位整数乘以32位整数,加上32位整数,生成64位整数
它其实做版本3中正式引入,版本2的时候仅是有了这个思想的,然后在版本4以后,M变种就变成了系统中的标准部分。我们也不再说M变种了,因为我们在开发ARM过程中直接是使用相应的指令的!
E变种
我们将其定义为增强型DSP指令,针对于ARM的应用范围越来越广阔,那么为了满足DSP算法,ARM就需要增强这个算法的处理性能。
那么它到底有了哪些的增强呢?
- 增加了新的16位数据乘法与乘加操作指令
- 实现饱和的带符号数的加减法操作指令
- 进行双字数据操作的指令,包含LDRD、STDR、MCRR\MRRC
- cache预取指令PLD
E变种是在版本5T中开始使用的。值得注意的是:早期的E变种未有包含LDRD、STRD、MCRR\MRRC、PLD
J变种
ARM能跑android和java不得不归功于这个变种——java加数器jazelle
这个加数器相当了不起,与一般的java虚拟机相比,它将java代码运行速度提高了整整8倍,而功耗竟降低了80%。使得程序员们可以在这个上面做更有力的开发!
SIMD变种
随着技术进步,人们对于数字媒体流更加追捧,你能够在手机上看电影,玩游戏,大多归功于ARM技术的强劲的高性能音频\视频处理技术,这就是我们所说的ARM媒体功能扩展(SIMD变种)
它将音频\视频处理性能提高了4倍,具有这个功能的ARM芯片(泛指采用ARM技术的芯片)是目前市场上最受欢迎的芯片了!
那么,它的特点有哪些呢:
- 音频\视频处理性能提高了4倍
- 提供小数算术运算
- 可同时进行两个16位操作数或者4个8位操作数的运算
- 用户可以定义饱和运算模式
- 两套16位操作数的乘加/乘减运算
- 32位乘以32位的小数MAC
最后,求鲜花,求关注~~~
ARM的体系结构与编程系列博客——ARM体系变种的更多相关文章
- ARM的体系结构与编程系列博客——ARM处理器系列介绍
ARM处理器系列介绍 现在到了3月,过年过得过于舒服了.系列博客也停更了近半月,我果然是个慢(lan)性(gui)子,那么趁着到校的第一天晚上,就写一篇博客来继续我的系列博客了!众所周知,ARM处理器 ...
- ARM的体系结构与编程系列博客——ARM的历史与应用范围
前言 最近我感觉自己比较浮躁,重来没有好好地沉下心来做一件事情,而且针对自己在专业水平上仍然还有很多欠缺,于是我想我应该为自己做些什么来证明一下自己真的是潜心研究东西的人,于是我萌生了一个想法,真正地 ...
- ARM的体系结构与编程系列博客——ARM体系版本
ARM体系版本前言 很多人都知道,ARM有许多版本,口中最长说的就是ARM7\ARM9\ARM11,诚然,这个的确是ARM处理器的版本,但绝对不是ARM的版本,其实ARM到迄今为止经历了6代版本,随着 ...
- 窥探Swift系列博客说明及其Swift版本间更新
Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...
- Flutter 即学即用系列博客——03 在旧有项目引入 Flutter
前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ...
- Django 系列博客(四)
Django 系列博客(四) 前言 本篇博客介绍 django 如何和数据库进行交互并且通过 model 进行数据的增删查改 ORM简介 ORM全称是:Object Relational Mappin ...
- JavaScript 系列博客(一)
JavaScript 系列博客(一) 前言 本系列博客为记录学习 JavaScript 的学习笔记,会从基础开始慢慢探索 js.今天的学习笔记主要为 js 引入.定义变量以及 JavaScript 中 ...
- C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET
C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...
- Flutter 即学即用系列博客——05 StatelessWidget vs StatefulWidget
前言 上一篇我们对 Flutter UI 有了一个基本的了解. 这一篇我们通过自定义 Widget 来了解下如何写一个 Widget? 然而 Widget 有两个,StatelessWidget 和 ...
随机推荐
- LinqToHubble介绍及简单使用步骤——LinqToHubble是对HubbleDotnet的封装
或许你还你知道HubbleDotnet,下面简单对HubbleDotnet坐下介绍. HubbleDotNet是由盘古分词作者——eaglet 开发的一个基于.net framework 的开源免费的 ...
- oauth入门
oauth可以支持跨网站的数据传输.假设一个用户把照片上传到faji网站,然后想登录到beppa网站(照片打印),把faji的上照片打印出来. 她当然可以自己把照片取下来再上传上去,不过比较麻烦. 使 ...
- 唯品会osp简介(转)
转自 https://blog.csdn.net/panyongcsd/article/details/58617810 公司(VIP)从2015年开始在内部推动Venus框架的使用,这是一款基于Ap ...
- TransactionScope事务使用
using (System.Transactions.TransactionScope T_Scope = new System.Transactions.TransactionScope()) { ...
- 【加密算法】DES
一.简介 DES对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法. ...
- Monotone and Sorted Matrix Search ( Arithmetic and Algebra) CGAL 4.13 -User Manual
monotone_matrix_search() and sorted_matrix_search() are techniques that deal with the problem of eff ...
- LinkedBlockingQueue源码解析(2)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3.3.public void put(E e) throws InterruptedException 原 ...
- 【自动化专题】借助firefox插件定位web元素小技巧
浏览器:firefox 插件:firebug.firepath.firefinder 安装插件---已安装的请跳过 1.安装firefox浏览器 2.打开firefox-附加组件(找不到入口的问度娘) ...
- JVM伪共享
CPU缓存中的cache line缓存行是缓存的最小单位,同一个时刻内只允许一个cpu内核进行操作.一般,缓存行的大小为64字节,这样的大小可以存放多个java对象的对象头.因此,当两个不同的线程同时 ...
- python寻找list中最大值、最小值并返回其所在位置
c = [-10,-5,0,5,3,10,15,-20,25] print c.index(min(c)) # 返回最小值 print c.index(max(c)) # 返回最大值