Skip to content

Commit

Permalink
ADD: recommend
Browse files Browse the repository at this point in the history
  • Loading branch information
RicardoJiang committed Sep 26, 2024
1 parent 3b13d35 commit 545da4a
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
65 changes: 65 additions & 0 deletions docs/foundation/nand-to-tetris/recommend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# 【书籍推荐】如何从最基础原理做出一个计算机
## 前言
最近在看《计算机系统要素-从零开始构建现代计算机》,这本书从与非门开始引导你一步步构建一个计算机,完成本书的所有项目后你将获得以下收获:

- 从与非门开始构造出一个 16 位的 Hack 计算机
- 在此计算机基础之上,开发出汇编编译器、堆栈式虚拟机
- 针对虚拟机设计出高级编程语言 Jack,同时开发出相应的编译器及语言标准库

![](https://raw.gitmirror.com/RicardoJiang/resource/refs/heads/main/2024/september/p6.jpg)

之前看到一张梗图,说当代程序员往往沉迷于学习各种最新的技术与框架,而忽视计算机的基础原理。

出现这种情况的原因,我认为一方面是因为计算机基础原理的学习曲线较陡同时很难看到即时效果,另一方面也在于大多数的计算机基础原理书籍都是以枯燥的理论知识为主,缺少实践性的内容,不利于读者的自学。

而《计算机系统要素》这本书则不同,它以项目驱动的方式引导你一步步构建一个计算机,让你在实践中学习计算机的基础原理,这样的学习方式更加有趣且容易理解, 也更容易让读者在学习过程中获得正反馈。

> 本书介绍的计算机系统是实际可用的系统,可被实际地构建出来,并能够正常运作。只要读者跟随本书的脚步,逐步构建出这个计算机系统,就会对计算机系统有更透彻的理解,这与只阅读而不动手实践所达到的学习效果相比有天壞之别。因此,本书在内容的编排和选择上着重针对那些卷起袖子准备动手实践,从零开始构建计算机系统的读者。
## 配套资料
- [计算机系统要素:从零开始构建现代计算机](https://book.douban.com/subject/1998341/)
- [配套课程:从第一原理构建现代计算机:从 Nand 到俄罗斯方块](https://www.coursera.org/learn/build-a-computer)
- [课程官网](https://www.nand2tetris.org/)
- [在线 IDE](https://nand2tetris.github.io/web-ide/chip/)
- [项目代码 1](https://github.com/woai3c/nand2tetris)
- [项目代码 2](https://reionchan.github.io/2015/08/27/the-elements-of-computing-systems/)
- [学习笔记](https://www.jianshu.com/u/55c13cb0d3f8)

## 内容简介
### 总体结构
![](https://raw.gitmirror.com/RicardoJiang/resource/main/2024/july/p12.png)

本书总体路线图如上所示,采用自下而上的方式,从最基本的元素(原始逻辑门)开始,然后一直向上层进发,直到最后构建完整的计算机系统。在这个过程中,你将学习到计算机系统的各个层次,包括组合芯片,时序芯片,计算机体系结构,机器语言,汇编编译器,虚拟机,编译器,操作系统,高级编程语言等。

以下是各章节的简要总结:

1. 布尔逻辑:介绍了布尔代数、门逻辑、硬件结构、硬件描述语言(HDL)以及硬件仿真。
2. 布尔运算:详细讨论了加法器和算术逻辑单元(ALU)。
3. 时序逻辑:探讨了D触发器、寄存器、存储和计数器。
4. 机器语言:介绍了机器语言的规范,包括A-指令和C-指令,以及输入/输出处理。
5. 计算机体系结构:涵盖了存储程序概念、冯·诺依曼结构、内存、CPU、寄存器和输入/输出。
6. 汇编编译器:讨论了汇编到二进制的翻译规范,包括汇编编译器的实现。
7. 虚拟机Ⅰ:堆栈运算:介绍了虚拟机范型和堆栈机模型,以及VM编程实例。
8. 虚拟机Ⅱ:程序控制:详细说明了程序控制流命令和函数调用命令。
9. 高级语言:通过几个范例介绍了高级语言的概念,包括过程化编程、抽象数据类型和链表实现。
10. 编译器Ⅰ:语法分析:介绍了词法分析、语法和语法分析器的实现。
11. 编译器Ⅱ:代码生成:讨论了数据翻译、命令翻译和编译过程。
12. 操作系统:涵盖了操作系统的各个方面,如数学操作、内存管理、输入/输出管理等。
13. 后记:提供了关于硬件实现、硬件改进、高级语言、优化和通信的额外信息。

![](https://raw.gitmirror.com/RicardoJiang/resource/refs/heads/main/2024/september/p7.png)

### 原始门:计算机中的最基础单元
程序员写的代码为什么能够被计算机所执行?毕竟程序只是一堆存储在文本文件中的字符而已,计算机是无法直接理解这些字符的。

因此我们必须要做的第一件事情就是对该文本进行语法分析,揭示其语义,然后用某种计算机能理解的低级语言来重新表达程序。这个翻译过程(即编译,compilation)产生的结果就是生成另外一个包含机器代码的文本文件。

当然,机器语言也是一种抽象,是一组计算机能理解的二进制代码。为了将该抽象形式具体化,就必须由某种硬件体系(hardroare architecture)来实现。这个硬件体系又是由芯片组(chip set)—寄存器、内存单元、ALU 等——来实现的。其中每个硬件设备都是由许多基本逻辑门 (logic gates)集成构建出来的。而这些门又是由诸如 Nand 和 Nor这样的原始门(primitive gates)构建而成的。

当然,每个原始门又是由若干晶体管组成,但是这部分内容不属于计算机科学的内容,而是属于物理学的范畴。因此,我们在这里就不再深究下去了。

因此我们可以认为,原始门就是计算机中的最基础单元。

接下来我们就从原始门开始,按照实现的顺序来展开阐述实现一个计算机的具体过程。


1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ nav:
- foundation/nand-to-tetris/virtual-machine-two.md
- foundation/nand-to-tetris/compiler-one.md
- foundation/nand-to-tetris/compiler-two.md
- foundation/nand-to-tetris/recommend.md
- Android 系统基础:
- foundation/framework/activity-start.md
- 实用工具系列:
Expand Down

0 comments on commit 545da4a

Please sign in to comment.