【作者】
Randal E. Bryant   1981年于麻省理工学院获得计算机博士学位,1984年至今一直任教于卡内基-梅隆大学。现任卡内基-梅隆大学计算机科学学院院长、教授,同时还受邀任教于电子和计算机工程系。他从事本科生和研究生计算机系统方面课程的教学近40年。他和O’Hallaron教授一起在卡内基梅隆大学开设了15-213课程“计算机系统导论”,那便是本书的基础。他还是ACM院士、IEEE院士、美国国家工程院院士和美国人文与科学研究院院士。其研究成果被Intel、IBM、Fujitsu和Microsoft等主要计算机制造商使用,他还因研究获得过Semiconductor Research Corporation、ACM、IEEE颁发的多项大奖。 David R. O’Hallaron卡内基梅隆大学电子和计算机工程系教授。在弗吉尼亚大学(University of Virginia)获得计算机科学的博士学位,2007年-2010年为Intel匹兹堡实验室主任。他教授本科生和研究生的计算机系统方面的课程已有20余年,并和Bryant教授一起开设了“计算机系统导论”课程。曾获得CMU计算机学院颁发的Herbert Simon杰出教学奖。他主要从事计算机系统领域的研究,与Quake项目成员一起获得过高性能计算领域中的最高国际奖项——Gordon Bell奖。他目前的工作重点是研究自动分级(autograding)概念,即评价其他程序质量的程序。
【内容】
和第2版相比,本版内容上*的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下:
? 基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。
? 处理器体系结构修改为支持64位字和操作的设计。
? 引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。
? 扩充关于用GOT和PLT创建与位置无关代码的讨论,描述了更加强大的链接技术(比如库打桩)。
? 增加了对信号处理程序更细致的描述,包括异步信号安全的函数等。
? 采用*函数,更新了与协议无关和线程安全的网络编程。
【目录】
出版者的话
中文版序一
中文版序二
译者序
前言
关于作者
第1章 计算机系统漫游1
 1.1 信息就是位 上下文1
 1.2 程序被其他程序翻译成不同的格式3
 1.3 了解编译系统如何工作是大有益处的4
 1.4 处理器读并解释储存在内存中的指令5
  1.4.1 系统的硬件组成5
  1.4.2 运行hello程序7
 1.5 高速缓存至关重要9
 1.6 存储设备形成层次结构9
 1.7 操作系统管理硬件10
  1.7.1 进程11
  1.7.2 线程12
  1.7.3 虚拟内存12
  1.7.4 文件14
 1.8 系统之间利用网络通信14
 1.9 重要主题16
  1.9.1 Amdahl定律16
  1.9.2 并发和并行17
  1.9.3 计算机系统中抽象的重要性19
 1.10 小结20
 参考文献说明20
 练习题答案20
第一部分
程序结构和执行
 第2章 信息的表示和处理22
 2.1 信息存储24
  2.1.1 十六进制表示法25
  2.1.2 字数据大小27
  2.1.3 寻址和字节顺序29
  2.1.4 表示字符串34
  2.1.5 表示代码34
  2.1.6 布尔代数简介35
  2.1.7 C语言中的位级运算37
  2.1.8 C语言中的逻辑运算39
  2.1.9 C语言中的移位运算40
 2.2 整数表示41
  2.2.1 整型数据类型42
  2.2.2 无符号数的编码43
  2.2.3 补码编码44
  2.2.4 有符号数和无符号数之间的转换49
  2.2.5 C语言中的有符号数与无符号数52
  2.2.6 扩展一个数字的位表示54
  2.2.7 截断数字56
  2.2.8 关于有符号数与无符号数的建议58
 2.3 整数运算60
  2.3.1 无符号加法60
  2.3.2 补码加法62
  2.3.3 补码的非66
  2.3.4 无符号乘法67
  2.3.5 补码乘法67
  2.3.6 乘以常数70
  2.3.7 除以2的幂71
  2.3.8 关于整数运算的最后思考74
 2.4 浮点数75
  2.4.1 二进制小数76
  2.4.2 IEEE浮点表示78
  2.4.3 数字示例79
  2.4.4 舍入83
  2.4.5 浮点运算85
  2.4.6 C语言中的浮点数86
 2.5 小结87
 参考文献说明88
 家庭作业88
 练习题答案97
第3章 程序的机器级表示109
 3.1 历史观点110
 3.2 程序编码113
  3.2.1 机器级代码113
  3.2.2 代码示例114
  3.2.3 关于格式的注解117
 3.3 数据格式119
 3.4 访问信息119
  3.4.1 操作数指示符121
  3.4.2 数据传送指令122
  3.4.3 数据传送示例125
  3.4.4 压入和弹出栈数据127
 3.5 算术和逻辑操作128
  3.5.1 加载有效地址129
  3.5.2 一元和二元操作130
  3.5.3 移位操作131
  3.5.4 讨论131
  3.5.5 特殊的算术操作133
 3.6 控制135
  3.6.1 条件码135
  3.6.2 访问条件码136
  3.6.3 跳转指令138
  3.6.4 跳转指令的编码139
  3.6.5 用条件控制来实现条件分支…141
  3.6.6 用条件传送来实现条件分支…145
  3.6.7 循环149
  3.6.8 switch语句159
 3.7 过程164
  3.7.1 运行时栈164
  3.7.2 转移控制165
  3.7.3 数据传送168
  3.7.4 栈上的局部存储170
  3.7.5 寄存器中的局部存储空间172
  3.7.6 递归过程174
 3.8 数组分配和访问176
  3.8.1 基本原则176
  3.8.2 指针运算177
  3.8.3 嵌套的数组178
  3.8.4 定长数组179
  3.8.5 变长数组181
 3.9 异质的数据结构183
  3.9.1 结构183
  3.9.2 联合186
  3.9.3 数据对齐189
 3.10 在机器级程序中将控制与数据结合起来192
  3.10.1 理解指针192
  3.10.2 应用:使用GDB调试器193
  3.10.3 内存越界引用和缓冲区溢出194
  3.10.4 对抗缓冲区溢出攻击198
  3.10.5 支持变长栈帧201
 3.11 浮点代码204

……
返回顶部