微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > X86架构与ARM架构比较

X86架构与ARM架构比较

时间:11-09 来源:互联网 点击:
引言

 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(带扩展的循环右移)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top