首页 > 编程笔记

寄存器(Register)是什么?

现代高性能 CPU 中几十个寄存器也就够用了。

寄存器(Register)是 CPU 中用于存储数据的单元。在运算器、控制器中,都需要有记忆功能的单元来保存从存储器中读取的数据,以及保存运算器生成的数据,这样的单元就是寄存器。

这一系列单元使用“寄存器”的名称主要是为了和存储器(Memory)相区分。两者都有记忆功能,区别在于:
存储器的容量要远远大于寄存器。存储器保存了程序的输入数据和最终结果,而寄存器保存的是计算过程中的中间数据,更具有“瞬时性”。

寄存器有以下种类。

1) 数据寄存器

用于保存从存储器中读取的数据,以及运算器生成的结果。针对不同的数据类型,又可以分为整数寄存器、浮点寄存器。

2) 指令寄存器

用于保存从存储器中读取的指令,指令在执行之前先暂时存放在指令寄存器中。

3) 地址寄存器

用于保存要访问内存的地址。它也分为两种:

4) 标志位寄存器

用于保存指令执行结果的一些特征,例如一条加法指令执行后,结果是否为 0、是否溢出(Overflow,即超出数据寄存器的最大位宽)等。这些特征在标志位寄存器中以特定的位进行表示,可以供程序对计算结果进行判断。

寄存器的一个重要概念是“位宽”,即一个寄存器包含的二进制位的个数。通常所说的“CPU是多少位”也就是指 CPU 中寄存器的位宽。

更大的位宽意味着计算机能表示的数据范围更大、计算能力更强,但也增加了 CPU 的设计和实现成本。历史上的 CPU 从 8 位、16 位发展而来,现在的计算机绝大多数采用 32 位或 64 位的 CPU。

64 位 CPU 已经满足绝大多数现实生活中的信息处理需求,主流台式计算机、服务器暂时没有 128 位 CPU 的实际需求。龙芯1号都是 32 位的,龙芯2号、3号都是 64 位的。

CPU 中经常将一组寄存器单元使用一个模块来实现,形成寄存器堆。寄存器堆的典型结构包含3个端口:
寄存器堆的典型结构
图1:寄存器堆的典型结构

推荐阅读