而是S0、S1、S2 其实就是地址,通过地址来选择写入哪个锁存器中,并且对应输出结果,这种配置叫读/写存储器,也称为随机访问存储器即 RAM。
因为它能保存信息,所以叫存储器,因为能根据地址选择来写入读取所以是随机。
上图电路简化图如下,能存储 8 个独立的 1 位数据。
两个 8*1 RAM 结合一下就能表示存储 8 个独立的 2 位数据。
如果是通过下面这样的组合,则能表示 16*1 RAM,那个 DI 其实就是第四根地址线,所以是 2 的 4 次方。
可以看到 RAM 阵列的存储容量等于 2 的地址数次方,然后注意下我们图是简化了的,里面其实有很多继电器的,像逻辑门都是由继电器构成的,当断电之后电磁效应就没了,所有的触点都回归原样,这就是 RAM 为什么是易失性存储介质的原因。
咱们现在已经把内存给搞出来了。
接下来我们的目标就是把要计算的数据输入内存中,然后让加法器计算了之后把结果写回内存,并且可以再通过内存查看结果,大致的组装样子如下:
然后我们可以将加法器和锁存器结合起来作为一个累加器,即每次加法的值存储到锁存器中并作为下一次累加的值。
有了累加器之后,我们可以将存储器的值传到累加器中,称为 Load 装载,把下一个值添加到累加器中,称为 Add,然后将结果保存在某个位置,称为 Store。
可以通过控制面板先往存储器里面写好要操作的值并且可以通过控制面板上的灯来查看内存写入结果,然后一开始访问存储器的地址为 0000,由计数器来驱动地址的前进,然后进行相加,最终将结果存储回 RAM 阵列中,当然也需要设置停止信号。
把我们前面定义的 Load 等操作码,转化为特定的代码来控制整体的流程(你就认为这代码会指示电路做某种操作,没必要细想反正就是通过逻辑门组合产生的)。
这个操作码仅是个助记符,因为地址是固定的,并且操作码指令字节是固定长度(1个字节),所以我们可以在每条操作后面跟上地址,总的而言每条指令(除停止)需要 3 个字节。
简单的看下图,就是在存储器地址0000处存入以下“代码”。