累加器寄存器输入如何工作?

问题描述 投票:0回答:1

我正在阅读 J Clark Skott 的“But How Do It Know?”使用非常简单的 cpu 示例解释 cpu 工作原理的书。 本书中使用的所有寄存器如下所示:

我的问题是关于下图所示的ACC寄存器。

假设以下情况:选择了以下通用寄存器之一(例如 R0),我们在总线上启用其输出到 ALU 的“A”输入,并选择一种类型的单操作数操作“op”我们想用它来做。 ALU 的输出流入 ACC 寄存器。然而从这张图片看来我们不能选择保存它,因为 R0 寄存器的启用输出也从它下面的总线流入 ACC 所以如果我们选择启用's'ave 位我想我们将得到两个输入字节流入 ACC 寄存器导致意外行为。

所以我的猜测是,这意味着来自 ACC 寄存器的总线只有一种方式 - 向下到通用总线。我的猜测正确吗?如果是这样,我们如何实施它? 这是一个非常小的问题,但它一直困扰着我,因为它与他之前在书中的解释不符。从我帖子中的第一张图片来看,所有以前的寄存器只有 2 个总线字节用于它们 - 一个用于输入,一个用于输出,这两个没有冲突,因为寄存器的's','e'位。但是在这里,这个 ACC 寄存器似乎有 3 个总线字节:2 个输入和 1 个输出,这就是为什么我在这里有点困惑。

cpu-architecture cpu-registers accumulator
1个回答
0
投票

从根本上说,正如本书在第 80 页上名为“做一些有用的事情”的章节中所解释的:

假设我们想做一些有用的事情,比如将一个数字加到另一个数字上。我们有一个 R0 中的数字,R1 中还有另一个数字,我们要将其添加到 R0 中的数字。这 到目前为止我们构建的处理器具有执行此添加的所有连接,但它需要更多 一个时钟周期来完成.

  • 在第一个时钟周期,我们可以使能R1到总线上,并将其设置为TMP。
  • 在第二个周期中,我们可以使能 R0 到总线上,将 ALU 设置为 ADD,并将答案设置为 行政协调会
  • 在第三个周期,我们可以使能ACC到总线上,并设置到Ro中

你是正确的,如果同时启用两个寄存器(在你的例子中,R0 和 ACC),我们会在总线上得到垃圾——或者两个字节的逻辑或。

如果启用了两个寄存器,我怀疑逻辑或运算的原因是,当只有一个寄存器被启用到总线时,这已经发生了。其他寄存器实际上仍然连接在总线上,但它们正在输出一个字节的 0,所以不要干扰实际启用的寄存器。带零的逻辑或是恒等函数。

(我想 ACC 可能能够直接从 I/O 捕获输出,但您可能必须确保 ALU 向 ACC 输出零。)

在本书的后面,它将解释如何使用步进器为一些添加指令完成这三个周期——几个周期被添加到这个序列之前以获取指令(从 RAM 中获取指令,因为程序太大而无法单独放入 CPU,它们存储在 RAM 中并在适当的时间获取下一条指令是处理器的一个重要特性;处理器还需要一个程序计数器寄存器 (IAR) 来引用流中的下一条指令,并且需要递增程序计数器以获取下一组周期中的下一条指令)。


虽然不是这个精确的处理器,但 Little Man Computer 有一个模拟器,您可以在其中可视化一个简单处理器的步骤:https://www.peterhigginson.co.uk/LMC/

© www.soinside.com 2019 - 2024. All rights reserved.