# 0. 极简计算机结构介绍

对于以高级编程语言写代码的程序员而言，计算机硬件结构似乎完全是另一个领域的知识，从代码编写到代码执行，层层的中间环节所形成的抽象屏障，完全将底层的硬件模型隐藏了起来，似乎学习与掌握与之相关的知识变成了一项多余的事情。

然而不可见并不意味着不重要，高德纳在《计算机程序设计艺术》中说：“凡对计算机不是仅仅一时感兴趣的每个人大概或早或晚都将需要掌握至少一种机器语言”！当然对于凡人而言，即使不以“掌握”作为标准，但对于底层结构有所了解、对硬件模型有所印象也是大有裨益的。这不仅能夯实基础知识、完善理论体系，还能让我们看到如此庞大、复杂、精巧的计算机系统竟然建立在如此简单的概念之上，这本身就是一种极大的乐趣。合抱之木，生于毫末，诚如是也！

系统性讲解计算机架构的资料浩如烟海，本文是作者对自己学习笔记的一个整理，也是对相关知识进行精简、提炼的一次尝试。计算与存储是计算机系统的两个核心模块，本文尝试着从最基础的概念出发，用最少的篇幅介绍这两个模块的构造原理，以及由此而成的计算模型。文中内容主要来自于如下书籍：

* [编码：隐藏在计算机软硬件背后的语言](https://book.douban.com/subject/4822685/) \
  本书的经典程度无需赘言，应该在每个程序员的必读清单中！
* [The Elements of Computing Systems: Building a Modern Computer from First Principles](https://www.nand2tetris.org/) \
  本书简称 nand2tetris, nand 叫与非门，是最基础的逻辑门，Tetris 是俄罗斯方块，本书旨在讲解如何从 nand 开始搭建一个计算机系统，并最终在上面编写俄罗斯方块游戏。
* [Assembly Language Step By Step: Programming with Linux](https://3lib.net/book/3700817/6b970c) \
  前面章节中有关内存寻址的部分还是值得一读。

除此之外还有不少内容来自于网上的公开信息，本文保留了作者个人认为最重要、最基础的概念，如果有遗漏疏忽或者错误不当的地方，敬请斧正，不胜雀跃！

&#x20;谢谢您咧！
