第一部分 应用层(第7层) 2
第1章 计算机系统 2
1.1抽象层次 2
1.1.1艺术中的抽象 3
1.1.2文档中的抽象 4
1.1.3组织中的抽象 5
1.1.4机器中的抽象 6
1.1.5计算机系统中的抽象 6
1.2硬件 8
1.2.1输入设备 9
1.2.2输出设备 11
1.2.3主存储器 12
1.2.4中央处理单元 13
1.3软件 13
1.3.1操作系统 14
1.3.2软件分析和设计 15
1.4数据库系统 16
1.4.1关系 17
1.4.2查询 18
1.4.3语言结构 19
总结 20
练习 21
第二部分 高级语言层(第6层) 24
第2章 C++++ 24
2.1变量 24
2.1.1 C++++编译器 24
2.1.2机器无关性 24
2.1.3 C++++的内存模型 25
2.1.4全局变量和赋值语句 26
2.1.5局部变量 28
2.2控制流 29
2.2.1 if/else语句 29
2.2.2 switch语句 30
2.2.3 while循环 30
2.2.4 do循环 31
2.2.5数组和for循环 31
2.3函数 32
2.3.1空函数和传值调用的参数 32
2.3.2函数的例子 33
2.3.3传引用调用的参数 34
2.4递归 36
2.4.1阶乘函数 37
2.4.2递归的思考方式 39
2.4.3递归加法 40
2.4.4二项式系数函数 41
2.4.5逆转数组元素顺序 45
2.4.6汉诺塔 45
2.4.7相互递归 48
2.4.8递归的成本 48
2.5动态内存分配 49
2.5.1指针 49
2.5.2结构 50
2.5.3链式数据结构 51
总结 52
练习 53
问题 54
第三部分 指令集架构层(第3层) 58
第3章 信息的表示 58
3.1无符号二进制表示 58
3.1.1二进制存储器 58
3.1.2整数 59
3.1.3基本转换 60
3.1.4无符号整数的范围 61
3.1.5无符号加法 62
3.1.6进位位 62
3.2补码二进制表示 63
3.2.1补码的表数范围 65
3.2.2基数转换 66
3.2.3数轴 66
3.2.4溢出位 68
3.2.5负数和零位 69
3.3二进制运算 69
3.3.1逻辑运算符 69
3.3.2寄存器传送语言 70
3.3.3算术运算符 70
3.3.4循环移位运算符 72
3.4十六进制和符号表示 72
3.4.1十六进制 72
3.4.2基数转换 73
3.4.3字符 75
3.5浮点数表示 77
3.5.1二进制小数 77
3.5.2余码表示 78
3.5.3隐藏位 79
3.5.4特殊值 80
3.5.5 IEEE 754浮点数标准 83
3.6跨层的表示方法 85
3.6.1另一种表示 87
3.6.2模型 88
总结 90
练习 90
问题 95
第4章 计算机体系结构 97
4.1硬件 97
4.1.1中央处理单元 98
4.1.2主存储器 98
4.1.3输入设备 99
4.1.4输出设备 99
4.1.5数据和控制 100
4.1.6指令格式 100
4.2直接寻址 102
4.2.1停止指令 102
4.2.2装入指令 103
4.2.3存储指令 103
4.2.4加法指令 104
4.2.5减法指令 105
4.2.6与和或指令 105
4.2.7按位取反和取负指令 106
4.2.8装入字节和存储字节指令 107
4.2.9字符输入和输出指令 108
4.3冯·诺依曼机器 109
4.3.1冯·诺依曼执行周期 109
4.3.2一个字符输出程序 110
4.3.3冯·诺依曼漏洞 113
4.3.4一个字符输入程序 113
4.3.5十进制转换为ASCII 113
4.3.6一个修改自身的程序 114
4.4 ISA3层编程 115
4.4.1只读内存 117
4.4.2 Pep/8操作系统 117
4.4.3使用Pep/8系统 119
总结 119
练习 120
问题 121
第四部分 汇编层(第5层) 124
第5章 汇编语言 124
5.1汇编程序 124
5.1.1指令助记符 124
5.1.2伪操作 126
5.1.3 .ASCII和.END伪操作 126
5.1.4汇编器 127
5.1.5 .BLOCK伪操作 128
5.1.6 .WORD和.BYTE伪操作 129
5.1.7使用Pep/8汇编器 129
5.1.8交叉汇编器 130
5.2立即数寻址和陷阱指令 131
5.2.1立即数寻址 131
5.2.2 DECI、 DECO和BR指令 131
5.2.3 STRO指令 133
5.2.4解释位模式 134
5.2.5反汇编器 135
5.3符号 137
5.3.1带符号的程序 137
5.3.2一个冯·诺依曼示例 138
5.4从HOL6层翻译 139
5.4.1 cout语句 139
5.4.2变量和类型 140
5.4.3全局变量和赋值语句 141
5.4.4类型兼容 143
5.4.5 Pep/8符号跟踪器 144
5.4.6算术移位和循环移位指令 145
5.4.7常量和.EQUATE 147
5.4.8指令和数据的放置 149
总结 149
练习 150
问题 152
第6章 编译到汇编层 155
6.1栈寻址和局部变量 155
6.1.1栈相对寻址 155
6.1.2访问运行时栈 156
6.1.3局部变量 158
6.2转移指令和控制流 159
6.2.1翻译if语句 160
6.2.2优化编译器 161
6.2.3翻译if/else语句 162
6.2.4翻译while循环 163
6.2.5翻译do循环 164
6.2.6翻译for循环 165
6.2.7面条代码 166
6.2.8早期语言中的控制流 168
6.2.9结构化编程定律 169
6.2.10 goto争论 169
6.3函数调用和参数 171
6.3.1翻译函数调用 171
6.3.2用全局变量翻译传值调用参数 173
6.3.3用局部变量翻译传值调用参数 176
6.3.4翻译非空函数调用 178
6.3.5用全局变量翻译传引用调用参数 180
6.3.6用局部变量翻译传引用调用参数 183
6.3.7翻译布尔类型 186
6.4变址寻址和数组 188
6.4.1翻译全局数组 189
6.4.2翻译局部数组 191
6.4.3翻译作为参数传递的数组 193
6.4.4翻译switch语句 198
6.5动态内存分配 200
6.5.1翻译全局指针 200
6.5.2翻译局部指针 204
6.5.3翻译结构 207
6.5.4翻译链式数据结构 210
总结 214
练习 214
问题 215
第7章 语言翻译原理 222
7.1语言、语法和语法分析 222
7.1.1连接 223
7.1.2语言 223
7.1.3语法 224
7.1.4 C++++标识符的语法 225
7.1.5有符号整数的语法 226
7.1.6上下文相关的语法 227
7.1.7语法分析问题 227
7.1.8表达式的语法 228
7.1.9 C++++语法的一部分 229
7.1.10 C++++的上下文相关性 232
7.2有限状态机 233
7.2.1用FSM来分析标识符 234
7.2.2简化的有限状态机 234
7.2.3非确定性有限状态机 234
7.2.4具有空转移的状态机 235
7.2.5语言符号识别器 237
7.3实现有限状态机 239
7.3.1查找表分析器 240
7.3.2直接编码分析器 241
7.3.3输入缓冲区类 244
7.3.4多token分析器 244
7.4代码生成 249
7.4.1语言翻译器 249
7.4.2语法分析器特性 259
总结 260
练习 260
问题 262
第五部分 操作系统层(第4层) 266
第8章 进程管理 266
8.1装载器 266
8.1.1 Pep/8操作系统 266
8.1.2 Pep/8装载器 267
8.1.3程序的终止 269
8.2陷阱 269
8.2.1陷阱机制 269
8.2.2 RETTR指令 270
8.2.3陷阱处理程序 271
8.2.4陷阱寻址方式断言 273
8.2.5陷阱操作数地址计算 274
8.2.6空操作陷阱处理程序 277
8.2.7 DECI陷阱处理程序 277
8.2.8 DECO陷阱处理程序 282
8.2.9 STRO陷阱处理程序和OS向量 284
8.3并发进程 286
8.3.1异步中断 286
8.3.2操作系统中的进程 287
8.3.3多处理 288
8.3.4并发处理程序 289
8.3.5临界区 290
8.3.6第一次尝试实现互斥 291
8.3.7第二次尝试实现互斥 291
8.3.8 Peterson互斥算法 292
8.3.9信号量 293
8.3.10带信号量的临界区 295
8.4死锁 296
8.4.1资源分配图 296
8.4.2死锁策略 298
总结 298
练习 299
问题 302
第9章 存储管理 305
9.1内存分配 305
9.1.1单道程序设计 305
9.1.2固定分区多道程序设计 306
9.1.3逻辑地址 306
9.1.4可变分区多道程序设计 308
9.1.5分页 310
9.2虚拟内存 312
9.2.1大程序的行为 312
9.2.2虚拟内存 313
9.2.3按需取页 315
9.2.4替换页 315
9.2.5页替换算法 316
9.3文件管理 318
9.3.1磁盘驱动器 318
9.3.2文件抽象 319
9.3.3分配技术 319
9.4错误检测和纠错码 321
9.4.1错误检测码 321
9.4.2编码要求 322
9.4.3纠正一位错编码 324
9.5 RAID存储系统 325
9.5.1 RAID 0级:非冗余条带化 326
9.5.2 RAID 1级:镜像 326
9.5.3 RAID 01级和10级:条带化和镜像 327
9.5.4 RAID 2级:内存风格的ECC 328
9.5.5 RAID 3级:位交叉奇偶校验 329
9.5.6 RAID 4级:块交叉奇偶校验 329
9.5.7 RAID 5级:块交叉分布奇偶校验 330
总结 331
练习 331
第六部分 逻辑门层(第1层) 334
第10章 组合电路 334
10.1布尔代数和逻辑门 334
10.1.1组合电路 335
10.1.2真值表 335
10.1.3布尔代数 336
10.1.4布尔代数定理 337
10.1.5互补证明 338
10.1.6逻辑图 339
10.1.7其他表达方式 341
10.2组合分析 341
10.2.1布尔表达式和逻辑图 342
10.2.2真值表和布尔表达式 343
10.2.3两级电路 345
10.2.4无所不在的NAND 346
10.3组合设计 347
10.3.1范式 348
10.3.2三变量卡诺图 349
10.3.3四变量卡诺图 353
10.3.4对偶卡诺图 355
10.3.5无关条件 356
10.4组合设备 356
10.4.1视角 356
10.4.2复用器 358
10.4.3二进制译码器 358
10.4.4多路分配器 359
10.4.5加法器 359
10.4.6加法器/减法器 361
10.4.7算术逻辑单元 362
10.4.8 LG1层的抽象 367
总结 368
练习 368
第11章 时序电路 374
11.1锁存器和时钟触发器 374
11.1.1 SR锁存器 374
11.1.2钟控SR触发器 376
11.1.3主-从SR触发器 377
11.1.4基本触发器 380
11.1.5 JK触发器 381
11.1.6 D触发器 382
11.1.7 T触发器 383
11.1.8激励表 384
11.2时序分析和设计 384
11.2.1时序分析问题 385
11.2.2预设置和清除 387
11.2.3时序设计 387
11.2.4一个时序设计问题 388
11.3计算机子系统 390
11.3.1寄存器 390
11.3.2总线 391
11.3.3内存子系统 392
11.3.4地址译码 396
11.3.5双端口寄存器体 400
总结 401
练习 402
第七部分 微代码层(第2层) 406
第12章 计算机组成 406
12.1构造ISA3层机器 406
12.1.1中央处理单元 406
12.1.2冯·诺依曼周期 408
12.1.3实现存储字节指令 412
12.1.4实现加法指令 412
12.1.5实现装入指令 413
12.1.6实现算术右移指令 415
12.2性能问题 416
12.2.1总线宽度 417
12.2.2特殊的硬件单元 419
12.2.3 3个优化领域 421
12.2.4微代码 423
12.3 MIPS机器 425
12.3.1装入/存储体系结构 425
12.3.2指令集 427
12.3.3高速缓存 431
12.3.4 MIPS的计算机组成 437
12.3.5流水线 439
12.4结论 445
12.4.1模型简化 446
12.4.2更大的景象 446
总结 447
练习 448
附录 Pep/8体系结构 451
部分练习参考答案 457
索引 468