制作一个带有内存的计算机
Last updated
Last updated
上一节我们制作的计算机能够计算2+3了,但我又想到了个新问题:如果我现在想先计算2+3,再计算1+2,然后再把它们的结果进行相加,最后的计算结果显示到“十六进制数码管”上,该怎么设计“只读存储器”的指令呢?这时,我们就需要一个临时存储中间计算结果的地方了,我们可以再给前面章节的计算机增加一个内存,即“随机存取存储器”,其逻辑电路图如下图所示。
和前一节相比,我们改动比较简单,只增加了一个“随机存取存储器”,并给“只读存储器”增加了3个输出端用于控制“随机存取存储器”的数据读写。我们先来看下“只读存储器”多出来的输出端都是做什么的。
D12~D0和前一节功能相同,不再赘述
D13控制内存的输出端是否连接到总线上
D14控制总线数据是否传输到内存的地址输入端
D15控制总线数据是否传输到内存的数据输入端
现在我们开始编写指令来实现这样一个功能,把2+3的运算结果保存到内存的地址0x7处,并把内存地址0x7处保存的数据通过总线显示在“十六进制数码管”上。我把编写好的指令绘制在如下的表格中。
0000
0001
0010
1
0
0
0
0
0
0
0
0x121
0001
0010
0010
1
0
0
1
0
0
0
0
0x922
0010
0011
0011
1
0
0
0
0
0
0
0
0x133
0011
0100
0011
1
0
0
0
1
0
0
0
0x1134
0100
0101
0111
1
0
0
0
0
0
0
0
0x175
0101
0110
0111
1
0
0
0
0
0
1
0
0x4176
0110
0111
0000
0
0
1
0
0
0
0
0
0x407
0111
1000
0000
0
0
1
0
0
0
0
1
0x8408
1000
1001
0000
0
0
0
0
0
1
0
0
0x2009
1001
1001
0000
0
1
0
0
0
1
0
0
0x2209
我们来逐条分析下这些指令是如何工作的。
它的演示动画如下图所示。