梦寻百千度,回首阑珊处
偶然间看到 Shimon Schocken 在 TED 的一期演讲,介绍其为学生开发了一套逐步构建现代计算机的课程,该课程让大家了解现代计算机如何从基本门电路开始慢慢被构建。
【缘起】
一直想了解现代计算机是如何构建起来的,偶然间看到 Shimon Schocken 在 TED 的一期演讲,介绍其为学生开发了一套逐步构建现代计算机的课程,该课程让大家了解现代计算机如何从基本门电路开始慢慢被构建。
【体会】
正如本书作者所言,此书强调实践,一味的端着书看是很难对书中的知识点有实际的体会,况且本书前十二章,每个章节都是以最终实现一个项目为核心进行铺排:首先描述项目的背景知识,其次给出项目的实现规范,最后要求运用背景知识、遵照规范编码实现。各个小节可谓环环相扣、相辅相成。 其次,经过作者巧妙抽象分层,各章的项目之间又能做到很好的独立性,无论采用自顶向下,或是自下往上的实现策略来完成项目,都能达到一样的效果。当完成所有项目后,得到一台仿真的计算机软硬件时,那种成就感妙不可言。
【结构】
全书以项目为单元,逐一完成这些项目,即可构造出一个 16 位的仿真 Hack 计算机硬件,在此仿真硬件之上,开发出汇编编译器、堆栈式虚拟机,针对虚拟机设计出高级编程语言 Jack,同时开发出相应的 Jack 语言编译器。
典型的硬件体系 (第一章 ~ 第五章)
- 布尔逻辑
Project 01
- 布尔算术
Project 02
- 时序逻辑
Project 03
- 机器语言
Project 04
- 计算机体系结构
Project 05
典型的软件体系 (第六章 ~ 第十二章)
- 汇编编译器
Project 06
- 虚拟机
Project 07
、Project 08
- Jack 高级语言及程序样例
Project 09
- 编译器
Project 10
、Project 11
- 操作系统
Project 12
【勘误】
- 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)
【资源】
在《计算机系统要素-从零开始构建现代计算机》 一文章中,笔者一站式的整合了此书相关的课程资源、环境配置及项目源代码说明,当然此项目源代码是笔者基于 Java 的一种实现。
此书作者鼓励大家按照自己的思路去实现,毕竟当你用自己实现的 Jack 编译器编译并运行自己写的酷酷的 Jack 程序时,也能感受到“一个工匠的骄傲与喜悦”呢!😀😎