X86,MIPS,ARM CPU体系结构特点

发布 2019-05-08 02:09:37 阅读 6557

在回答以下问题之前我们有必要说明一下什么是处理器体系结构和体系架构。

体系架构: cpu架构是cpu厂商给属于同一系列的cpu产品定的一个规范,主要目的是为了区分不同类型cpu的重要标示。

目前市面上的cpu主要分有两大阵营,一个是intel系列cpu,另一个是amd系列cpu。

体系结构: 在计算世界中, "体系结构"一词被用来描述一个抽象的机器,而不是一个具体的机器实现。 一般而言,一个cpu的体系结构有一个指令集加上一些寄存器而组成。

“指令集”与“体系结构”这两个术语是同义词。

问题一:x86,mips,arm三块cpu的体系结构和特点。

x86:x86采用了cisc指令集。在cisc指令集的各种指令中,大约有20%的指令会被反复使用,占整个程序**的80%。

而余下的80%的指令却不经常使用,在程序设计中只占20%。

总线接口部件biu

总线接口部件由4个16位段寄存器(ds,es,ss,cs)、一个16位指令指针寄存器(ip位物理地址加法器、6字节指令队列(8088为4字节)及总线控制电路组成,负责与存储器及i/o端口的数据传送。

执行部件eu

执行部件由alu、寄存器阵列(ax,bx,cx,dx,si,di,bp,sp)、标志寄存器(psw)等几个部分组成,其任务就是从指令队列流中取出指令,然后分析和执行指令,还负责计算操作数的16位偏移地址。

寄存器的结构。

1)数据寄存器ax、bx、cx、dx均为16位的寄存器,它们中的每一个又可分为高字节h和低字节l。即ah、bh、ch、dh及al、bl、cl、dl可作为单独的8位寄存器使用。不论16位寄存器还是8位寄存器,它们均可寄存操作数及运算的中间结果。

有少数指令指定某个寄存器专用,例如,串操作指令指定cx专门用作记录串中元素个数的计数器。

2)段寄存器组:cs、ds、ss、es。8086/8088的20位物理地址在cpu内部要由两部分相加形成的。

sp、bp、si、di是用以指明其偏移地址,即20位物理地址的低16位;而cs、ds、ss、es是用以指明20位物理地址的高16位的,故称作段寄存器。

4个存储器使用专一,不能互换,cs识别当前**段,ds识别当前数据段,ss识别当前堆栈段;es识别当前附加段。一般情况下,ds和es都须用户在程序中设置初值。

3)控制寄存器组:ip和flag。指令指针ip用以指明当前要执行指令的偏移地址(段地址由cs提供)。

标志寄存器flag有16位,用了其中的九位,分两组:状态标志和控制标志。前者用以记录状态信息,由6位组成,后者用以记录控制信息由3位组成。

6位状态标志,包括cf、af、of、sf、pf和zf,它反映前一次涉及alu操作的结果,对用户它“只读不写”。控制标志包括方向标志df,中断允许标志if及陷阱标志tf,中断允许标志if及陷阱标志tf,可通过指令设置。

mips:

所有指令都是32位编码;

有些指令有26位供目标地址编码;有些则只有16位。因此要想加载任何一个32位值,就得用两个加载指令。16位的目标地址意味着,指令的跳转或子函数的位置必须在64k以内(上下32k);

所有的动作原理上要求必须在1个时钟周期内完成,一个动作一个阶段;

有32个通用寄存器,每个寄存器32位(对32位机)或64位(对64位机);

本身没有任何帮助运算判断的标志寄存器,要实现相应的功能时,是通过测试两个寄存器是否相等来完成的;

所有的运算都是基于32位的,没有对字节和对半字的运算(mips里,字定义为32位,半字定义为16位);

没有单独的栈指令,所有对栈的操作都是统一的内存访问方式。因为push和pop指令实际上是一个复合操作,包含对内存的写入和对栈指针的移动;

由于mips固定指令长度,所以造成其编译后的二进制文件和内存占用空间比x86的要大,(x86平均指令长度只有3个字节多一点,而mips是4个字节);

寻址方式:只有一种内存寻址方式。就是基地址加一个16位的地址偏移;

内存中的数据访问必须严格对齐(至少4字节对齐);

跳转指令只有26位目标地址,再加上2位的对齐位,可寻址28位的空间,即256m;

条件分支指令只有16位跳转地址,加上2位的对齐位,共18位寻址空间,即256k;

mips默认不把子函数的返回地址(就是调用函数的受害指令地址)存放到栈中,而是存放到$31寄存器中;这对那些叶子函数有利。如果遇到嵌套的函数的话,有另外的机制处理;

高度的流水线:

mips指令的五级流水线:(每条指令都包含五个执行阶段)

第一阶段:从指令缓冲区中取指令。占一个时钟周期;

第二阶段:从指令中的源寄存器域(可能有两个)的值(为一个数字,指定$0~$31中的某一个)所代表的寄存器中读出数据。占半个时钟周期;

第三阶段:在一个时钟周期内做一次算术或逻辑运算。占一个时钟周期;

第四阶段:指令从数据缓冲中读取内存变量的阶段。从平均来讲,大约有3/4的指令在这个阶段没做什么事情,但它是指令有序性的保证。占一个时钟周期;

第五阶段:存储计算结果到缓冲或内存的阶段。占半个时钟周期;

所以一条指令要占用四个时钟周期;

arm: arm处理器是一个32位元精简指令集(risc)处理器架构,其广泛地使用在许多嵌入式系统设计。

risc(reduced instruction set computer,精简指令集计算机)

risc体系结构应具有如下特点:

1)采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。

2)使用单周期指令,便于流水线操作执行。

3)大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/ 存储指令可以访问存储器,以提高指令的执行效率。

arm体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗:

1)所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。

2)可用加载/存储指令批量传输数据,以提高数据的传输效率。

寄存器结构。

arm处理器共有37个寄存器,被分为若干个组(bank),这些寄存器包括:

1)31个通用寄存器,包括程序计数器(pc指针),均为32位的寄存器。

2)6个状态寄存器,用以标识cpu的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。

指令结构。

arm微处理器的在较新的体系结构中支持两种指令集:arm指令集和thumb指令集。其中,arm指令为32位的长度,thumb指令为16位长度。

thumb指令集为arm指令集的功能子集,但与等价的arm**相比较,可节省30%~40%以上的存储空间,同时具备32位**的所有优点。

问题二:arm 和 x86在体系架构上的区别和各自的优点。

arm 使用 risc 结构。x86使用 cisc 结构。

所以要说明两者的区别需要从risc , cisc 的结构特点来入手:

cisc和risc的比较。

cisc:cisc体系的指令特征使用微**。指令集可以直接在微**记忆体(比主体的速度快很多)里执行,新设计的处理器,只需增加较少的电晶体就可以执行同样的指令集,也可以很快地编写新的指令集程式。

有庞大的指令集。

cisc体系的优缺点。

优点:能够有效缩短新指令的微**设计时间,允许设计师实现cisc体系机器的向上相容。新的系统可以使用一个包含早期系统的指令超集合,也就可以使用较早电脑上使用的相同软体。

另外微程式指令的格式与高阶语言相匹配,因而编译器并不一定要重新编写。

缺点:指令集以及晶片的设计比上一代产品更复杂,不同的指令,需要不同的时钟周期来完成,执行较慢的指令,将影响整台机器的执行效率。

risc:1)精简指令集包含了简单、基本的指令,透过这些简单、基本的指令,就可以组合成复杂指令。

2)每条指令的长度都是相同的,可以在一个单独操作里完成。

3)大多数的指令都可以在一个机器周期里完成,并且允许处理器在同一时间内执行一系列的指令。

risc体系的优缺点:

优点:在使用相同的晶片技术和相同运行时钟下,risc系统的运行速度将是cisc的2~4倍。由于risc处理器的指令集是精简的,它的记忆体管理单元、浮点单元等都能设计在同一块晶片上。

risc处理器比相对应的cisc处理器设计更简单,所需要的时间将变得更短,并可以比cisc处理器应用更多先进的技术,开发更快的下一代处理器。

缺点:多指令的操作使得程式开发者必须小心地选用合适的编译器,而且编写的**量会变得非常大。另外就是risc体系的处理器需要更快记忆体,这通常都集成于处理器内部,就是l1 cache(一级缓存)。

综合上面所述,若要再进一步比较cisc与risc之差异,可以由以下几点来进行分析:

1、指令的形成。

cisc因指令复杂,故采用微指令码控制单元的设计,而risc的指令90%是由硬体直接完成,只有10%的指令是由软体以组合的方式完成,因此指令执行时间上risc较短,但risc所须rom空间相对的比较大,至于ram使用大小应该与程序的应用比较有关系。

2、定址模式。

cisc需要较多的定址模式,而risc只有少数的定址模式,因此cpu在计算记忆体有效位址时,cisc占用的汇流排周期较多(是什么?)。

3、指令的执行。

cisc指令的格式长短不一,执行时的周期次数也不统一,而risc结构刚好相反,故适合采用管线处理架构的设计,进而可以达到平均一周期完成一指令的方向努力。因此,在设计上risc较cisc简单,同时因为cisc的执行步骤过多,闲置的单元电路等待时间增长,不利于平行处理的设计,所以就效能而言risc较cisc还是站了上风,但risc因指令精简化后造成应用程式码变大,需要较大的程式记忆体空间,且存在指令种类较多等等的缺点。

综上来分析x86和arm的区别:

x86指令集有以下几个突出的缺点:

通用寄存器组——对cpu内核结构的影响x86指令集只有8个通用寄存器。所以,cisc的cpu执行是大多数时间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。

risc系统往往具有非常多的通用寄存器,并采用了重叠寄存器窗口和寄存器堆等技术使寄存器资源得到充分的利用。

解码——对cpu的外核的影响。

解码器,这是x86cpu才有的东西。其作用是把长度不定的x86指令转换为长度固定的类似于risc的指令,并交给risc内核。解码分为硬件解码和微解码,对于简单的x86指令只要硬件解码即可,速度较快,而遇到复杂的x86指令则需要进行微解码,并把它分成若干条简单指令,速度较慢且很复杂。