CPU中的控制单元究竟如何从寄存器中检索数据?它按位检索位吗?

例如,如果我添加两个数字,a + b,计算如何在内存级别进行?

有帮助吗?

解决方案

假设您有一个具有十六个32位寄存器的处理器和一个可以添加32位整数的单元。一种非常简化的方法来添加寄存器x并寄存器y并将结果存储在寄存器z中是这个:

首先,您构建给定数字x的硬件可以选择寄存器x的第一位并将其移动到“操作数1”的第1位。这实际上是非常复杂的,因为x可以是16个值中的一个,并且硬件必须能够读取16个寄存器中任何一个的第一位。

第二,您拍摄此硬件并制作32份副本,为寄存器中的每个位副本。现在我们有一些非常复杂的硬件,可以移动32个512位。

第三,我们用适当的更改重复所有这些,将寄存器y移动到“操作数2”。

第四,我们构建了可以添加操作数1和操作数2的硬件,并将总和存储在32位位置“输出”

和第五,我们构建了可以在“输出”中取值的硬件 并将其存储到寄存器z。

其他提示

CPU可以直接访问寄存器。如果 A和B 已经在寄存器中,则CPU可以直接执行添加(通过算术逻辑单元)并将输出存储在其中一个寄存器中。不需要访问内存。但是,您可能希望将数据 A和B 从内存或堆栈移动到寄存器中,反之亦然。这些是单独的操作。

寄存器可以是不同的尺寸8到64位,这取决于您的CPU架构。在 x86-64上 CPU寄存器是64位,从而增加两个64位数是单个操作。

cpu寄存器被认为是CPU的一部分,而不是内存。惊人的,寻址非常不同。)

控制单元通常不会从通用寄存器中访问值:
它控制馈送寄存器值,例如ALU。由 word
(有是DEC PDP-8 / S或摩托罗拉14500的东西。)

架构“逻辑”寄存器),并且有实现,其中注册重命名从物理寄存器中绘制逻辑寄存器。
双操作数指令产生多个读取端口
(接下来,有指令级并行性多个写端口也是)。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top