X86架构与ARM架构比较(摘录自网络)

摘要:
示例如下:addmem、reg2、ARM指令集架构允许CPU仅使用加载/存储指令与内存交互,所有CPU操作都在寄存器中完成。X86在处理数据时可以直接读取和写入内存,但ARM只能通过将内存加载到寄存器中来读取内存,并且只能通过使用寄存器寻址将操作结果写入内存。ARM体系结构的LOAD/STORE体系结构比X86的寄存器存储器体系结构更易于设计。

引言

 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架构设计时容易的多,结果更简单。   X86架构与ARM架构比较(摘录自网络)第1张

二、指令集比较

说明:本文的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架构比较(摘录自网络)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java-修饰符【STM32H7】第21章 ThreadX定时器组下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Tier和Layer

在实际开发工作中。我们经常听到“架构设计”和“架构师”这种名词,它并不新奇和神奇,可是却非常少有人对“架构”有全面的了解和认识。更谈不上掌握了。事实上,也仅仅有极少数人能成为或者被冠以“架构师”这种title。为此。笔者总结了实践中对架构的一些理解,希望能够补充非常多人对此认识上的不足,纠正一些误解。 架构的分类 对于“架构”来讲。理论上划分了5种架...

ARM寄存器

ARM寄存器 ARM处理器模式用户模式(User):ARM处理器正常的程序执行状态;快速中断模式(FIQ):用于高速数据传输或通道处理;外部中断模式(IRQ):用于通用的中断处理;管理模式(Supervisor):操作系统使用的保护模式;数据访问终止模式(Abort):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护;系统模式(System):运...

大型网站技术架构,架构师领导艺术

架构师的工作:架构设计,软件开发, 其他一些管理职能:规划产品路线、估算人力资源和时间资源、安排人员职责分工,确定计划里程碑点、指导工程师工作、过程风险评估与控制。 这些管理事务需要对产品技术架构、功能模块划分、技术风险都熟悉的架构师参与或直接负责。 在软件开发过程中,架构师除了实现技术架构,完成产品技术实现外,还需要和项目组内外各种角色沟通协调,可以说架...

RISC-V与DSA计算机架构

RISC-V与DSA计算机架构 相信所有和计算机体系结构打过交道的朋友们都看过David Patterson与John Hennessy的煌煌巨作,《计算机体系架构:量化研究方法》。两位在计算机架构领域鼎鼎大名的教授,一个来自加州大学伯克利分校,另一个来自斯坦福。 首先上场的是David Patterson,为我们带来了关于指令集架构(ISA)的回顾以及R...

深入理解计算机系统1

第一章 计算机系统漫游 代码段的生命周期 hello.c #include <stdio.h> int main() { printf("hello world! "); return 0; } 1.1 前序 源程序(源文件)实际上就是一个由0和1组成的位(又成比特bit)序列,8个位被组组成一组,称为字节。每个字节表...

【试题汇总】图像处理职位面试题汇总(1)

Matlab编程部分 1. Matlab 中读、写及显示一幅图像的命令各是什么? 解:第一、Matlab中读图像函数是imread( )。imread 函数用于读入各种图像文件,其一般的用法为:[X,MAP]=imread(‘filename’,‘fmt’) 其中,X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的...