X86架构与ARM架构比较(摘录自网络)
引言
CPU是怎样运作的?
CPU的运作与人脑的运作差不多。先谈一下人这个系统的工作方式。眼镜、耳朵、舌头、皮肤等等感觉器官接收到“触觉”,把信息传给大脑,大脑把信息处理后,把处理结果送给手、脚、嘴等执行器官就可以运动了。
人脑的功能就是从某个感觉器官读取信息,处理信息,然后再把结果送给执行器官。
一个完整的系统与人这个系统差不多,传感器接收数据,再把数据传给CPU(CPU按照一定的时序、协议从内存读数据),CPU读取到数据并处理,把处理结果送给执行机构就行了(实际上CPU就是按照一定时序、协议向内存单元写数据)。
CPU从内存中获取数据,处理数据,再把结果送到内存中去。
一、指令集架构比较
1、X86指令集架构(Register-Memory architecture )
CPU的运算操作数可以全部都是寄存器,也允许其中的一个操作数在memory中。所以,CPU可以通过其他指令来与memeory交互,这种架构的指令集相对复杂。举一个例子如下:
add mem,reg
2、ARM指令集架构(Load-Store architecture )
CPU只允许用load/store指令来与memory(Flash、RAM)交互,而CPU的运算全部都是在寄存器中完成。也就是说,CPU运算的操作数只能全部来自寄存器,而且结构也只能保存在寄存器中。所以,倘若要把RAM两个数据相加,结果还保存到内存中,就需要先将内存中的数据通过load指令将内存数据加载到寄存器中,计算结束后,再将保存结果寄存器的内容通过store指令存储在RAM中。举一个例子如下:
ADD R0,R1,R2
3、对比分析
两种架构的区别在于CPU在处理数据时,对内存的访问实机。
X86可以在处理数据时直接读写内存,但是ARM只能先将内存加载到寄存器才能读,也只有借助寄存器寻址将运算结果写到内存。
ARM架构这种LOAD/STORE架构要比X86的Register-Memory架构设计时容易的多,结果更简单。
二、指令集比较
说明:本文的ARM指令集只指ARM指令集,不讨论THUMB指令集
1、数据传送指令
指令类功能:负责把数据、地址或立即数传送到寄存器或存储单元中
X86数据传送指令
指令类型 指 令 说 明
通用数据传送指令 MOV(传送)、PUSH(进栈)、POP(出栈)、XCHG(交换)
累加器专用传送指令 IN(输入指令) 、OUT(输入指令)
地址传送指令 LEA(有效地址送寄存器)、LDS(指针送寄存器和DS)、LES(指针送寄存器和ES)
标志寄存器传送指令 LAHF(标志送AH)、SAHF(AH送标志寄存器)、PUSHF(标志进栈)、POPF(标志出栈)
ARM数据传送指令
指令类型 指 令 说 明
通用数据传送指令 LDM(多数据装载)、STM (多数据存储) 、LDR(单数据装载)、STR(单数据存储)、 SWP(单一数据交换)
标志寄存器传送指令 MRS(加载标志寄存器到寄存器) MSR(存储寄存器到标志寄存器)
补充说明:
<1> LDR/STR指令的地址,一定是(基址寄存器+/-偏移量)构成的
<2> 出栈入栈指令:无专用指令,用LDM、STM指令替代
2、算术指令
指令类功能: 算术运算
X86算术指令
指令类型 指 令 说 明
加法指令 ADD(加法)、ADC(带进位加法)、INC(加1)
减法指令 SUB(减法)、SBB(带借位减法)、DEC(减1)、NEG(求补)、CMP(比较)
乘法指令 MUL(无符号数乘法)、IMUL(带符号数乘法)
除法指令 DIV(无符号数除法)、IDIV(带符号数除法)、CBW(字节转换为字)、CWD(字转换为双字)
ARM算术指令
指令类型 指 令 说 明
加法指令 ADC(带进位加法)、ADD(加法)
减法指令 SBC(带借位减法)、SUB(减法)、CMP(比较指令)、RSB(反向减法)、RSC(带借位的反向减法)
乘法指令 MLA(带累加的乘法)、 MUL(乘法)
除法指令 没有专用除法指令,需要用函数来实现,通常是把除法转化为乘法来运算
传送类算术指令: MOV(传送到目的寄存器)、MVN(传送到目的寄存器)
补充说明:传送类算术指令兼有传送功能和数据运算功能
3、逻辑指令
指令类功能: 对字或字节执行逻辑运算
X86逻辑指令
指令类型 指 令 说 明
逻辑运算指令 AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(异或)、TEST(测试)
移位指令 SHL(逻辑左移)、SAL(算术左移)、SHR(逻辑右移)、SAR(算术右移)、ROL(循环左移)、ROR(循环右移)、RCL(带进位循环左移)、RCR(带进位右移)
ARM逻辑指令
指令类型 指 令 说 明
逻辑运算指令 AND(逻辑与)、 BIC(清楚位)、EOR(逻辑异或)、ORR(逻辑或)
移位指令 LSL(逻辑或算术左移)、ASL(逻辑或算术左移)、LSR(逻辑右移)、ASR(算术右移)、 ROR(循环右移)、RRX(带扩展的循环右移)
4、串处理指令
指令类功能:处理存放存储器里的数据串
X86串处理指令
指令类型 指 令 说 明
指 令 MOVS(串传送)、CMPS(串比较)、SCAS(串扫描)、LODS(从串取)、STOS(存入串)
ARM串处理指令: 无
5、控制转移指令
指令类功能:用来控制程序的执行流程
X86控制转移
指令类型 指 令 说 明
无条件转移指令 JMP(段间和段内转移)
条件转移指令 J Z(结果为0(或相等)则转移)、JS(结果为负则转移)、JNS(结果为正则转移)、JO(溢出则转移)、JNO(不溢出则转移)、JP(奇偶位为1则转移)、JNP(奇偶位为0则转移)
循环指令 LOOP(循环指令)、LOOPPZ/LOOPE(当为0或相等时循环指令)、LOOPNZ/LOOPNE(当不为0或不相等时循环指令)
子程序指令 CALL(调用指令)、RET(返回指令)
中断指令 INT(中断)、INTO(如溢出则中断)、RIET(从中断返回)
ARM控制转移
指令类型 指 令 说 明
无条件转移指令 B(跳转)
条件转移指令 BEQ(相等跳转)、BNE(不等跳转)等等
子程序指令 BL(跳转,并保存下一条指令的地址到LR)、MOV PC,LR(从函数返回)
软中断指令 SWI(软中断)
补充说明: ARM指令集没有X86那样专用的循环指令,这些指令都是通过B、BL指令结合其他的指令来实现的
6、相对跳转指令对比
X86相对跳转指令:
jmp short 标号(IP=IP+8位偏移量:-128~127)、
jmp near ptr 标号(IP=IP+16位偏移量:-32768~32767)、
loop(cx=cx-1;if(cx!=0) IP=IP+8位偏移量)
ARM相对跳转指令:
B、
BL
说明:B、BL指令的偏移量都是24 位有符号数,左移两位后为26位。有符号扩展为 32 位,表示的有效偏移为 26 位(+/-32MB的地址空间)。
7、绝对跳转指令对比
X86绝对跳转指令:
jmp far ptr 标号(CS=标号所在段的段地址;IP=标号所在段的偏移地址)、
jmp word ptr 内存单元(段内转移)、
jmp dword ptr 内存单元(段间转移)
ARM绝对跳转指令: 无专用的指令,需要用指令来模拟
<1> “ldr pc, =标号”(相应于B)
<2> ldr lr, =halt_loop(相应于BL)
ldr pc, =标号
halt_loop:
b halt_loop
三、指令集对比总结
1、ARM指令集更简洁,比较少
比如说除法指令、循环指令、堆栈专用指令等等都是是没有的,靠其他的指令综合来完成
2、ARM指令集功能更强大
比如说b指令可以跳转的范围是前后32M
3、ARM每条指令都可条件执行
这使得C语言跳转语句可以用很简便的方式实现
4、ARM指令集操作更有序
因为是LOAD/STORE结构,所以都是先从内存中加载数据到寄存器(load),然后通过寄存器处理,再把处理结果写到内存中(store)。
5、ARM指令集都是4字节的
这样便于流水线的实现,而且内存的分配更有序。在指令寻址上,也节省了两位地址。
X86架构与ARM架构比较(摘录自网络)的更多相关文章
- X86 架构和 ARM 架构
1.关于x86架构 X86是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合,X86是由Intel推出的一种复杂指令集,用于控制芯片的运行的程序,现在X86已经广泛运用到了家 ...
- X86架构与ARM架构比较
引言 CPU是怎样运作的? CPU的运作与人脑的运作差不多.先谈一下人这个系统的工作方式.眼镜.耳朵.舌头.皮肤等等感觉器官接收到“触觉”,把信息传给大脑,大脑把信息处理后,把处理结果送给手.脚.嘴等 ...
- ARM架构和X86架构对比
转载地址 我们就ARM架构的系统与X86架构系统的特性进行一个系统分析,方便用户在选择系统时进行理性.合理的比价分析. 一.性能: X86结构的电脑无论如何都比ARM结构的系统在性能方面要快得多.强得 ...
- 让x86的android模拟器能模拟arm架构系统
网上介绍共计三种模拟器比较常用,分别是bluestacks.andy和Genymotion,前者支持ARM架构,中者支持远程控制,后者启动速度快,各有优缺点. 如果要用genymotion模拟arm的 ...
- 百度全新的ARM架构服务器,一个2U机箱装6台,每台4个3T硬盘,每个机箱共72TB
1月11日,中国科学院原秘书长.国家科技重大专项国务院咨询评估组专家侯自强,来到百度南京数据中心,和他一起的还有中国工程院院士倪光南以及工业和信息化部电信研究院传输研究所副所长石友康等人.他们看到的是 ...
- KDB支持单步调试功能(ARM架构)
0 实践发现KDB不支持step调试功能 (本文针对的是arm CotexA9架构,各种架构的实现方式不一样, X86的好像已经支持,不过本人没有验证过) 1 首先看下要调试的代码段 ...
- ARM架构解析
ARM架构解析 (2014-11-23 21:56:53) 转载▼ 标签: francis_hao arm架构 arm核 soc 分类: MCU 先来谈一下ARM的发展史:1978年12月5日,物理学 ...
- ARM 架构、ARM7、ARM9、STM32、Cortex M3 M4 、51、AVR 之间有什么区别和联系?(转载自知乎)
ARM架构: 由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类. ARM7: 一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核. ...
- CPU 架构 —— ARM 架构
linux 系统查看 CPU 架构命令: $ arch armv7l $ uname -m armv7l # -m:--machine # 进一步查看处理器信息 $ cat /proc/cpuinfo ...
随机推荐
- 承接cardboard外包,unity3d外包(北京动软— 谷歌CARDBOARD真强大)
手把手教你玩转googlecardboard[不知道在这里发可以不?] 谷歌Google I/O开发者大会于北京时间6月26日0点在美国旧金山举行,谷歌发布了Android L手机系统:Android ...
- mybatis实战教程(mybatis in action)之二:以接口的方式编程
前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询.请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:session.select ...
- JAVA代码发送邮件示例和解释
下载和上传附件.发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,好在昨晚终于走通代码成功以163邮箱发送邮件到qq邮 ...
- caffe-mnist别手写数字
[来自:http://www.cnblogs.com/denny402/p/5685909.html] 整个工作目录建在:/home/ubunt16041/caffe/examples/abc_mni ...
- 浏览器缓存相关的Http头介绍:Expires,Cache-Control,Last-Modified,ETag
转自:http://www.path8.net/tn/archives/2745 缓存对于web开发有重要作用,尤其是大负荷web系统开发中. 缓存分很多种:服务器缓存,第三方缓存,浏览器缓存等.其中 ...
- CentOS 6.5下静默安装oracle
本例: 通过SSH远程连接云主机,上传oracle11g安装包,在centos6.5上无图形化界面静默安装oracle11g. 涉及工具及环境: 1.本地环境windows7+ssh远程连接工具xSh ...
- XE6 & IOS开发之开发者账号、苹果证书(1):关于开发者账号
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 关于苹果开发者账号, 注 ...
- 【HEVC】1、HM-16.7编码器的基本结构
编码器在整个HM解决方案中的工程名为TAppEncoder,入口点函数位于encmain.cpp文件中: int main(int argc, char* argv[]) { TAppEncTop c ...
- 【原创】【2015最新】微信公众平台开发手把手入门之一:缘起微信公众号(PHP,MYSQL, BAE)
最近因为业务的需要,老板布置做了两个月简单的的微信公众平台开发,从网上搜了一些资料,实话说资料不多. 在参考学习的过程中也遇到了不少难缠的小问题,虽然不难逾越,但是确实浪费了时间. 我发现网上仅有不多 ...
- Android使用Drawable资源之使用ClipDrawable资源 实现进入条
以前我自定义的进度条(就是咱们现在工程中用的)是从android的源码中扒出来的一个XML,然后把里面的图片给替换了.一直不知道它的具体原理是什么. 今天得空研究了一下,发现它的原理其实就是用的and ...