x86 汇编语言/简介
汇编语言是计算机程序员工具箱中最古老的工具之一。然而如今,整个软件项目可以在不看一行汇编代码的情况下编写。因此,这就产生了这样一个问题:为什么要学习汇编语言?汇编语言是人类与计算机之间最接近的沟通形式之一。通过汇编语言,程序员可以以一种几乎可读的形式精确地跟踪程序中数据的流动和执行。一旦程序被编译,就很难(有时几乎不可能)将代码反向工程到其原始形式。因此,如果您希望检查已经编译的程序,但不想查看十六进制或二进制,则需要使用汇编语言进行检查。由于调试器通常只以汇编语言显示程序代码,因此这为学习该语言提供了众多好处之一。
汇编语言也是实现某些低级任务(如引导加载程序和低级内核组件)的首选工具,如果不是唯一的工具。用汇编语言编写的代码比用高级语言编写的代码开销更小,因此汇编代码通常比用其他语言编写的等效程序运行速度更快。此外,用高级语言编写的代码可以编译成汇编语言并进行“手动优化”,以从代码中榨取每一丝速度。随着英特尔和 AMD 等硬件制造商为其处理器添加新功能和新指令,通常情况下,访问这些功能的唯一方法是使用汇编例程。也就是说,至少在主要的编译器供应商添加对这些功能的支持之前是这样。
然而,用汇编语言开发程序可能是一个非常耗时的过程。虽然用汇编语言编写新项目可能不是一个好主意,但了解一点汇编语言无疑是有价值的。
本书将作为汇编语言的入门指南,也是一个很好的资源,适合那些已经了解汇编语言的人,但需要更多关于 x86 系统架构的信息的人。它还将描述 x86 汇编语言的一些更高级的用途。鼓励所有读者阅读(并贡献)本书,尽管事先了解编程基础知识无疑会更有益。
第一部分将讨论 x86 系列芯片,并介绍基本指令集。第二部分将解释不同汇编器语法之间的差异。第三部分将介绍一些可用的附加指令集,包括浮点、MMX 和 SSE 操作。
第四部分将介绍 x86 汇编语言中的一些高级主题,包括一些低级编程任务,例如编写引导加载程序。许多任务无法在 C 或 C++ 等高级语言中轻松实现。例如,启用和禁用中断、启用保护模式、访问控制寄存器、创建全局描述符表以及其他任务都需要在汇编语言中进行处理。第四部分还将处理将汇编语言与 C 和其他高级语言进行交互。一旦用汇编语言编写了函数(例如,启用保护模式的函数),就可以将该函数与更大的基于 C(甚至基于 C++)的内核进行交互。第五部分将讨论标准 x86 芯片组,介绍基本的 x86 计算机架构,并一般处理硬件方面的事情。
本书的当前布局旨在为读者提供尽可能多的信息,而不会过分。想要学习特定汇编器上的汇编语言的读者只需要阅读第一部分和第二部分中直接与他们的汇编器相关的章节。想要为不同算法实现 MMX 或 SSE 指令的程序员只需要阅读第三部分。想要实现引导加载程序、内核或其他低级任务的程序员可以阅读第四部分。那些真正想要深入了解 x86 硬件设计的人可以继续阅读第五部分。