题
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位数是单个操作。
不隶属于 cs.stackexchange