一、why assembly?

在学习操作系统的时候,其实已经默认自己得有两个基础了:

  • 基础1:计算机组成原理
  • 基础2:汇编语言

在我看来,它们三者之间的关系可以画成下面这种格式
image.png
所以,应该从计算机组成原理学起吗?

我觉得不是,如果是搞硬件的话,那肯定得先吃透计算机组成原理。但是,如果是从C++开始,挖掘到操作系统这种自顶向下学习模式得话,我觉得先学习汇编语言是最好的选择。原因有2

  1. 汇编语言处于硬件和软件的平衡阶段,能够了解计算机的硬件也能够动手操作它,加深对计算机组成的了解。
  2. 直接上手操作系统,对底部了解太少,空中楼阁没法生存;从计算机组成原理学习,太过枯燥,可能会造成前面学后面忘。所以,可以在学习汇编语言过程中涉及到硬件的部分在计算机组成原理中自己扩展学习,挖掘硬件的具体组成。

所以,一本好的教材也必须有足够的硬件科普性但是也不失重点,下面我就放基本我觉得不错的汇编语言学习书籍。从16位开始,然后到x86和x64架构下的汇编语言。

二、书籍推荐

这里推荐的书籍建议按照推荐顺序阅读

📘 王爽《汇编语言》
💡 汇编语言 - 图2

📘 Kip Irvine《汇编语言 基于x86处理器》
💡 汇编语言 - 图3

📘 李忠《x86汇编语言 从实模式到保护模式》
💡 汇编语言 - 图4

📘 Jonathan Bartlett《深入理解程序设计使用Linux汇编语言》
💡 汇编语言 - 图5

📙 Lomont Chris《Introduction to x64 Assembly》
这个是一个手册,并不是一本书,所以不用啃它,留着翻翻就行。

📙 《英特尔64位和32位架构开发人员手册》
这个同样也是一个手册