新書推薦:

《
为自己跳舞,就会有人加入(资深关系治疗师的主动单身疗法,先疗愈,再谈爱)
》
售價:HK$
65.8

《
中华人民共和国传染病防治法新旧对照与重点解读
》
售價:HK$
25.3

《
胡适研究长短录(著名历史学家杨天石三十载研究心血,二十篇佳作集成)
》
售價:HK$
74.8

《
经纬度系列丛书·大萧条:1929—1939
》
售價:HK$
85.8

《
大学之理念
》
售價:HK$
52.8

《
好望角系列丛书·重新发现美国:原住民与美国历史的解构(上下册)
》
售價:HK$
261.8

《
无辜的共犯
》
售價:HK$
52.8

《
万千心理·动机式访谈实务应用
》
售價:HK$
85.8
|
編輯推薦: |
在技术迭代加速的当下,《计算之道 卷Ⅰ:计算机组成与高级语言》为读者打开理解计算机底层逻辑与高级语言运作的窗口。书中从冯?诺依曼架构、e进制等基础出发,拆解逻辑门、CPU等硬件组件,解析计算机数据处理的核心原理;同时深入汇编语言、编译原理与C语言等内容,阐述高级语言从设计到执行的全流程。
无论是想夯实专业基础的学生,还是期望提升编程能力的开发者,都能在书中找到价值。它将晦涩的理论融入实际案例,用深入浅出的方式,为读者搭建起从硬件到软件的知识桥梁,助力掌握计算技术的核心精髓。
|
內容簡介: |
本书是一本深入探讨计算机科学与技术的图书,旨在帮助读者更好地理解计算机内部的工作原理,并探索从内存到线程等核心知识。本书适用于对计算机科学和底层技术感兴趣的读者,无论是学习计算机基础知识还是进一步扩展技术视野,都能从本书中获益良多。在这本书中,作者以清晰、易懂的语言详细介绍计算机内存的结构和工作原理。读者将了解内存的层次结构、存储器管理、缓存和内存映射等关键概念,从而更好地理解计算机是如何存储和访问数据的。此外,本书还深入讨论了线程和并发编程。读者将学习多线程编程的基本概念和技术,并了解线程同步、互斥锁、信号量等并发控制机制。通过实例和案例研究,读者将能够编写高效、可靠的多线程应用程序。无论您是学生、工程师还是对计算机科学与技术感兴趣的读者,本书都将成为您不可或缺的参考资料。
|
關於作者: |
黄俊
专注于研究Java语言
专注于研究Hotspot
专注于研究Linux内核
专注于研究C语言与汇编
专注于研究架构设计
专注于研究多线程并发处理
专注于研究高效学习方式
曾就职于美团、阿里
前新东方业务架构师
张仲文
资深技术专家,拥有九年互联网项目开发经验。自Java编程入门,深入探索操作系统原理与计算机科学精髓,深入阅读Linux源码,对计算机底层原理有着深厚的研究。致力于解构和探索计算机之道。
|
目錄:
|
第 1 章 计算机的组成 1
1.1 一颗计算机种子 1
1.2 百花齐放 2
1.2.1 冯·诺依曼架构 3
1.2.2 哈佛架构 4
1.3 e 进制 5
1.3.1 进制 5
1.3.2 二进制 6
1.3.3 三进制 6
1.3.4 e 进制 7
1.3.5 其他进制 8
1.4 逻辑门与运算单元 10
1.4.1 NMOS 与 PMOS 10
1.4.2 非门(NOT) 10
1.4.3 与门(AND) 11
1.4.4 与非门(NAND) 11
1.4.5 或门(OR) 11
1.4.6 解复用器(de-multiplexer,DEMUX) 12
1.4.7 复用器(multiplexer,MUX) 13
1.4.8 异或门(XOR) 14
1.4.9 多位组合电路 15
1.4.10 半加器(Half Adder) 17
1.4.11 全加器(Full Adder) 18
1.4.12 十六位负数判断(IsNeg) 18
1.4.13 十六位加法器(Adder16) 18
1.4.14 算术逻辑单元(ALU) 19
1.5 D 触发器与存储单元 20
1.5.1 RS 触发器 20
1.5.2 D 触发器 21
1.5.3 bit——一位存储器 22
1.5.4 十六位寄存器 22
1.5.5 高位寄存器内存组合 23
1.5.6 小结 24
1.6 振荡器与计时器 25
1.7 CPU 的组成 26
1.7.1 PC 计数器 26
1.7.2 寄存器 27
1.7.3 功能定义 27
1.7.4 CPU 实现 30
1.8 计算机的组成 32
1.8.1 内存 32
1.8.2 其他设备 33
1.8.3 计算机实现 34
1.9 网络服务的组成 35
1.9.1 单体网络服务 35
1.9.2 分布式服务 36
1.10 小结 37
第 2 章 汇编语言 39
2.1 指令集体系结构(ISA) 39
2.2 CISC 40
2.3 RISC 40
2.4 Intel 指令集 41
2.4.1 指令前缀 42
2.4.2 操作码 43
2.4.3 ModR/M与SIB 44
2.4.4 位移与立即数 45
2.5 通用汇编指令 45
2.5.1 MOV、ADD、SUB 45
2.5.2 MLU、DIV、SHL、SHR 45
2.5.3 PUSH、POP 46
2.5.4 JMP、JXX 47
2.6 汇编的内存结构 47
2.6.1 位宽 47
2.6.2 步长 47
2.7 汇编 器 48
2.7.1 简单汇编 48
2.7.2 汇编器 49
2.8 小结 54
第 3 章 如何设计一门语言 55
3.1 语言的目标 55
3.2 类型系统 55
3.3 抽象操作 56
3.3.1 汇编拓展 56
3.3.2 寄存器拓展 57
3.4 内存抽象 57
3.4.1 数组 58
3.4.2 结构体 58
3.5 进程内存结构 58
3.5.1 堆 59
3.5.2 栈 59
3.5.3 数据段 60
3.5.4 代码段 60
3.5.5 应用程序二进制接口 61
3.6 小结 61
第 4 章 编译器 63
4.1 编译原理 63
4.1.1 词法分析 64
4.1.2 语法分析 76
4.1.3 语义分析 115
4.2 GCC 编译器源码 131
4.3 其他编译器 152
4.4 小结 152
第 5 章 Intel 与汇编 154
5.1 Intel 历史 154
5.2 Intel 编码语法 156
5.3 基础寄存器 157
5.3.1 通用寄存器 157
5.3.2 段寄存器 159
5.3.3 状态寄存器 161
5.3.4 指令指针寄存器 161
5.4 Intel 内存分段 163
5.5 Intel 内存分页 168
5.6 保护模式 170
5.6.1 数据段的访问与检查 172
5.6.2 代码段的访问与检查 173
5.6.3 调用门 176
5.6.4 中断与异常 179
5.6.5 任务管理 187
5.7 其他 190
5.7.1 多核处理器 190
5.7.2 APIC 192
5.8 Intel 指令原理 193
5.8.1 PUSH 指令 193
5.8.2 MOV 指令 194
5.8.3 ADD、MUL、DIV、SUB 指令 195
5.8.4 LIDT/LGDT 196
5.9 小结 197
第 6 章 C 语言 198
6.1 C 标准历史(维基百科) 198
6.1.1 基于 B 语言的第一个 C 版本 199
6.1.2 结构体和 UNIX 内核重写 199
6.1.3 K&R C 199
6.1.4 ANSI C 和 ISO C 200
6.1.5 C99 201
6.1.6 C11 202
6.1.7 小结 202
6.2 宏定义 202
6.3 变量与常量 203
6.4 函数 206
6.5 数组与指针 209
6.6 结构体 214
6.6.1 位操作 216
6.6.2 其他 218
6.6.3 返回值 219
6.7 可变数组 222
6.8 其他特性 224
6.8.1 浮点型运算 224
6.8.2 联合体和枚举 225
6.8.3 标准库 227
6.8.4 extern/volatile 227
6.8.5 内联汇编 228
6.9 C 语言的编译 230
6.10 GAS 232
6.11 小结 234
第 7 章 ELF 与链接器 236
7.1 ELF 236
7.1.1 ELF 头结构 238
7.1.2 节的结构 239
7.1.3 字符串表 240
7.1.4 符号表 241
7.1.5 重定位表 242
7.1.6 程序加载 245
7.1.7 程序头结构 246
7.1.8 程序解释器 248
7.1.9 小结 257
7.2 动态链接器 257
7.2.1 Bash 执行流程 258
7.2.2 fork()原理 260
7.2.3 execve()原理 265
7.2.4 glibc 动态链接原理 281
7.3 库打桩 318
7.4 内存分配 319
7.4.1 glibc 320
7.4.2 内核 338
7.4.3 内核信号机制 360
7.5 小结 368
|
內容試閱:
|
为什么要写这本书
因为计算机编程的知识往往是分散的,我们需要对其进行归纳和总结,以构建一个完整的知识体系。同时,我希望为社会贡献一份微薄的力量。学习在很大程度上取决于个人的领悟,我期望读者通过阅读本书能够确定适合自己的学习路径。
本书非常适合那些已经接触过计算机编程、具备一定代码编写能力,但对计算机整体体系结构和底层原理了解不深的读者。本书旨在帮助他们深入了解计算机的工作机制和基本原理。本书内容涵盖 Intel 芯片的工作机制、编译器与连接器的原理,对这三个领域感兴趣的读者同样适合阅读。
本书中的大多数源代码示例都与 C 语言相关,涉及的范围包括但不限于 Linux 内核、glibc 库以及 Bison。同时,本书在介绍编译器实现的部分采用了 Java 代码。因此,读者最好具备一定的 C 语言和 Java 语言基础知识。
如何阅读这本书
本书按照计算机从硬件到软件的架构进行设计,读者可根据个人学习需求,查阅并学习各章节的内容。我将前三章归类为概念篇或抽象篇,它们主要介绍相关概念的形成过程,而这些内容并未具象化到某个产品或编程语言。首先,我们从计算机的组成讲起(包括 CPU、内存的实现),帮助读者理解硬件底层的原理。接着,我们探讨汇编语言的重要性,它是如何基于硬件层面构建的。随后,我们通过指出汇编语言的局限性,引出更易于阅读和理解的编程语言。最后,我们通过分析不同层级语言(高级语言、低级语言)之间的关系,阐述编译器的工作原理。从第 5 章开始,内容变得更加具体和实践,以 Intel 汇编语言为例,详细介绍汇编指令的设计(对操作系统的支持指令)以及特定指令(PUSH 和 MOV)的工作原理。我们使用 C 语言来展示其特性,并与前文中的语言设计概念相呼应。此外,我们还描述程序结构的完整加载和运行过程(动态链接器原理)。最后,为了加深读者的理解,我们以内存分配为例,详细讲解内存分配的整个流程。
勘误和支持
由于本人水平有限,书中难免存在错误和疏漏,恳请读者不吝赐教并指出。如果读者有任何宝贵意见和建议,欢迎您发送电子邮件到我的邮箱,期待收到您的真诚反馈。
|
|