聊聊计算机中的寄存器

作者:小牛呼噜噜 | https://xiaoniuhululu.com
计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」

前言

现代CPU内部除了运算器和控制器,还有一个常见的组件: 寄存器是CPU内部用来存放数据的一些小型的存储区域,用来暂时存放参与运算的数据以及运算结果。
https://mp.weixin.qq.com/s/KecubYROQztHvwPicJb9wQ这篇文章中,我们了解了计算机各个硬件读写速度的差异,其中从存储器速度、容量和价格的关系金字塔图发现:

最上层的寄存器速度最快,容量最小,价格也最昂贵

下面我们来看看几个常见寄存器:

数据寄存器(DR)

数据寄存器(Data Register,DR)又称数据缓冲寄存器,数据寄存器用于存放操作数,其位数应满足多数数据类型的数值范围,其主要功能是作为CPU和主存、外设之间信息传输的中转站,用以弥补CPU和主存、外设之间操作速度上的差异。

数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字;反之,当向主存存入一条指令或一个数据字时,也将它们暂时存放在数据寄存器中。

数据寄存器的作用是 :

  1. 作为CPU和主存、外围设备之间信息传送的中转站;
  2. 弥补CPU和主存、外围设备之间在操作速度上的差异;
  3. 在单累加器结构的运算器中,数据寄存器还可兼作操作数寄存器。

地址寄存器(AR)

地址寄存器(Address Register,AR)用来保存CPU当前所访问的主存单元的地址。其本身可以具有通用性,也可用于特殊的寻址方式,如用于基址寻址的段指针(存放基地址)、用于变址寻址的变址寄存器和用于堆栈寻址的栈指针。地址寄存器的位数必须足够长,以满足最大的地址范围。

由于在主存和CPU之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止。

程序状态寄存器(PSW)

程序状态寄存器(PSW),用来保存各类运算指令或测试指令的结果的各种状态信息
除此之外,程序状态字寄存器还用来保存中断和系统工作状态等信息,以便CPU和系统及时了解机器运行状态和程序运行状态。
程序状态寄存器 是构成 运算器的重要组成部分

累加寄存器(AC)

累加寄存器通常简称累加器(AC),是一个通用寄存器。

累加器的功能是:当运算器的算术逻辑单元ALU执行算术或逻辑运算时,为ALU提供一个工作区,可以为ALU暂时保存一个操作数或运算结果。显然,运算器中至少要有一个累加寄存器。

乘商寄存器(MQ)

在运算器中,乘商寄存器主要负责数据的乘法与除法运算并可保存运算结果,是运算器的基本组成部分,是运算器三个基本寄存器之一。

程序计数器(PC)

程序计数器(PC),具有寄存信息计数两种功能,一般用来存放下一条指令在主存储器中的地址

在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入PC,因此PC的内容即是从主存提取的第一条指令的地址。

当执行指令时,CPU能自动递增PC的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备。
但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通常的那样通过顺序递增PC的内容来取得。

指令寄存器(IR)

指令寄存器(Instruction Register,IR),用来保存当前欲执行的指令

当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器。

指令包括操作码和地址码两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令译码器 就是完成这项工作的。指令译码器对指令寄存器的操作码部分进行译码,以产生指令所要求操作的控制电位,并将其送到微操作控制线路上,在时序部件定时信号的作用下,产生具体的操作控制信号。

指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码,即可向操作控制器发出具体操作的特定信号。

MAR、MDR

另外寄存器不只存在CPU中,存储器中也存在寄存器,比如MAR、MDR

  • MAR:存储器地址寄存器,用于存放将被访问的存储单元的地址。作用和AR类似
  • MDR:存储器数据寄存器,用于存放欲存入存储器中的数据或最近从存储器中读出的数据。作用和DR类似

其中MAR位数反映储存单元的个数,即最多能表示多少个不同的状态;MDR位数=储存字长=每个储存单元的大小

小结

将上面各个寄存器组合起来,我们可以画出一幅计算机更细化的组成图:

当存储器开始读操作的时候,存储器将指定地址单元内的指令读至MDR,再由MDR送至IR。
IR将指令中的操作码送到CU中,用来分析指令并发出各种微操作命令序列。再加指令中地址码送到MAR,用来去操作数

在CPU内部必须给ALU提供数据,因此ALU必须可直接访问MDR,ALU的外围还可以有另一些寄存器AC、MQ、X,这些寄存器用于ALU的输入、输出以及用于和MDR及用户可见寄存器交换数据。

在CPU的控制和状态寄存器中,还有用来存放程序状态字PSW的寄存器,该寄存器用来存放条件码和其他状态信息。在具有中断系统的机器中还有中断标记寄存器等等。


参考资料:

计算机组成原理(第2版)-唐朔飞
https://blog.csdn.net/weibo1230123/article/details/83106141


本篇文章到这里就结束啦,很感谢你能看到最后,如果觉得文章对你有帮助,别忘记关注我!更多精彩的文章