万本电子书0元读

万本电子书0元读

顶部广告

编程卓越之道(卷1):深入理解计算机(第2版)电子书

媲美高德纳TAOCP的程序设计领域经典系列||100本书都没有讲明白的事情被这本书说清楚了||环环相扣说透机器原理、底层语言、高级代码和团队生产力

售       价:¥

纸质售价:¥118.50购买纸书

165人正在读 | 0人评论 6.7

作       者:(美)Randall Hyde(兰德尔海德)

出  版  社:电子工业出版社

出版时间:2022-12-01

字       数:27.6万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
卓越的代码需要利用现代编程语言的先特性来实现软件功能。但软件终都要运行在计算机上,无论它是采用哪种编程语言编写的。因此,卓越的软件代码也要充分地利用计算机中的各种资源,将计算机的性能发挥到极致。现代编程语言将这些知识隐藏了起来,容易被我们忽视。因此,《编程卓越之道》系列的卷《深理解计算机》将重放在软件执行背后的计算机底层上,深浅出地介绍了计算机体系结构的方方面面,帮助我们理解如何才能写出在计算机上高效运行的代码。本书具体内容包括:数字、字符串及复合数据结构在计算机中的表示形式,以及如何在内存层次结构中访问这些数据;基本的二制运算、位运算、布尔逻辑,以及如何设计完成运算的中央处理器指令集;输/输出、大容量存储等丰富多彩的外设,以及把这些外设和计算机相连行通信的各种总线技术。本书适合软/硬件发人员及系统程序员、移动及嵌式设备发者、体系结构设计人员,以及高校计算机相关专业师生。<br/>【推荐语】<br/>作为Randall1Hyde经典著作《编程卓越之道》系列的第1卷,《深理解计算机》深地研究了计算机结构,却不需要读者掌握汇编语言。本书是为使用高级编程语言的读者编写的,填补了他们有关计算机底层细节的知识空白。这些知识往往被计算机科学和工程课程遗漏。通过本书可以了解: ● 数字、字符串及高级数据结构在计算机中是如何表示的,这样我们就能理解使用这些数据的固有成本 ● 数据应该如何组织才能被计算机有效地访问 ● CPU是如何运行的,这样我们可以遵循计算机的运行方式来编写代码 ● I/O设备是如何运行的,这样我们就能了解应用程序访问这些设备的性能优化过程 ● 如何充分地利用内存层次结构来生成快速运行的程序 卓越的代码是高效的。但在学会编写真正高效的代码之前,我们必须了解计算机系统是如何执行程序的,也必须了解编程语言中抽象的概念和计算机的底层硬件之间是如何映射的。毕竟,好的机器码是程序员写出来的,不是编译器编译出来的。本书的内容是构建所有伟大软件的基础。<br/>【作者】<br/>Randall Hyde是The Art of Assembly Language(《汇编语言的编程艺术》)和Write Great Code(《编程卓越之道》) 1~3卷(均由No Starch Press出版),以及Using 6502 Assembly Language和P-Source(由Datamost出版)的作者。他也是Microsoft Macro Assembler 6.0 Bible(由Waite Group出版)一书的合著者。在过去的40年里,Hyde一直从事嵌式软件/硬件工程师的工作,为核反应堆、交通控制系统和其他电子设备发相关指令集。他还在加州理工大学波莫纳分校和加州大学河滨分校教授计算机科学课程。 覃宇,Thoughtworks咨询师/应用架构专家,12年软件发经验,移动应用发专家,作为架构师和技术教练专注于辅导客户团队改持续交付实践。译有《Kotlin实战》、《领域驱动设计精粹》、《Serverless架构:无服务器应用与AWS Lambda》和《云原生安全与DevOps保障》;合著有《代码管理核心技术及实践》。<br/>
目录展开

内容简介

推荐序

推荐序2

译者序

关于作者

关于技术评审

致谢

1 编写卓越代码须知

1.1 《编程卓越之道》系列

1.2 本书涵盖的主题

1.3 阅读本书的前提

1.4 卓越代码的特征

1.5 本书要求的环境

1.6 额外建议

1.7 更多信息

2 数字表示

2.1 什么是数字

2.2 计数系统

2.2.1 十进制位值计数系统

2.2.2 底数(基数)

2.2.3 二进制计数系统

2.2.4 十六进制计数系统

2.2.5 八进制计数系统

2.3 数字/字符串转换

2.4 内部数字表示形式 

2.4.1 位

2.4.2 位串

2.5 有符号和无符号数

2.6 二进制数的属性 

2.7 符号扩展、零扩展和收缩 

2.8 饱和操作

2.9 二进制编码的十进制表示

2.10 定点表示形式

2.11 比例数字格式 

2.12 有理数表示形式 

2.13 更多信息 

3 二进制算术运算和位运算

3.1 二进制和十六进制数字的算术运算

3.1.1 二进制加法 

3.1.2 二进制减法

3.1.3 二进制乘法 

3.1.4 二进制除法

3.2 位的逻辑运算 

3.3 二进制数值和位串的逻辑运算

3.4 有用的位运算 

3.4.1 使用AND运算判断位串中的一位

3.4.2 使用AND运算判断多个位为零或非零

3.4.3 比较二进制字符串中的多个位

3.4.4 使用AND运算创建模n计数器 

3.5 移位和旋转

3.6 位字段和打包数据 

3.7 数据的打包和解包 

3.8 更多信息 

4 浮点表示形式

4.1 浮点运算简介 

4.2 IEEE浮点格式 

4.2.1 单精度浮点格式 

4.2.2 双精度浮点格式

4.2.3 扩展精度浮点格式 

4.2.4 四精度浮点格式 

4.3 规约形式与非规约形式

4.4 舍入 

4.5 特殊的浮点值

4.6 浮点数异常 

4.7 浮点运算 

4.7.1 浮点表示形式

4.7.2 浮点数的加减法 

4.7.3 浮点数的乘除法 

4.8 更多信息

5 字符表示形式

5.1 字符数据 

5.11 ASCII字符集 

5.1.2 EBCDIC字符集 

5.1.3 双字节字符集 

5.1.4 Unicode字符集 

5.1.5 Unicode码位

5.1.6 Unicode编码平面 

5.1.7 代用码位

5.1.8 字形、字符和字素簇

5.1.9 Unicode规范和规范等价性 

5.1.10 Unicode编码 

5.1.11 Unicode组合字符

5.2 字符串

5.2.1 字符串格式 

5.2.2 静态字符串、伪动态字符串和动态字符串

5.2.3 字符串的引用计数 

5.2.4 Delphi字符串

5.2.5 自定义字符串格式 

5.3 字符集数据类型 

5.3.1 字符集的幂集表示形式 

5.3.2 字符集的列表表示形式 

5.4 设计自定义字符集 

5.4.1 设计高效的字符集 

5.4.2 数字字符的编码分组 

5.4.3 字母字符分组 

5.4.4 比较字母字符

5.4.5 其他字符分组

5.5 更多信息

6 内存结构和访问

6.1 基本系统组件

6.1.1 系统总线

6.2 内存的物理结构

6.2.1 8位数据总线

6.2.2 16位数据总线

6.2.3 32位数据总线

6.2.4 64位数据总线

6.2.5 非80x86处理器对小单位内存的访问

6.3 大端序与小端序结构 

6.4 系统时钟 

6.4.1 内存访问和系统时钟 

6.4.2 等待状态 

6.4.3 缓存

6.5 CPU的内存访问模式

6.5.1 直接内存寻址模式 

6.5.2 间接寻址模式 

6.5.3 变址寻址模式 

6.5.4 比例变址寻址模式 

6.6 更多信息 

7 复合数据类型与内存对象

7.1 指针类型

7.1.1 指针的实现

7.1.2 指针与动态内存分配

7.1.3 指针操作与指针运算

7.2 数组

7.2.1 数组声明

7.2.2 内存中的数组表示形式

7.2.3 访问数组元素

7.2.4 多维数组

7.3 记录/结构体

7.3.1 Pascal/Delphi记录

7.3.2 C/C++记录

7.3.3 HLA记录

7.3.4 Swift记录(元组)

7.3.5 记录的内存存储

7.4 判别联合

7.4.1 C/C++联合

7.4.2 Pascal/Delphi联合

7.4.3 Swift联合

7.4.4 HLA联合

7.4.5 联合的内存存储

7.4.6 联合的其他用途

7.5 类

7.5.1 继承

7.5.2 类构造函数

7.5.3 多态

7.5.4 抽象方法和抽象基类

7.6 C++类

7.6.1 C++中的抽象成员函数和类

7.6.2 C++的多重继承

7.7 Java类

7.8 Swift类

7.9 协议与接口

7.10 泛型和模板

7.11 更多信息

8 布尔逻辑与数字设计

8.1 布尔代数

8.1.1 布尔运算符

8.1.2 布尔假设

8.1.3 布尔运算符优先级

8.2 布尔函数与真值表

8.3 函数编号

8.4 布尔表达式的代数运算

8.5 规范形式

8.5.1 极小项和规范形式与真值表

8.5.2 使用代数方法得到极小项和规范形式

8.5.3 极大项积规范形式

8.6 布尔函数简化

8.7 这和计算机有什么关系

8.7.1 电路与布尔函数

8.7.2 组合电路

8.7.3 时序与时钟逻辑

8.8 更多信息

9 CPU体系结构

9.1 CPU设计基础

9.2 指令的解码与执行:随机逻辑与微码

9.3 指令执行详解

9.3.1 mov指令

9.3.2 add指令

9.3.3 jnz指令

9.3.4 loop指令

9.4 RISC还是CISC:通过执行更多更快的指令来提高性能

9.5 提高处理速度的关键:并行

9.5.1 功能单元

9.5.2 预取队列

9.5.3 影响预取队列性能的情况

9.5.4 同时执行多条指令的流水线

9.5.5 指令缓存:提供多条内存访问通路

9.5.6 流水线冒险

9.5.7 超标量运算:并行执行指令

9.5.8 乱序执行

9.5.9 寄存器重命名

9.5.10 甚长指令字体系结构

9.5.11 并行处理

9.5.12 多处理

9.6 更多信息

10 指令集体系结构

10.1 指令集设计的重要性

10.2 指令设计的基本目标

10.2.1 操作码的长度选择

10.2.2 规划未来

10.2.3 选择指令

10.2.4 分配指令操作码

10.3 假想处理器Y86

10.3.1 Y86的限制

10.3.2 Y86指令

10.3.3 Y86的寻址模式

10.3.4 Y86指令编码

10.3.5 Y86指令编码示例

10.3.6 扩展Y86指令集

10.4 80x86指令编码

10.4.1 指令操作码的编码

10.4.2 add指令编码的例子

10.4.3 x86的立即(常量)操作数编码

10.4.4 8位、16位和32位操作数的编码

10.4.5 64位操作数编码

10.4.6 指令的替代编码

10.5 指令集设计对程序员的意义

10.6 更多信息

11 内存体系结构与组织

11.1 内存层次结构

11.2 内存层次结构的工作原理

11.3 内存子系统的性能差距

11.4 缓存体系结构

11.4.1 直接映射缓存

11.4.2 全相联缓存

11.4.3 n路组相联缓存

11.4.4 缓存行置换策略

11.4.5 缓存写入策略

11.4.6 缓存使用与软件

11.5 NUMA与外设

11.6 虚拟内存、内存保护与分页

11.7 编写理解内存层次结构的软件

11.8 运行时的内存结构

11.8.1 静态对象与动态对象,绑定与生命期

11.8.2 代码段、只读数据段与常量段

11.8.3 静态变量段

11.8.4 存储变量段

11.8.5 栈

11.8.6 堆与动态内存分配

11.9 更多信息

12 输入与输出

12.1 连接CPU与外界

12.2 端口和系统连接的其他方式

12.3 输入/输出机制

12.3.1 内存映射输入/输出

12.3.2 I/O映射输入/输出

12.3.3 直接内存访问

12.4 输入/输出速度等级

12.5 系统总线与数据传输速率

12.5.1 PCI总线的性能

12.5.2 ISA总线的性能

12.5.3 AGP总线

12.6 缓冲

12.7 握手

12.8 I/O端口超时

12.9 中断与轮询式I/O

12.10 保护模式操作与设备驱动程序

12.10.1 设备驱动模型

12.10.2 与设备驱动程序通信

12.11 更多信息

13 计算机外设总线

13.1 小型计算机系统接口

13.1.1 限制

13.1.2 改进

13.1.3 SCSI协议

13.1.4 SCSI的优点

13.2 IDE/ATA接口

13.2.1 SATA接口

13.2.2 光纤通道

13.3 通用串行总线

13.3.1 USB设计

13.3.2 USB性能

13.3.3 USB传输的类型

13.3.4 USB-C

13.3.5 USB设备驱动程序

13.4 更多信息

14 大容量存储设备与文件系统

14.1 磁盘驱动器

14.1.1 软盘驱动器

14.1.2 硬盘驱动器

14.1.3 RAID系统

14.1.4 光驱

14.1.5 CD、DVD与蓝光驱动器

14.2 磁带驱动器

14.3 闪存

14.4 RAM盘

14.5 固态硬盘

14.6 混合硬盘

14.7 大容量存储设备上的文件系统

14.7.1 顺序文件系统

14.7.2 高效的文件分配策略

14.8 编写操作大容量存储设备数据的软件

14.8.1 文件访问的性能

14.8.2 同步与异步I/O

14.8.3 I/O类型的影响

14.8.4 内存映射文件

14.9 更多信息

15 丰富多彩的输入/输出设备

15.1 探索特定PC上的外设

15.1.1 键盘

15.1.2 标准PC并口

15.1.3 串口

15.2 鼠标、触控板及其他定点设备

15.3 操纵杆与游戏控制器

15.4 声卡

15.4.1 音频接口外设如何产生声音

15.4.2 音频与MIDI文件格式

15.4.3 音频设备编程

15.5 更多信息

后记:运用底层语言思想,编写高级语言代码

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部