Home

从0到1构建计算机(11/12)--在Hack上运行小游戏

经过了前面10章漫长的旅程,我们终于要达成我们的目标了:在一个完全由自己实现的计算机平台上运行一个小游戏。这个小游戏要经过编写、编译、转换虚拟机字节码、汇编、生成机器代码等步骤,最终运行在自己搭建的虚拟计算机上。在游戏的运行过程中,每一条指令都是我们亲手编写,每一个细节我们都了如指掌,是我们完完全全地创造了它(虽然需要基于一个硬件虚拟机),这确实是一件非常有意思的事情。 骑手快跑 我这里...

从0到1构建计算机(10/12)--简单的操作系统

上一篇我们完成了Jack的编译器,这就意味着我们可以随心所欲地在Hack上编写Jack程序了。但是以Jack目前的能力,即使是想完成一些简单的操作也要编写非常复杂的代码,例如我们想要在屏幕上输出“Hello Workd!”,就必须在屏幕上特定位置绘制上几百个像素点。所以我们需要实现一个简单的操作系统来让事情变得更简单一些。 操作系统就是用来衔接计算机的硬件系统和软件系统的,以使得计算机对程...

从0到1构建计算机(9/12)--实现编译器

本篇实现Jack的编译器,也是从0到1构建计算机系列最复杂的一篇。编译器的实现本身是非常复杂的,但得益于Jack超简洁的语法,我们回避掉了很多复杂的问题。总体上Jack编译器是一个完整的编译器,它包括词法分析,语法分析,语义分析,代码生成等重要主题。 高级语言为什么能够被编译器理解和编译?因为高级语言是按照某种规则的语法(上下文无关语法)组织的,结构上层次化的语言。程序的每个类,每条语句都...

从0到1构建计算机(8/12)--高级语言:Jack

本篇我们将设计一门高级语言:Jack。Jack是一门基于面向的对象的语言,具备现代高级语言的基本特性和风格,但是语法相对简单,且不支持继承等高级属性(其实Jack非常寒酸,只是支持了“对象”的功能)。本篇的内容非常简单,主要是介绍Jack的语法。 Hello, World 众所周知,学习一门新语言的第一步,是写一个 Hello, World。 1 2 3 4 5 6 7 class M...

从0到1构建计算机(7/12)--实现一个虚拟机

计算机工作的本质就是对内存中的数据进行操作,因此只需要具备两种能力即可:(1)对内存的读和写;(2)用对数据进行算数逻辑运算。此外,支持指令跳转能大大提高计算机的可编程能力。直观上看,Hack具备了以上三项能力,我们上一篇也举例了如何实现1+2+…+100。但Hack和我们常用的CPU具备几百条指令集的能力还相去甚远,例如支持四则运算,对栈的操作,指针寄存器的使用,支持函数调用,处理入参和回...

从0到1构建计算机(6/12)--汇编语言与汇编器

前一篇我们完成了Hack平台的硬件部分,本篇开始我们进入到软件的部分。相比较而言,软件部分更加复杂,需要花更多时间来实现和调试。软件部分的第一层就是汇编语言和汇编器,本篇我们将定义Hack的汇编语言,并编写对应的汇编器 汇编语言和汇编器 汇编语言是机器语言的符号表示,相比于机器语言,汇编语言更接近于自然语言,便于我们阅读和记忆。汇编语言和机器语言在表述上的一致性是非常高的,绝大多数情况下...

从0到1构建计算机(5/12)--实现hack:计算机架构、内存、CPU和指令集

经过前两篇我们已经实现了所有的组合逻辑芯片和时序芯片,具备了实现hack计算机的基础,本篇是项目硬件部分的最后一篇,我们将在本篇定义hack能够执行的操作,即hack的指令集;实现hack的内存、CPU,然后将它们组合起来形成完整的计算机硬件架构。 计算机架构 hack是基于经典的冯·诺伊曼体系架构,它的关键组成部分是将中央处理单元和存储器,通过存储器中存储的程序指令控制中央处理器的执行...

从0到1构建计算机(4/12)--时序逻辑芯片:时序门、寄存器、RAM、计数器

上一篇我们实现了一系列组合逻辑芯片和CPU的运算大脑:ALU,但是组合逻辑芯片是一个实时系统,只要输入值改变了输出值也马上跟着改变,上一秒辛苦计算出来的值,下一秒就消失不见了,因此我们需要一个具备”记忆功能”的原件,用于存储数据。这就是我们本篇要介绍的:时序逻辑芯片。 反馈电路、时钟系统、D触发器 组合逻辑芯片之所以无法记住上一次计算的值,是因为电流信息的流向是单向的,它总是向前流动,导...

从0到1构建计算机(3/12)--组合逻辑芯片:逻辑门、加法器、ALU

上篇说到:通过使用Nand门,我们可以实现任何逻辑门,进而实现可以一个CPU。后面我们就会搭建一个麻雀虽小但五脏俱全的计算机平台:hack。本篇我们开始第一步,实现搭建hack所需的一组芯片:组合逻辑芯片 组合逻辑芯片 一个最基本的CPU主要由两类芯片组成: 组合逻辑芯片(Combinational Chips):与、或、非门,加法器,ALU芯片等。这些芯片主要负责逻辑计算 时...

从0到1构建计算机(2/12)--与非门实现CPU的数理基础

CPU和布尔函数 CPU本质上是一个函数计算器: 信号通过输入管脚输入,对应着函数的入参 CPU的内部电路是函数的黑盒实现 信号通过输出管脚输出,对应着函数的出参 8086 CPU 大家有没有思考过现代计算机为什么是基于二进制的🤔?事实上,在计算机的发展历程中确实出现过其他进制的计算机,例如10进制,3进制(现在计算机也是一步步演化过来了,其某些核心设计思想甚至来源于...