> 文章列表 > 寄存器:计算机中的小而强大的存储器件

寄存器:计算机中的小而强大的存储器件

寄存器:计算机中的小而强大的存储器件

目录

什么是寄存器

寄存器的作用

提高计算机的性能

存储处理器需要快速访问的数据

存储函数调用时的参数和返回值

存储中间计算结果

寄存器的种类

程序计数器

指令寄存器

状态寄存器

通用寄存器

寄存器的进化过程


寄存器:计算机中的小而强大的存储器件

在计算机中,寄存器是一种小型而快速的存储器件,用于存储处理器需要快速访问的数据。它们是计算机体系结构中的关键组成部分,对于计算机的性能和功能至关重要。

什么是寄存器?

寄存器是计算机中的一种小型存储器件,用于存储处理器需要快速访问的数据。它们是计算机体系结构中的一部分,通常被集成在处理器芯片中。寄存器是计算机中最快的存储器件之一,它们的访问速度比主存储器和辅助存储器要快得多。

寄存器通常被用于存储处理器需要快速访问的数据,如程序计数器、指令寄存器、状态寄存器、通用寄存器等。它们还可以用于存储函数调用时的参数和返回值,以及存储中间计算结果等。

寄存器的作用

寄存器在计算机中有许多重要的作用。以下是其中的一些:

提高计算机的性能

寄存器是计算机中最快的存储器件之一,它们的访问速度比主存储器和辅助存储器要快得多。因此,将需要快速访问的数据存储在寄存器中可以大大提高计算机的性能。

存储处理器需要快速访问的数据

处理器需要快速访问的数据通常存储在寄存器中,如程序计数器、指令寄存器、状态寄存器、通用寄存器等。这些数据对于处理器的运行至关重要,因此它们需要快速访问。

存储函数调用时的参数和返回值

在函数调用时,参数和返回值通常存储在寄存器中。这是因为寄存器的访问速度比主存储器要快得多,可以提高函数调用的效率。

存储中间计算结果

在计算机中,一些中间计算结果需要被存储下来以便后续使用。这些中间计算结果通常存储在寄存器中,因为寄存器的访问速度比主存储器要快得多。

寄存器的种类

在计算机中,有许多不同种类的寄存器。以下是其中的一些:

程序计数器

程序计数器是一种特殊的寄存器,用于存储正在执行的程序的地址。当处理器执行程序时,它会不断地从程序计数器中读取指令并执行它们。

指令寄存器

指令寄存器是一种特殊的寄存器,用于存储当前正在执行的指令。处理器从指令寄存器中读取指令并执行它们。

状态寄存器

状态寄存器是一种特殊的寄存器,用于存储处理器的状态信息。状态寄存器中的位表示了处理器的不同状态,如进位标志、零标志、负数标志等。

通用寄存器

通用寄存器是一种通用的寄存器,用于存储处理器需要快速访问的数据。它们可以用于存储函数调用时的参数和返回值,以及存储中间计算结果等。

寄存器的进化过程

寄存器这个部件以前并不属于CPU,是从8086开始,这个部件才融入CPU之中的。

由于在64位的竞争之中,Intel输给了AMD,

所以大家会发现64位CPU寄存器和32位CPU的寄存器差异巨大。

有多大呢,有图有真相

这个是16位CPU的寄存器

 

这个是32位CPU的寄存器

 

下面是64位CPU的寄存器

 

我们可以很清晰的看到,从16位到32位,寄存器几乎只是单纯的把位宽升了一级

但是从32位到64位,几乎就是换了一个系统一样

不仅仅多了很多mmx和fpr寄存器,还有xmm寄存器

同时通用寄存器数量也多了一倍

从原来的八个,直接变成16个

完全是换了一个CPU

不仅如此,对应的编译器也需要更换。

在计算机编译的时候,32位之前的,使用的是同一个编译器

64位的,则是使用的另一个新的编译器

为什么64位x86的CPU会多出来这么多寄存器

这个就不得不提到CPU里面崛起的另一种CPU:ARM

这是一个arm的寄存器示例图

 

我们明显可以看出来,x64的寄存器和arm的寄存器非常的神似。

在32位时代,通过测试表明,同样频率的芯片,arm架构的计算效率要远高于Intel的x86架构,同时ARM能耗还更低。

为什么呢?这就要从程序执行的一个特点讲起了

程序代码之中,存在大量的函数调用;而有函数调用,往往伴随着参数的传递。

传统的x86传递参数,是通过栈来传递的。

这个在当时没有什么问题。

当时栈是在内存的,而数据从内存到CPU是需要消耗比较多的时间的

虽然现在的CPU有了多级缓存,但是缓存大小还是非常小的

函数调用比较多,且比较频繁的时候,这点就不可避免的影响到CPU的执行效率了

而arm这种CPU,有16个寄存器,哪怕有一些是专用的,其寄存器数量也远超x86

它可以让四个参数以下的函数,无需栈,直接使用寄存器就可以传递。

而这种函数往往也是函数当中的大多数寄存器传递参数的好处就在于,CPU在计算的时候,没有必要等待内存,直接就在寄存器里面整,而且从一定程度上减少了压栈的操作,极大的提高了函数调用的效率