第一部分 应用层(第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硬件 7
1.2.1中央处理单元 8
1.2.2主存储器 9
1.2.3磁盘 10
1.3软件 11
1.3.1操作系统 12
1.3.2软件分析与设计 13
1.4数字信息 14
1.4.1空间量化 14
1.4.2时间量化 16
1.4.3快速响应码 18
1.4.4图像 21
1.5数据库系统 27
1.5.1关系 27
1.5.2查询 28
1.5.3语言结构 30
本章小结 31
练习 32
第二部分 高级语言层(第6层) 36
第2章 C 36
2.1变量 36
2.1.1 C编译器 36
2.1.2机器无关性 37
2.1.3 C的内存模型 37
2.1.4全局变量和赋值语句 38
2.1.5局部变量 40
2.2控制流 42
2.2.1 if/else语句 42
2.2.2 switch语句 43
2.2.3 while循环 44
2.2.4 do循环 44
2.2.5数组和for循环 45
2.3函数 46
2.3.1空函数和传值调用的参数 46
2.3.2函数的例子 48
2.3.3传引用调用的参数 48
2.4递归 51
2.4.1阶乘函数 52
2.4.2递归的思考方式 55
2.4.3递归加法 55
2.4.4二项式系数函数 57
2.4.5逆转数组元素顺序 61
2.4.6汉诺塔 61
2.4.7相互递归 63
2.4.8递归的成本 64
2.5动态内存分配 65
2.5.1指针 65
2.5.2结构 67
2.5.3链式数据结构 68
本章小结 69
练习 70
编程题 71
第三部分 指令集架构层(第3层) 76
第3章 信息的表示 76
3.1无符号二进制表示 76
3.1.1二进制存储 76
3.1.2整数 77
3.1.3基数转换 78
3.1.4无符号整数的范围 80
3.1.5无符号加法 80
3.1.6进位位 81
3.2二进制补码表示 81
3.2.1补码的表数范围 83
3.2.2基数转换 84
3.2.3数轴 85
3.2.4溢出位 86
3.2.5负数和零位 87
3.3二进制运算 88
3.3.1逻辑运算符 88
3.3.2寄存器传送语言 89
3.3.3算术运算符 90
3.3.4循环移位运算符 91
3.4十六进制与字符表示 92
3.4.1十六进制 92
3.4.2基数转换 92
3.4.3 ASCII字符 94
3.4.4 Unicode字符 97
3.5浮点数表示 100
3.5.1二进制小数 100
3.5.2余码表示 102
3.5.3隐藏位 103
3.5.4特殊值 104
3.5.5 IEEE 754浮点数标准 108
3.6模型 109
本章小结 111
练习 111
编程题 117
第4章 计算机体系结构 120
4.1硬件 120
4.1.1中央处理单元 120
4.1.2主存储器 121
4.1.3输入/输出设备 122
4.1.4数据和控制 123
4.1.5指令格式 123
4.2直接寻址 126
4.2.1停止指令 126
4.2.2字装入指令 126
4.2.3字存储指令 127
4.2.4加法指令 128
4.2.5减法指令 128
4.2.6与和或指令 129
4.2.7按位取反和取负指令 130
4.2.8字节装入和字节存储指令 131
4.2.9输入和输出设备 132
4.2.10大端顺序和小端顺序 133
4.3冯·诺依曼机器 134
4.3.1冯·诺依曼执行周期 134
4.3.2一个字符输出程序 135
4.3.3冯·诺依曼漏洞 138
4.3.4一个字符输入程序 139
4.3.5十进制转换为ASCII 139
4.3.6一个自我修改程序 140
4.4 ISA3层的编程 142
4.4.1只读存储器 143
4.4.2 Pep/9操作系统 144
4.4.3使用Pep/9系统 145
本章小结 146
练习 146
编程题 148
第四部分 汇编层(第5层) 150
第5章 汇编语言 150
5.1汇编程序 150
5.1.1指令助记符 150
5.1.2伪操作 152
5.1.3 .ASCII和.END伪操作 153
5.1.4汇编器 154
5.1.5 .BLOCK伪操作 155
5.1.6 .WORD和.BYTE伪操作 155
5.1.7使用Pep/9汇编器 156
5.1.8交叉汇编器 157
5.2立即数寻址和陷阱指令 158
5.2.1立即数寻址 158
5.2.2 DECI、 DECO和BR指令 159
5.2.3 STRO指令 161
5.2.4解释位模式:HEXO指令 162
5.2.5反汇编器 163
5.3符号 165
5.3.1带符号的程序 165
5.3.2一个冯☆诺依曼示例 166
5.4从HOL6层翻译 168
5.4.1 Printf()函数 169
5.4.2变量和类型 170
5.4.3全局变量和赋值语句 171
5.4.4类型兼容 174
5.4.5 Pep/9符号跟踪器 175
5.4.6算术移位和循环移位指令 175
5.4.7常量和.EQUATE 176
5.4.8指令与数据的放置 178
本章小结 179
练习 180
编程题 182
第6章 编译到汇编层 185
6.1栈寻址和局部变量 185
6.1.1栈相对寻址 185
6.1.2访问运行时栈 186
6.1.3局部变量 188
6.2分支指令和控制流 190
6.2.1翻译if语句 191
6.2.2优化编译器 192
6.2.3翻译if/else语句 192
6.2.4翻译while循环 194
6.2.5翻译do循环 195
6.2.6翻译for循环 197
6.2.7面条代码 198
6.2.8早期语言的控制流 199
6.2.9结构化编程定律 200
6.2.10 goto争论 200
6.3函数调用和参数 201
6.3.1翻译函数调用 201
6.3.2用全局变量翻译传值调用参数 204
6.3.3用局部变量翻译传值调用参数 207
6.3.4翻译非空函数调用 209
6.3.5用全局变量翻译传引用调用参数 211
6.3.6用局部变量翻译传引用调用参数 215
6.3.7翻译布尔类型 218
6.4变址寻址和数组 220
6.4.1翻译全局数组 221
6.4.2翻译局部数组 224
6.4.3翻译作为参数传递的数组 226
6.4.4翻译switch语句 230
6.5动态内存分配 235
6.5.1翻译全局指针 235
6.5.2翻译局部指针 240
6.5.3翻译结构 243
6.5.4翻译链式数据结构 246
本章小结 250
练习 251
编程题 251
第7章 语言翻译原理 259
7.1语言、语法和语法分析 259
7.1.1连接 260
7.1.2语言 260
7.1.3语法 261
7.1.4 C标识符的语法 262
7.1.5有符号整数的语法 263
7.1.6上下文相关的语法 264
7.1.7语法分析问题 264
7.1.8表达式的语法 265
7.1.9 C语法的一部分 266
7.1.10 C的上下文相关性 269
7.2有限状态机 270
7.2.1用有限状态机分析标识符 270
7.2.2简化的有限状态机 271
7.2.3非确定性有限状态机 271
7.2.4具有空转换的状态机 272
7.2.5多语言符号识别器 274
7.2.6语法与有限状态机 276
7.3实现有限状态机 277
7.3.1编译过程 278
7.3.2查找表分析器 278
7.3.3直接编码分析器 280
7.3.4输入缓冲区类 282
7.3.5多语言符号分析器 283
7.4代码生成 288
7.4.1语言翻译器 288
7.4.2语法分析器特性 302
本章小结 303
练习 303
编程题 306
第五部分 操作系统(第4层) 312
第8章 进程管理 312
8.1装载器 312
8.1.1 Pep/9操作系统 312
8.1.2 Pep/9装载器 314
8.1.3程序的终止 315
8.2陷阱 315
8.2.1陷阱机制 316
8.2.2 RETTR指令 317
8.2.3陷阱处理程序 317
8.2.4陷阱寻址方式断言 319
8.2.5陷阱操作数地址计算 320
8.2.6空操作陷阱处理程序 323
8.2.7 DECI陷阱处理程序 324
8.2.8 DECO陷阱处理程序 329
8.2.9 HEXO和STRO陷阱处理程序和操作系统向量 332
8.3并发进程 334
8.3.1异步中断 334
8.3.2操作系统中的进程 335
8.3.3多处理 336
8.3.4并发处理程序 337
8.3.5临界区 338
8.3.6第一次尝试实现互斥 339
8.3.7第二次尝试实现互斥 339
8.3.8 Peterson互斥算法 340
8.3.9信号量 342
8.3.10带信号量的临界区 343
8.4死锁 343
8.4.1资源分配图 344
8.4.2死锁策略 345
本章小结 346
练习 346
编程题 351
第9章 存储管理 353
9.1内存分配 353
9.1.1单道程序设计 353
9.1.2固定分区多道程序设计 354
9.1.3逻辑地址 355
9.1.4可变分区多道程序设计 356
9.1.5分页 359
9.2虚拟内存 361
9.2.1大程序的行为 361
9.2.2虚拟内存 361
9.2.3按需分页 362
9.2.4替换页 363
9.2.5页替换算法 363
9.3文件管理 365
9.3.1磁盘驱动器 365
9.3.2文件抽象 366
9.3.3分配技术 367
9.4错误检测与纠错码 369
9.4.1错误检测码 369
9.4.2编码要求 370
9.4.3纠正一位错误编码 372
9.5 RAID存储系统 373
9.5.1 RAID 0级:无冗余条带化 374
9.5.2 RAID 1级:镜像 374
9.5.3 RAID 01和10级:条带化和镜像 375
9.5.4 RAID 2级:内存风格的ECC 376
9.5.5 RAID 3级:位交叉奇偶校验 377
9.5.6 RAID 4级:块交叉奇偶校验 377
9.5.7 RAID 5级:块交叉分布奇偶校验 378
本章小结 379
练习 379
第六部分 逻辑门(第1层) 384
第10章 组合电路 384
10.1布尔代数和逻辑门 384
10.1.1组合电路 385
10.1.2真值表 385
10.1.3布尔代数 386
10.1.4布尔代数定理 387
10.1.5互补证明 388
10.1.6逻辑图 389
10.1.7其他表示方式 391
10.2组合分析 392
10.2.1布尔表达式和逻辑图 392
10.2.2真值表和布尔表达式 393
10.2.3两级电路 395
10.2.4无处不在的NAND 397
10.3组合设计 398
10.3.1范式 398
10.3.2三变量卡诺图 399
10.3.3四变量卡诺图 403
10.3.4对偶卡诺图 406
10.3.5无关条件 406
10.4组合设备 407
10.4.1视角 407
10.4.2复用器 408
10.4.3二进制译码器 409
10.4.4多路分配器 410
10.4.5加法器 410
10.4.6加法器/减法器 412
10.4.7算术逻辑单元 413
10.4.8 LG1层的抽象 419
本章小结 420
练习 420
第11章 时序电路 426
11.1锁存器与时钟触发器 426
11.1.1 SR锁存器 426
11.1.2钟控SR触发器 428
11.1.3主从SR触发器 429
11.1.4基本触发器 433
11.1.5 JK触发器 434
11.1.6 D触发器 435
11.1.7 T触发器 436
11.1.8激励表 437
11.2时序分析与设计 437
11.2.1时序分析问题 438
11.2.2预设置与清除 441
11.2.3时序设计 441
11.2.4一个时序设计问题 441
11.3计算机子系统 444
11.3.1寄存器 444
11.3.2总线 445
11.3.3内存子系统 446
11.3.4地址译码 449
11.3.5双端口寄存器组 453
本章小结 455
练习 455
第七部分 微代码(第2层) 460
第12章 计算机组成 460
12.1构建一个ISA3层机器 460
12.1.1 CPU数据区 460
12.1.2冯·诺依曼周期 463
12.1.3存储字节直接寻址指令 467
12.1.4总线协议 468
12.1.5存储字直接寻址指令 468
12.1.6加法立即数寻址指令 469
12.1.7装入字间接寻址指令 470
12.1.8算术右移指令 473
12.1.9 CPU控制区 474
12.2性能 476
12.2.1数据总线宽度和内存对齐 476
12.2.2内存对齐 480
12.2.3 n位计算机的定义 483
12.2.4高速缓存 484
12.2.5系统性能公式 490
12.2.6 RISC与CISC 491
12.3 MIPS机器 494
12.3.1寄存器组 494
12.3.2寻址方式 495
12.3.3指令集 498
12.3.4 MIPS的计算机组成 501
12.3.5流水线 505
12.4结论 512
12.4.1模型简化 512
12.4.2全局架构 513
本章小结 514
练习 514
编程题 517
附录Pep/9体系结构 519
部分练习参考答案 529
索引 543