Nand2Tetris(计算机系统要素)Unit 0 学习笔记

起初是在CS自学指南里找到的这门课(依据基本原理构建现代计算机:从与非门到俄罗斯方块),感觉还不错而且零基础,是一个比较好的入门课程。同时全英教学可以逆向让我捉襟见肘的英语水平稍微强一点,多理解一个单词就是胜利(

课程链接:https://www.coursera.org/learn/build-a-computer

本单元基本就是讲述构建逻辑,介绍如何一步一步做出来一台属于自己的计算机以及操作系统并让它们跑起来

Unin 0.1 The Road Ahead(前进之路)

主要介绍了计算机科学最重要的点——抽象

  • 在传统的编程课中,我们写”Hello World”程序时,只需要知道print命令会输出文本,而不需要关心它如何操作屏幕像素、如何管理硬件
  • 我们只需要关心”做什么”(what),而不需要关心”如何做”(how)

基本为架构讲解 这四层可以比喻成代码架构叭(我理解是 机器语言 汇编语言 代码库 你要写的代码)

抽象层次的工作方式:

  • 每个层次都建立在下一层的基础上
  • 实现完蓝色阶段后,我们可以忘记其实现细节,只记住接口
  • 然后在蓝色基础上实现绿色阶段,完成后再次忘记实现,只关心接口
  • 如此往复,通过多个简单阶段构建出极其复杂的系统

image-20251015202209646

以下为课程架构 part I 主要学硬件平台

image-20251015202725706

Unit 0.2 From Nand to Hack(从Nand到Hack)

构建路径的清晰层次:

  1. 最底层起点:从最基本的Nand逻辑门开始
  2. 逻辑层构建:通过组合逻辑艺术,从Nand门构建AND、Xor等基础逻辑门
  3. 时序组件:引入顺序逻辑(考虑时间、时钟),构建寄存器、RAM单元
  4. 核心处理器:组合上述组件构建CPU
  5. 完整系统:整合所有芯片形成Hack计算机架构

这节课的关注点是逻辑门 也叫Nand

应该和我这段时间学的电路的课有点像?说不准可以融会一下

image-20251015211115110

然后通过一个个Nand组合成的逻辑门 配合 硬件 做出一个叫Hack 的 计算机

image-20251015211320056

还讲解了 Xor 芯片(在网安里面最不懂的异或之类的底层原理来了),但主要还是讲解逻辑概况了下

image-20251015211828765

Xor异或门的逻辑图

电路这一周就学到逻辑图了(当时还有点听不懂

image-20251015212024416

简单描述了下HDL程序 实现方法

image-20251015212315581

然后然后阐述了以下课程内容

image-20251015212503480

Unit 0.3 From Hack to Tetris(从Hack到俄罗斯方块)

看到这里基本发现Unit 0 纯粹是逻辑介绍(基本就阐述了下学习框架和内容

假如说真的设计出来了一台有硬件支撑的计算机,但是只有壳子里面没有东西也没有办法运行从程序更何况这门课是要做俄罗斯方块,就要想如何来从零构建软件生态辣

通常做出来最基本的电脑的编程语言是机器语言或者汇编语言,就如下图的样式。

汇编语言虽然能被计算机直接理解,但学习和使用太不方便了。

image-20251015213945855

然后引申出一个概念 就是 制作一个自己的高级语言 以及制作汇编语言和高级语言之间的编译器最终做出来一个操作系统

高级语言 (Jack): 我们将设计一门属于自己的、结构清晰的高级编程语言——Jack。它包含了现代语言的核心要素,如变量、循环、条件判断、函数/方法和抽象数据类型,使得编写复杂程序(如俄罗斯方块)成为可能。

编译器 (Compiler): 这是连接高级语言与硬件的桥梁。我们将亲手为Jack语言编写一个编译器。它的核心任务是将优雅的Jack代码“翻译”成Hack计算机能够理解和执行的、底层的机器指令/汇编代码。

操作系统 (OS) / 标准库: 我们将构建一个精简的操作系统标准库。它封装了所有硬件相关的底层操作(如屏幕显示、键盘输入、内存管理等),为Jack程序提供一套统一、简单的高级API。这样,程序员就可以直接调用 printString 这样的函数来输出”Hello World!”,而无需关心字符是如何一个个绘制到屏幕像素上的。

image-20251015214057764

Practice Programming Assignment: Project 0(实践编程作业:项目0)

1
2
3
4
5
6
7
8
9
10
11
本项目有两个目标:(i) 学习在哪里找到课程软件,(ii) 练习创建和提交 zip 文件,以确保在本课程的 "真正 "项目中顺利进行。

软件设置:我们最近推出了新的 Nand to Tetris 集成开发环境。新的 IDE 取代了 2024 年之前 Nand to Tetris 课程中使用的 "传统 "软件包。请阅读 N
and to Tetris 软件指南


提交文件:在本课程的每个项目中,您都需要上传一个压缩文件到我们的服务器,以便评分。要达到这一要求,请将
file.txt
文件下载到您的计算机中(点击浏览器中的下载图标;此操作将把 file.txt 文件下载到您的计算机中)。 然后,将单个文件压缩成名为 project0.zip 的压缩文件,并提交该压缩文件。如有需要,请参考
有关制作压缩文件的说明
。确保压缩文件只包含 file.txt,不包含文件夹或子文件夹。

根据要求打包文件提交即可(

image-20251016085630057