并且可以搞个 Jump 指令用来跳转地址,可以通过设置计数器来达成跳转地址的功能,有了跳转我们就能做循环操作了。某些重复的指令只需要编写一次,通过条件跳转来完成循环,最终的组装示意图如下:
2-1 选择器是切换计数器的地址输入或者是计算得出的输入,通过三个 8 位锁存器来分别代表代码,地址高位和低位,上图来看可能有点绕,不理解细节也没有关系,大致的流程还是简单的。
至此我们其实已经组装了一台计算机了,之所以能叫计算机而不是计算器是因为它可以根据你写入存储器的指令自动取指执行,并且可以进行条件跳转和循环执行自动停止。
计算机的处理器就是我们上面的累加器,可以称之为算数逻辑单元,即 ALU。
那个计数器就是我们的程序计数器PC。
存储器就是内存了,输入就是控制面板,输出就是控制面板上的灯。
计算机几个核心模块就都有了。
至于前面我们定义的操作码其实就是机器语言,而人类为了好记就会搞一些助记符来标识,发展到后来就是汇编语言,而汇编语言又太麻烦了,因此又抽象搞了高级语言,比如 C、Java 等等。
最后这篇文章最终所描述的计算机其实是相当简陋的,真正的计算机也肯定不会这样造的,比如不会用继电器,线路也会用各种总线啥的搭建起来各种集成电路等等,ALU 也不会如此简单,会有各种并行计算等等。
主要是想借此大致的说下计算机基本的运行原理和构成,因为本质上的道理是一样的。如果要我把很多细节都说出来我也不会,我也就懂一点点点点皮毛,我也不是搞硬件的,啥模电的课我也没上过,我就会装装机的水准。
本文大量借助了《编码的奥义》一书的例子,或者说是对此书一些章节的梳理和总结,如果对原文有兴趣的可以自己购买书籍,如果觉得囊中羞涩可以后台回「233」,我来帮你想想办法。
我是 yes,从一点点到亿点点,我们下篇见。