从NAND到Tetris-制造现代计算机

此回购是指Coursera上的两个课程:
- 构建一台现代计算机,从第一原理:从NAND到Tetris(第一部分)。
- 制造一台现代计算机,从第一原理:NAND到Tetris第二部分
您将从从布尔代数和逻辑大门开始,以一台功能齐全的通用计算机结束,从头开始构建一台计算机,从而进行自节奏的旅程。您将了解硬件抽象,自己实施它们,并最终体验到建立复杂系统的快感。每个文件夹都包含我对作业和个人笔记的解决方案:
- 项目1:构建基本逻辑门,例如和或,或,不和多路复用器
- 项目2:建造一系列加法芯片和算术逻辑单元(ALU)
- 项目3:建筑寄存器,内存单元和随机访问存储器(RAM)
- 项目4:学习机器语言并编写低级程序
- 项目5:使用项目1-3的芯片组来构建中央处理单元(CPU)和一个能够从项目4中运行机器语言程序的硬件平台
- 项目6:开发一个汇编器,将用符号机器语言写入的程序转换为二进制代码。
- 项目7:在此模块中,我们开始构建基于堆栈的虚拟机。在介绍了虚拟机体系结构及其VM语言(类似于Java的字节码)之后,我们开发了一个基本的VM Translator(类似于Java的JVM ),旨在将VM程序转换为Hack Machine语言。
- 项目8:在上一个模块中,我们提出了一个虚拟机抽象,并开发了一个基本的VM转换器,该转换器实现了VM语言的算术和内存访问命令。在此模块中,我们将通过实现其余VM语言的分支和功能称呼命令来完成VM转换器。
- 项目9:在此模块中,我们介绍了杰克语言以及插孔编程。该模块最终使用Jack在一个项目中开发了您选择的简单交互应用。
- 项目10:将高级程序转换为低级语言由两个定义明确且或多或少独立的阶段组成:语法分析和代码生成。Syntax分析 - 该模块的主题 - 由两个子阶段组成:词汇分析(也称为sokenization )和解析。最终的项目将是一个Jack Analyzer-一个程序,该程序在不生成可执行代码的情况下揭示了插孔程序的语法。
- 项目11:在上一个项目中,我们为杰克语言构建了语法分析仪。在此,我们将将该分析仪变成一个全面的杰克编译器。这将需要修改分析仪的逻辑,该逻辑将XML代码生成可执行VM代码的逻辑。
- 项目12:操作系统是软件服务的集合,旨在弥合高级程序与运行的基础硬件之间的差距。 Java和Python等现代语言与实施许多此类操作系统服务的标准类库一起部署。在这个项目中,我们将开发一个基本操作系统,该操作系统将包装在类似的类库中。 OS将在Jack中使用自举策略开发,类似于C中的Linux。