国庆期间,我造了台计算机( 七 )


中间的黑盒肯定是拿来选择的 , 通过开关来控制通路 , 比较复杂我觉得稍微看看就行 , 反正就是电路选择 。
国庆期间,我造了台计算机文章插图
输入的话也不用直接用八个 , 所以也搞个三个开关 。
国庆期间,我造了台计算机文章插图
内部构造我就不贴了 , 也和选择器一样复杂 , 这叫译码器 , 最终完整电路图如下:
国庆期间,我造了台计算机文章插图
而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处存入以下“代码” 。
国庆期间,我造了台计算机文章插图
并且可以搞个 Jump 指令用来跳转地址 , 可以通过设置计数器来达成跳转地址的功能 , 有了跳转我们就能做循环操作了 。 某些重复的指令只需要编写一次 , 通过条件跳转来完成循环 , 最终的组装示意图如下:


推荐阅读