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