目 录
译者序
前言
第一部分 硬件
I.1 Hello,World之下 2
I.2 从与非门到俄罗斯方块 3
I.3 抽象与实现 4
I.4 设计方法 5
I.5 前方之路 6
第1章 布尔逻辑 7
1.1 布尔代数 7
1.1.1 布尔函数 8
1.1.2 真值表和布尔表达式 8
1.2 门 9
1.3 硬件构造 10
1.3.1 硬件描述语言 11
1.3.2 硬件模拟 13
1.4 规范 14
1.4.1 与非门 14
1.4.2 基本逻辑门 14
1.4.3 基本门的多位版本 15
1.4.4 基本门的多路版本 16
1.5 实现 17
1.5.1 行为模拟 17
1.5.2 硬件实现 18
1.5.3 内置芯片 19
1.6 实验 19
1.7 总结与讨论 20
第2章 布尔运算 21
2.1 算术运算 21
2.2 二进制数 21
2.3 二进制加法 22
2.4 有符号二进制数 23
2.5 规范 24
2.5.1 加法器 24
2.5.2 算术逻辑单元 25
2.6 实现 28
2.7 实验 29
2.8 总结与讨论 29
第3章 存储 31
3.1 存储设备 31
3.2 时序逻辑 32
3.2.1 时间很重要 32
3.2.2 触发器 34
3.2.3 组合与时序逻辑 34
3.3 规范 35
3.3.1 数据触发器 36
3.3.2 寄存器 36
3.3.3 RAM 37
3.3.4 计数器 38
3.4 实现 38
3.4.1 数据触发器 38
3.4.2 寄存器 38
3.4.3 RAM 39
3.4.4 计数器 40
3.5 实验 40
3.6 总结与讨论 41
第4章 机器语言 42
4.1 机器语言概述 42
4.1.1 硬件单元 42
4.1.2 语言 43
4.1.3 指令 44
4.2 Hack的机器语言 45
4.2.1 背景 45
4.2.2 程序示例 48
4.2.3 Hack语言规范 49
4.2.4 符号 50
4.2.5 输入/输出处理 52
4.2.6 语法约定和文件格式 52
4.3 Hack编程 53
4.4 实验 55
4.5 总结与讨论 57
第5章 计算机体系结构 58
5.1 计算机体系结构基础 58
5.1.1 存储程序的概念 58
5.1.2 冯·诺依曼体系结构 59
5.1.3 存储器 59
5.1.4 中央处理单元 60
5.1.5 输入和输出 61
5.2 Hack硬件平台规范 62
5.2.1 概述 62
5.2.2 中央处理单元 62
5.2.3 指令存储器 63
5.2.4 输入/输出 63
5.2.5 数据存储器 65
5.2.6 计算机 66
5.3 实现 66
5.3.1 中央处理单元 66
5.3.2 内存 68
5.3.3 计算机 68
5.4 实验 69
5.5 总结与讨论 70
第6章 汇编器 72
6.1 背景 72
6.2 Hack机器语言规范 73
6.2.1 程序 74
6.2.2 符号 74
6.2.3 语法约定 75
6.3 汇编到二进制的翻译 76
6.3.1 处理指令 76
6.3.2 处理符号 76
6.4 实现 77
6.4.1 实现一个基本的汇编器 77
6.4.2 完成汇编器 79
6.5 实验 79
6.6 总结与讨论 81
第二部分 软件
II.1 Jack编程初探 85
II.2 程序的编译 87
第7章 虚拟机Ⅰ:处理 89
7.1 虚拟机范式 90
7.2 栈机器 91
7.2.1 入栈和出栈 91
7.2.2 栈上的算术运算 92
7.2.3 虚拟内存段 94
7.3 虚拟机规范:第一部分 94
7.4 实现 95
7.4.1 Hack平台上的标准虚拟机
映射:第一部分 96
7.4.2 虚拟机模拟器 98
7.4.3 有关虚拟机实现的设计建议 99
7.5 实验 101
7.6 总结与讨论 102
第8章 虚拟机Ⅱ:控制 105
8.1 高级魔法 105
8.2 分支 106
8.3 函数 108
8.4 虚拟机规范:第二部分 113
8.4.1 分支命令 113
8.4.2 函数命令 113
8.4.3 虚拟机程序 113
8.5 实现 114
8.5.1 函数调用和返回 114
8.5.2 Hack平台上的标准虚拟机
映射:第二部分 115
8.5.3 有关虚拟机实现的设计建议 117
8.6 实验 118
8.7 总结与讨论 120
第9章 高级语言 122
9.1 例子 122
9.2 Jack语言规范 126
9.2.1 语法元素 126
9.2.2 程序结构 127
9.2.3 数据类型 128
9.2.4 变量 130
9.2.5 语句 130
9.2.6 表达式 130
9.2.7 子例程调用 131
9.2.8 对象的创建与清除 132
9.3 编写Jack应用程序 132
9.4 实验 133
9.5 总结与讨论 134
第10章 编译器Ⅰ:语法分析 136
10.1 背景 137
10.1.1 词法分析 137
10.1.2 语法规则 138
10.1.3 语法解析 139
10.1.4 解析器 141
10.2 规范 142
10.2.1 Jack语言的语法 143
10.2.2 Jack语言的语法分析器 144
10.3 实现 144
10.3.1 Jack分词器 145
10.3.2 编译引擎 145
10.3.3 Jack分析器 147
10.4 实验 147
10.4.1 分词器 148
10.4.2 编译引擎 149
10.5 总结与讨论 150
第11章 编译器Ⅱ:代码生成 151
11.1 代码生成 152
11.1.1 变量的编译 152
11.1.2 表达式的编译 155
11.1.3 字符串的编译 157
11.1.4 语句的编译 157
11.1.5 对象的编译 159
11.1.6 数组的编译 165
11.2 规范 166
11.3 实现 166
11.3.1 虚拟机上的标准映射 167
11.3.2 实现指南 167
11.3.3 软件架构 170
11.4 实验 172
11.4.1 实施阶段 172
11.4.2 测试程序集 173
11.5 总结与讨论 174
第12章 操作系统 176
12.1 背景 177
12.1.1 数学运算 177
12.1.2 字符串 180
12.1.3 内存管理 181
12.1.4 图形化输出 183
12.1.5 字符的输出 185
12.1.6 键盘输入 186
12.2 Jack操作系统规范 187
12.3 实现 187
12.4 实验 192
12.4.1 测试计划 192
12.4.2 完整测试 194
12.5 总结与讨论 195
第三部分 进一步讨论
第13章 探索更多乐趣 198
13.1 硬件的实现 198
13.2 硬件的改进 199
13.3 高级语言 199
13.4 优化 199
13.5 通信 199
附录
附录A 布尔函数综合 202
附录B 硬件描述语言 206
附录C 测试描述语言 217
附录D Hack芯片集合 227
附录E Hack中的字符集 228
附录F Jack操作系统的API 229
○原书并未将第13章单独列为一部分,为确保本书体系更完整、合理,将第13章列为第3部分。—编辑注
展开