制作一个能做加法运算的计算机

上一节我们制作的计算机只能通过指令来控制“十六进制数码管”的显示。本节,我们来把电路稍稍改造成如下图所示的样子,增加一个加法器,并在“加法器”和“十六进制数码管”的输入端串联一个“触发器”用来缓存数据。同时我们增加了一根竖直的导线,把各种元件统一连接在一起,起到汇总的作用,所以它还有个名字,叫做“总线”。另外,由于加法器的输出和ROM数据的输出同时连接到总线上,所以我们使用了“断路控制器”通过信号控制来防止它们同时起作用而造成短路现象。

现在我们开始编写指令来实现2+3运算,并把结果显示在“十六进制数码管”上。在编写指令之前,我们先来看下“只读存储器”多出来的输出端都是做什么的。

  • D3~D0和前一节相同,输出下一条指令的地址
  • D7~D4和前一节相同,输出指令中携带的数据
  • D8控制D7~D4是否连接到总线上
  • D9控制总线数据是否传输到“十六进制数码管”的寄存器中。
  • D10控制加法器的输出端是否连接到总线上
  • D11控制总线数据是否传输到加法器的输入端1
  • D12控制总线数据是否传输到加法器的输入端2

这次“只读存储器”多出来的输出端D12~D8全部都是控制信号,主要负责各个元件的输入输出端何时连接到总线,用以完成各种复杂功能。我把编写好的用以实现2+3运算的指令列在如下的表格中。

地址 D3~D0 D7~D4 D8 D9 D10 D11 D12 十六进制
0000 0001 0010 1 0 0 0 0 0x121
0001 0010 0010 1 0 0 1 0 0x922
0010 0011 0011 1 0 0 0 0 0x133
0011 0100 0011 1 0 0 0 1 0x1134
0100 0101 0000 0 0 1 0 0 0x405
0101 0000 0000 0 1 1 0 0 0x600

我们来逐条分析下这些指令是如何工作的:

地址0000:设置D8=1,使D7~D4的数据0010传送到总线
地址0001:设置D11=1使加法器的“输入端1”由0变成1,总线数据0010被保存到加法器的寄存器1里
地址0010:设置D8=1,使D7~D4的数据0011传送到总线
地址0011:设置D12=1使加法器的“输入端2”由0变成1,总线数据0011被传送到加法器的寄存器2里
地址0100:设置D10=1,使加法器输出的计算的结果传送到总线
地址0101:设置D9=1,把总线数据传送给“十六进制数码管”显示出来

最终它的演示动画如下图所示。

results matching ""

    No results matching ""