译者序
前言
作者简介
第1章 计算机抽象及相关技术 1
1.1 引言 1
1.1.1 计算应用的分类及其特性 2
1.1.2 欢迎来到后PC时代 3
1.1.3 你能从本书学到什么 4
1.2 计算机体系结构的7个伟大思想 6
1.2.1 使用抽象简化设计 6
1.2.2 加速大概率事件 6
1.2.3 通过并行提高性能 6
1.2.4 通过流水线提高性能 6
1.2.5 通过预测提高性能 7
1.2.6 存储层次 7
1.2.7 通过冗余提高可靠性 7
1.3 程序表象之下 8
1.4 机箱之内的硬件 10
1.4.1 显示器 11
1.4.2 触摸屏 12
1.4.3 打开机箱 13
1.4.4 数据安全 15
1.4.5 与其他计算机通信 16
1.5 处理器和存储器制造技术 17
1.6 性能 20
1.6.1 性能的定义 21
1.6.2 性能的度量 23
1.6.3 CPU性能及其因素 24
1.6.4 指令的性能 25
1.6.5 经典的CPU性能公式 26
1.7 功耗墙 28
1.8 沧海巨变:从单处理器向多处理器转变 30
1.9 实例:Intel Core i7基准 32
1.9.1 SPEC CPU基准测试程序 32
1.9.2 SPEC功耗基准测试程序 34
1.10 加速:使用Python语言编写矩阵乘法程序 35
1.11 谬误与陷阱 36
1.12 本章小结 38
1.13 历史观点和拓展阅读 39
1.14 自学 39
1.15 练习题 42
第2章 指令:计算机的语言 46
2.1 引言 46
2.2 计算机硬件的操作 48
2.3 计算机硬件的操作数 50
2.3.1 存储器操作数 51
2.3.2 常数或立即数操作数 53
2.4 有符号数和无符号数 54
2.5 计算机中指令的表示 59
2.6 逻辑操作 65
2.7 决策指令 67
2.7.1 循环 68
2.7.2 case/switch语句 70
2.8 计算机硬件对过程的支持 71
2.8.1 使用更多寄存器 72
2.8.2 嵌套过程 74
2.8.3 在栈中为新数据分配空间 76
2.8.4 在堆中为新数据分配空间 76
2.9 人机交互 78
2.10 MIPS中32位立即数和地址的寻址 82
2.10.1 32位立即数 83
2.10.2 分支和跳转中的寻址 83
2.10.3 MIPS寻址模式总结 85
2.10.4 机器语言解码 87
2.11 并行与指令:同步 89
2.12 翻译并执行程序 91
2.12.1 编译器 91
2.12.2 汇编器 91
2.12.3 链接器 93
2.12.4 加载器 95
2.12.5 动态链接库 95
2.12.6 启动一个Java程序 97
2.13 综合实例:C排序程序 98
2.13.1 swap过程 98
2.13.2 sort过程 100
2.14 数组与指针 104
2.14.1 用数组实现clear 104
2.14.2 用指针实现clear 106
2.14.3 比较两个版本的clear 106
2.15 高级内容:编译C语言和解释Java语言 107
2.16 实例:ARMv7(32位)指令集 107
2.16.1 寻址模式 108
2.16.2 比较和条件分支 108
2.16.3 ARM的特色 109
2.17 实例:ARMv8(64位)指令集 111
2.18 实例:RISC-V指令集 112
2.19 实例:x86指令集 112
2.19.1 Intel x86的演进 112
2.19.2 x86寄存器和数据寻址模式 114
2.19.3 x86整数操作 115
2.19.4 x86指令编码 117
2.19.5 x86总结 119
2.20 加速:使用C语言编写矩阵乘法程序 119
2.21 谬误与陷阱 120
2.22 本章小结 122
2.23 历史观点和拓展阅读 124
2.24 自学 124
2.25 练习题 126
第3章 计算机的算术运算 132
3.1 引言 132
3.2 加法和减法 132
3.3 乘法 136
3.3.1 顺序的乘法算法和硬件 137
3.3.2 有符号乘法 139
3.3.3 更快速的乘法 139
3.3.4 MIPS中的乘法 140
3.3.5 小结 140
3.4 除法 140
3.4.1 除法算法和硬件 141
3.4.2 有符号除法 143
3.4.3 更快速的除法 144
3.4.4 MIPS中的除法 144
3.4.5 小结 145
3.5 浮点运算 146
3.5.1 浮点表示 147
3.5.2 浮点加法 151
3.5.3 浮点乘法 154
3.5.4 MIPS中的浮点指令 156
3.5.5 算术精确性 161
3.5.6 小结 163
3.6 并行性和计算机算术:子字并行 164
3.7 实例:x86中的流处理SIMD扩展和高级向量扩展 166
3.8 加速:子字并行和矩阵乘法 167
3.9 谬误与陷阱 168
3.10 本章小结 171
3.11 历史观点和拓展阅读 174
3.12 自学 174
3.13 练习题 176
第4章 处理器 181
4.1 引言 181
4.1.1 一个基本的MIPS实现 182
4.1.2 实现方式概述 182
4.2 逻辑设计的一般方法 184
4.3 建立数据通路 187
4.4 一个简单的实现机制 193
4.4.1 ALU控制 193
4.4.2 主控制单元的设计 195
4.4.3 为什么不使用单周期实现方式 201
4.5 多周期实现 202
4.6 流水线概述 203
4.6.1 面向流水线的指令集设计 206
4.6.2 流水线冒险 207
4.6.3 小结 212
4.7 流水线数据通路与控制 213
4.7.1 图形化表示的流水线 221
4.7.2 流水线控制 224
4.8 数据冒险:旁路与阻塞 227
4.9 控制冒险 237
4.9.1 假定分支不发生 238
4.9.2 缩短分支的延迟 238
4.9.3 动态分支预测 241
4.9.4 小结 244
4.10 异常 245
4.10.1 MIPS体系结构中的异常处理 245
4.10.2 流水线实现中的异常 246
4.11 指令级并行 249
4.11.1 推测