《计算机系统要素-从零开始构建现代计算机》1
之前一直有想了解现代计算机是如何构建起来的,偶然间看到
Shimon Schocken
在TED的一期演讲,介绍其为学生开发了一套逐步构建现代计算机的课程,该课程让大家了解现代计算机如何从基本门电路开始慢慢被构建。全书以项目为单元,逐一完成这些项目,即可构造出一个16位的Hack计算机硬件,在此硬件之上,开发出汇编编译器、堆栈式虚拟机,针对虚拟机设计出高级编程语言Jack,同时开发出相应的Jack语言编译器。真是相见恨晚,细读的同时根据规范采用Java语言完成了各个章节项目,故而有了此GitHub上的项目代码。
目录
- 资源
- 项目
- 典型的硬件体系 (第一章 ~ 第五章)
- 布尔逻辑
Project 01
- 布尔算术
Project 02
- 时序逻辑
Project 03
- 机器语言
Project 04
- 计算机体系结构
Project 05
- 布尔逻辑
- 典型的软件体系 (第六章 ~ 第十二章)
- 汇编编译器
Project 06
- 虚拟机
Project 07
、Project 08
- 编译器
Project 10
、Project 11
- 操作系统
Project 12
- Jack高级语言及程序样例
Project 09
- 汇编编译器
- 典型的硬件体系 (第一章 ~ 第五章)
- 中文版勘误
- 版权
- 项目源码许可证
资源
- 原书:The Elements of Computing Systems 2
-
Nand2tetris软件: 下载
-
Windows 配置
下载后, 将zip文件放到电脑上的一个空目录里然后解压,保持解压缩的文件、目录的名称和结构不变。运行该软件的电脑必需包含
JRE(Java运行环境)
,JRE可以在很多网站免费下载,例如Java官网。为了更好的性能,请确保下载最新本。 - 软件工具
详情请访问:http://http://www.nand2tetris.org/software.php
项目
布尔逻辑
布尔算术
- 加法器
- ALU 算术逻辑单元
时序逻辑
机器语言
计算机体系结构
汇编编译器
-
-
Parser.java 语法分析器
-
Code.java 汇编语言助记符译码器
-
SymbolTable.java 符号表
-
Assembler.java 汇编编译器入口类
-
-
测试程序
虚拟机-上篇
-
-
Parser.java VM语法分析器
-
CodeWriter.java VM命令转汇编代码生成器
-
VMTranslator.java VM翻译器入口类
-
-
测试程序
-
堆栈运算
-
压入并相加两个常量 SimpleAdd.vm
-
执行一系列堆栈上的运算、逻辑操作 StackTest.vm
-
-
内存访问
-
使用虚拟内存段执行pop和push操作 BasicTest.vm
-
使用pointer段、this段、that段执行pop和push操作 PointerTest.vm
-
使用static段执行pop和push操作 StaticTest.vm
-
-
虚拟机-下篇
-
-
Parser.java VM语法分析器
-
CodeWriter.java VM命令转汇编代码生成器
-
VMTranslator.java VM翻译器入口类
-
-
测试程序
-
程序控制流命令测试程序
- 斐波拉契数列 FibonacciSeries.vm
-
函数调用命令测试程序
-
Jack高级语言及程序样例
-
Hello 打招呼程序
Author: Reion Chan
-
Countdown Timer 倒计时程序
Author: Reion Chan
-
Rolling Ball 滚球程序
Author: Reion Chan
-
Square 官方样例程序
Author: Nand2Tetris.org
编译器-上篇
-
-
CompilationEngine.java 语法分析引擎
-
JackTokenizer.java 字元转换器
-
XmlUtils.java 语法树XML展现器
-
JackAnalyzer.java 语法分析器入口
-
-
测试程序
-
Square Dance 交互小游戏
-
Expressionless Square Dance 无表达式交互小游戏
-
Array Test 数组测试程序
-
编译器-下篇
-
-
CompilationEngine.java 语法分析引擎
-
JackTokenizer.java 字元转换器
-
SymbolTabel.java 符号表
-
VMWriter.java VM命令输出器
-
JackCompiler.java 编译器入口
-
-
测试程序
-
Seven 计算(3*2)+1的值 (常量、运算表达式、do语句、return语句)
-
Convert To Bin 十进制转二进制 (表达式、函数、语句)
-
Square Dance 交互游戏 (构造函数、方法、成员字段、方法调用)
-
Average 求平均值 (数组、字符串)
-
Pong 单人乒乓游戏 (对象、静态变量)
-
Complex Arrays 复数计算 (数组引用、表达式)
-
操作系统
-
Math.jack 数学计算类
- MathTest测试程序
-
String.jack 字符串类
- StringTest测试程序
-
Array.jack 数组类
- ArrayTest测试程序
-
Output.jack 字符输出处理类
- OutputTest测试程序
-
Screen.jack 屏幕操作类
- ScreenTest测试程序
-
Keyboard.jack 键盘操作类
- KeyboardTest测试程序
-
Memory.jack 内存直接访问类
- MemoryTest测试程序
-
Sys.jack 操作系统启动类
- SysTest测试程序
本书中文版勘误
-
4.2.3节
Page-67
图4.3中,表格右边的标题应为(当a=1)comp助记符
-
4.2.5节
Page-70
第二段关于屏幕描述中,像素映射位置应为RAM[16384+r·32+c/16]
-
8.2.2节
Page-160
function f n 原文对n的解释位该函数有n个参数
,应改为该函数有n个本地变量
-
11.3.4节
Page-240
writeFunction中参数nArgs(int)
应改为nLocals(int)
版权
所有程序及文件(Nand2Tetris所包含的原始文件除外)版权归属Reion Chan。
如你使用本程序及文件请注明作者(Reion Chan),详细参见GNU GPLv3
未遵照许可或私自盗用此程序及文件将被诅咒一生只写漏洞百出的程序。
项目源代码许可证
本程序为自由软件:你可以在遵照GNU GPLv3(及后续版本)条款的前提下,转发、修改本程序。
本程序旨在学习、交流,对本程序不承担任何担保责任,详细参见GNU GPLv3许可。
本程序包含一个GUN 通用公共授权GNU GPLv3。如果没有,请访问http://www.gnu.org/licenses/
脚注
-
周维、宋磊、陈曦翻译,电子工业出版社出版 ↩
-
MIT Press, By
Noam Nisan
andShimon Schocken
↩ -
Multiplexor 多路复用器,即:多路模拟信号通过选择位确定哪一路进行输出,多路串行共享输出线路 ↩
-
Demultiplexor 解复用器,与多路复用器相反,将单路模拟信号通过选择位确定输出到多条输出位的其中一条线路 ↩
-
多位
输入、输出线路一次能够接纳、输出的比特位数 ↩ -
多通道
输入线路的条数 ↩