前言
为什么要写这本书
因为计算机编程的知识往往是分散的,我们需要对其进行归纳和总结,以构建一个完整的知识体系。同时,我希望为社会贡献一份微薄的力量。学习在很大程度上取决于个人的领悟,我期望读者通过阅读本书能够确定适合自己的学习路径。
本书非常适合那些已经接触过计算机编程、具备一定代码编写能力,但对计算机整体体系结构和底层原理了解不深的读者。本书旨在帮助他们深入了解计算机的工作机制和基本原理。本书内容涵盖 Intel 芯片的工作机制、编译器与连接器的原理,对这三个领域感兴趣的读者同样适合阅读。
本书中的大多数源代码示例都与 C 语言相关,涉及的范围包括但不限于 Linux 内核、glibc 库以及 Bison。同时,本书在介绍编译器实现的部分采用了 Java 代码。因此,读者最好具备一定的 C 语言和 Java 语言基础知识。
如何阅读这本书
本书按照计算机从硬件到软件的架构进行设计,读者可根据个人学习需求,查阅并学习各章节的内容。我将前三章归类为概念篇或抽象篇,它们主要介绍相关概念的形成过程,而这些内容并未具象化到某个产品或编程语言。首先,我们从计算机的组成讲起(包括 CPU、内存的实现),帮助读者理解硬件底层的原理。接着,我们探讨汇编语言的重要性,它是如何基于硬件层面构建的。随后,我们通过指出汇编语言的局限性,引出更易于阅读和理解的编程语言。最后,我们通过分析不同层级语言(高级语言、低级语言)之间的关系,阐述编译器的工作原理。从第 5 章开始,内容变得更加具体和实践,以 Intel 汇编语言为例,详细介绍汇编指令的设计(对操作系统的支持指令)以及特定指令(PUSH 和 MOV)的工作原理。我们使用 C 语言来展示其特性,并与前文中的语言设计概念相呼应。此外,我们还描述程序结构的完整加载和运行过程(动态链接器原理)。最后,为了加深读者的理解,我们以内存分配为例,详细讲解内存分配的整个流程。
勘误和支持
由于本人水平有限,书中难免存在错误和疏漏,恳请读者不吝赐教并指出。如果读者有任何宝贵意见和建议,欢迎您发送电子邮件到我的邮箱,期待收到您的真诚反馈。
