plh97/CS-Nand2Tetris

avatarplhDigital nomad

nand2tetris

计算机系统要素-从零开始构建现代计算机 项目

封面

建议和<<深入理解计算机系统>>这本一起看, 一本自下而上讲述计算机,另一本自上而下讲述计算机.都是非常经典的书籍.

关键术语中英文对照表

英文术语翻译
allocation内存分配
assembly汇编
class
class type"类"类型
compiler编译器
constant常量
constructor构造函数
de-allocation内存去配
dispose清除
field域;字段
identifier标识符
invoke唤起(执行)
object-oriented面向对象
object-base面向基类
object instance对象实例
parse/parsing(语法)分析
parser(语法)分析器
parser talbe(语法)分析表
parser tree(语法)分析树
pointer指针
procedure过程
procedural过程化
reference引用
subroutine子程序
symbol符号
syntax语法
syntax tree语法树
syntax analysis语法分析
syntax analyzer语法分析器
token字元
tokenize字元化
tokenizer字元转化器
type conversion类型转换
variable变量

本书涵盖的主题

  • 硬件: 逻辑门;布尔运算;multiplexor(多路复用器);触发器(flip-flop);寄存器(register);RAM 单元;计数器;硬件描述语言(HDL,Hardware Description Language);芯片的仿真及测试.

  • 体系架构: ALU/CPU 的设计与实现;机器代码;汇编语言程序设计;取址模式;I/O 内存印象.

  • 操作系统: 内存管理;数学计算程序库;基本 I/O 驱动程序;屏幕管理;文件 I/O;对高级语言的支持

  • 程序设计语言: 基于对象(object-base)的设计和编程模式;抽象数据类型;作用域;语法和语义;引用(reference)机制.

  • 编译器: 词法分析: 自顶向下的语法分析;符号表(symbol table); 基于堆栈(stack-based)的虚拟机;代码生成: 数组和对象的实现.

  • 数据结构和算法: 堆栈;哈希表;链表;递归;算术算法;几何算法;运行效率.

  • 软件工程: 模块化设计;接口/实现范式;API 设计和文档;自动式测试;广义的程序概念设计;质量保证体系.

计算机构造层

  • 典型的软件阶层体系
    • 高层语言
    • 操作系统
    • 编译器
    • 虚拟机
    • 汇编编译器
    • 机器语言
  • 典型的硬件阶层体系
    • 机器语言
    • 计算机体系结构
    • ALU | 记忆(储存)元素
    • 布尔算数 | 时序逻辑
    • 布尔逻辑

ALU 逻辑计算单元

CHIP ALU {
    IN
        x[16], y[16],  // 16-bit inputs
        zx, // zero the x input?
        nx, // negate the x input?
        zy, // zero the y input?
        ny, // negate the y input?
        f,  // compute out = x + y (if 1) or x & y (if 0)
        no; // negate the out output?

    OUT
        out[16], // 16-bit output
        zr, // 1 if (out == 0), 0 otherwise
        ng; // 1 if (out < 0),  0 otherwise

    PARTS:
    Mux16(a=x, b=false, sel=zx, out=xx);
    Mux16(a=y, b=false, sel=zy, out=yy);

    Not16(in=xx, out=xxx);
    Mux16(a=xx, b=xxx, sel=nx, out=xxxx);
    Not16(in=yy, out=yyy);
    Mux16(a=yy, b=yyy, sel=ny, out=yyyy);

    Add16(a=xxxx, b=yyyy, out=xplusy);
    And16(a=xxxx, b=yyyy, out=xandy);
    Mux16(a=xandy, b=xplusy, sel=f, out=oo);

    Not16(in=oo, out=notoo);
    Mux16(a=oo, b=notoo, sel=no, out[15]=ng, out[0..7]=part1, out[8..15]=part2, out=out);

    Not(in=notzero, out=zr);
    Or(a=or1, b=or2, out=notzero);
    Or8Way(in=part1, out=or1);
    Or8Way(in=part2, out=or2);
}

冯诺依曼结构体系

非常建议先读一下冯诺依曼结构体系论述,这毕竟是整个计算机结构的基石啊

美籍匈牙利数学家冯·诺伊曼于 1946 年提出存储程序原理,把程序本身当作数据来对待,程序和该程序处理的数据用同样的方式储存。 冯·诺伊曼体系结构冯·诺伊曼理论的要点是:计算机的数制采用二进制;计算机应该按照程序顺序执行。人们把冯·诺伊曼的这个理论称为冯·诺伊曼体系结构。

PC 程序计数器自增指向下一个地址,把程序当做二进制数据来对待.

从 EDVAC 到当前最先进的计算机都采用的是冯·诺伊曼体系结构。所以冯·诺伊曼是当之无愧的数字计算机之父。

体系结构编辑

  1. 采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,数据和程序在内存中是没有区别的,它们都是内存中的数据,当 EIP 指针指向哪 CPU 就加载那段内存中的数据,如果是不正确的指令格式,CPU 就会发生错误中断. 在现在 CPU 的保护模式中,每个内存段都有其描述符,这个描述符记录着这个内存段的访问权限(可读,可写,可执行).这就变相的指定了哪些内存中存储的是指令哪些是数据), 指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。
  2. 存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。
  3. 指令由操作码和地址组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。
  4. 通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,一般按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
  5. 以运算器为中心,I/O 设备与存储器间的数据传送都要经过运算器。
  6. 数据以二进制表示。

Reference

冯·诺依曼体系结构-百度百科