新書推薦:
《
人生解忧:佛学入门四十讲
》
售價:NT$
490.0
《
东野圭吾:分身(东野圭吾无法再现的双女主之作 奇绝瑰丽、残忍又温情)
》
售價:NT$
295.0
《
浪潮将至
》
售價:NT$
395.0
《
在虚无时代:与马克斯·韦伯共同思考
》
售價:NT$
260.0
《
日内交易与波段交易的资金风险管理
》
售價:NT$
390.0
《
自然信息图:一目了然的万物奇观
》
售價:NT$
640.0
《
经纬度丛书·州县之民:治乱之间的小民命运
》
售價:NT$
440.0
《
女性史:古代卷(真正意义上的女性大历史)
》
售價:NT$
560.0
|
內容簡介: |
卓越的代码需要利用现代编程语言的先进特性来实现软件功能。但软件最终都要运行在计算机上,无论它是采用哪种编程语言编写的。因此,卓越的软件代码也要充分地利用计算机中的各种资源,将计算机的性能发挥到极致。现代编程语言将这些知识隐藏了起来,容易被我们忽视。因此,《编程卓越之道》系列的第一卷《深入理解计算机》将重点放在软件执行背后的计算机底层上,深入浅出地介绍了计算机体系结构的方方面面,帮助我们理解如何才能写出在计算机上高效运行的代码。本书具体内容包括:数字、字符串及复合数据结构在计算机中的表示形式,以及如何在内存层次结构中访问这些数据;基本的二进制运算、位运算、布尔逻辑,以及如何设计完成运算的中央处理器指令集;输入/输出、大容量存储等丰富多彩的外设,以及把这些外设和计算机相连进行通信的各种总线技术。本书适合软/硬件开发人员及系统程序员、移动及嵌入式设备开发者、体系结构设计人员,以及高校计算机相关专业师生。
|
關於作者: |
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保障》;合著有《代码管理核心技术及实践》。
|
目錄:
|
1 编写卓越代码须知11.1 《编程卓越之道》系列11.2 本书涵盖的主题21.3 阅读本书的前提41.4 卓越代码的特征51.5 本书要求的环境61.6 额外建议71.7 更多信息72 数字表示82.1 什么是数字82.2 计数系统92.2.1 十进制位值计数系统102.2.2 底数(基数)112.2.3 二进制计数系统122.2.4 十六进制计数系统152.2.5 八进制计数系统172.3 数字/字符串转换182.4 内部数字表示形式202.4.1 位202.4.2 位串212.5 有符号和无符号数242.6 二进制数的属性262.7 符号扩展、零扩展和收缩272.8 饱和操作312.9 二进制编码的十进制表示322.10 定点表示形式332.11 比例数字格式352.12 有理数表示形式372.13 更多信息383 二进制算术运算和位运算393.1 二进制和十六进制数字的算术运算393.1.1 二进制加法403.1.2 二进制减法413.1.3 二进制乘法423.1.4 二进制除法433.2 位的逻辑运算453.3 二进制数值和位串的逻辑运算473.4 有用的位运算483.4.1 使用AND运算判断位串中的一位493.4.2 使用AND运算判断多个位为零或非零493.4.3 比较二进制字符串中的多个位503.4.4 使用AND运算创建模n计数器513.5 移位和旋转523.6 位字段和打包数据553.7 数据的打包和解包603.8 更多信息654 浮点表示形式664.1 浮点运算简介664.2 IEEE 浮点格式724.2.1 单精度浮点格式724.2.2 双精度浮点格式744.2.3 扩展精度浮点格式754.2.4 四精度浮点格式764.3 规约形式与非规约形式764.4 舍入774.5 特殊的浮点值794.6 浮点数异常804.7 浮点运算814.7.1 浮点表示形式824.7.2 浮点数的加减法824.7.3 浮点数的乘除法934.8 更多信息1025 字符表示形式1035.1 字符数据1035.1.1 ASCII字符集1045.1.2 EBCDIC字符集1075.1.3 双字节字符集1085.1.4 Unicode字符集1095.1.5 Unicode码位1105.1.6 Unicode编码平面1115.1.7 代用码位1115.1.8 字形、字符和字素簇1125.1.9 Unicode规范和规范等价性1155.1.10 Unicode编码1165.1.11 Unicode组合字符1185.2 字符串1205.2.1 字符串格式1205.2.2 静态字符串、伪动态字符串和动态字符串1275.2.3 字符串的引用计数1295.2.4 Delphi字符串1305.2.5 自定义字符串格式1305.3 字符集数据类型1305.3.1 字符集的幂集表示形式1315.3.2 字符集的列表表示形式1325.4 设计自定义字符集1335.4.1 设计高效的字符集1345.4.2 数字字符的编码分组1355.4.3 字母字符分组1355.4.4 比较字母字符1385.4.5 其他字符分组1405.5 更多信息1436 内存结构和访问1446.1 基本系统组件1446.1.1 系统总线1456.2 内存的物理结构1486.2.1 8位数据总线1516.2.2 16位数据总线1526.2.3 32位数据总线1556.2.4 64位数据总线1566.2.5 非80x86处理器对小单位内存的访问1566.3 大端序与小端序结构1576.4 系统时钟1636.4.1 内存访问和系统时钟1656.4.2 等待状态1666.4.3 缓存1686.5 CPU的内存访问模式1726.5.1 直接内存寻址模式1726.5.2 间接寻址模式1736.5.3 变址寻址模式1746.5.4 比例变址寻址模式1756.6 更多信息1757 复合数据类型与内存对象1767.1 指针类型1767.1.1 指针的实现1787.1.2 指针与动态内存分配1797.1.3 指针操作与指针运算1797.2 数组1847.2.1 数组声明1857.2.2 内存中的数组表示形式1887.2.3 访问数组元素1907.2.4 多维数组1907.3 记录/结构体2007.3.1 Pascal/Delphi记录2017.3.2 C/C++记录2027.3.3 HLA记录2037.3.4 Swift记录(元组)2037.3.5 记录的内存存储2047.4 判别联合2077.4.1 C/C++联合2087.4.2 Pascal/Delphi联合2087.4.3 Swift联合2097.4.4 HLA联合2117.4.5 联合的内存存储2117.4.6 联合的其他用途2137.5 类2147.5.1 继承2167.5.2 类构造函数2217.5.3 多态2247.5.4 抽象方法和抽象基类2257.6 C++类2297.6.1 C++中的抽象成员函数和类2307.6.2 C++的多重继承2317.7 Java类2337.8 Swift类2347.9 协议与接口2357.10 泛型和模板2397.11 更多信息2418 布尔逻辑与数字设计2428.1 布尔代数2438.1.1 布尔运算符2438.1.2 布尔假设2438.1.3 布尔运算符优先级2468.2 布尔函数与真值表2468.3 函数编号2488.4 布尔表达式的代数运算2508.5 规范形式2508.5.1 极小项和规范形式与真值表2528.5.2 使用代数方法得到极小项和规范形式2548.5.3 极大项积规范形式2558.6 布尔函数简化2568.7 这和计算机有什么关系2648.7.1 电路与布尔函数2658.7.2 组合电路2678.7.3 时序与时钟逻辑2748.8 更多信息2789 CPU 体系结构2809.1 CPU设计基础2809.2 指令的解码与执行:随机逻辑与微码2839.3 指令执行详解2849.3.1 mov指令2859.3.2 add指令2869.3.3 jnz指令2889.3.4 loop指令2899.4 RISC还是CISC:通过执行更多更快的指令来提高性能2909.5 提高处理速度的关键:并行2919.5.1 功能单元2949.5.2 预取队列2969.5.3 影响预取队列性能的情况2999.5.4 同时执行多条指令的流水线2999.5.5 指令缓存:提供多条内存访问通路3049.5.6 流水线冒险3069.5.7 超标量运算:并行执行指令3089.5.8 乱序执行3109.5.9 寄存器重命名3109.5.10 甚长指令字体系结构3129.5.11 并行处理3129.5.12 多处理3139.6 更多信息31510 指令集体系结构31610.1 指令集设计的重要性31710.2 指令设计的基本目标31810.2.1 操作码的长度选择32010.2.2 规划未来32210.2.3 选择指令32210.2.4 分配指令操作码32310.3 假想处理器Y8632410.3.1 Y86的限制32410.3.2 Y86指令32510.3.3 Y86的寻址模式32710.3.4 Y86指令编码32710.3.5 Y86指令编码示例33010.3.6 扩展Y86指令集33510.4 80x86 指令编码33610.4.1 指令操作码的编码33910.4.2 add指令编码的例子34610.4.3 x86的立即(常量)操作数编码35110.4.4 8位、16位和32位操作数的编码35210.4.5 64位操作数编码35310.4.6 指令的替代编码35310.5 指令集设计对程序员的意义35410.6 更多信息35411 内存体系结构与组织35511.1 内存层次结构35511.2 内存层次结构的工作原理35911.3 内存子系统的性能差距36011.4 缓存体系结构36211.4.1 直接映射缓存36411.4.2 全相联缓存36511.4.3 n路组相联缓存36511.4.4 缓存行置换策略36711.4.5 缓存写入策略36811.4.6 缓存使用与软件36911.5 NUMA与外设37011.6 虚拟内存、内存保护与分页37011.7 编写理解内存层次结构的软件37511.8 运行时的内存结构37611.8.1 静态对象与动态对象,绑定与生命期37811.8.2 代码段、只读数据段与常量段37911.8.3 静态变量段38011.8.4 存储变量段38011.8.5 栈38111.8.6 堆与动态内存分配38111.9 更多信息38812 输入与输出38912.1 连接CPU与外界38912.2 端口和系统连接的其他方式39312.3 输入/输出机制39412.3.1 内存映射输入/输出39512.3.2 I/O映射输入/输出39612.3.3 直接内存访问39612.4 输入/输出速度等级39712.5 系统总线与数据传输速率39812.5.1 PCI总线的性能40012.5.2 ISA总线的性能40112.5.3 AGP总线40112.6 缓冲40212.7 握手40312.8 I/O端口超时40412.9 中断与轮询式I/O40512.10 保护模式操作与设备驱动程序40612.10.1 设备驱动模型40712.10.2 与设备驱动程序通信40812.11 更多信息40913 计算机外设总线41013.1 小型计算机系统接口41013.1.1 限制41113.1.2 改进41213.1.3 SCSI协议41313.1.4 SCSI的优点41513.2 IDE/ATA接口41613.2.1 SATA接口41713.2.2 光纤通道41813.3 通用串行总线41813.3.1 USB设计41813.3.2 USB性能42013.3.3 USB传输的类型42113.3.4 USB-C42313.3.5 USB设备驱动程序42413.4 更多信息42514 大容量存储设备与文件系统42614.1 磁盘驱动器42614.1.1 软盘驱动器42714.1.2 硬盘驱动器42714.1.3 RAID系统43314.1.4 光驱43514.1.5 CD、DVD与蓝光驱动器43614.2 磁带驱动器43814.3 闪存43914.4 RAM盘44114.
|
|