Skip to content

Latest commit

 

History

History
27 lines (14 loc) · 4.23 KB

0.md

File metadata and controls

27 lines (14 loc) · 4.23 KB

零、简介

汇编语言

这本书是对 x64 汇编语言的介绍。这是几乎所有现代台式机和笔记本电脑都使用的语言。x64 是 AMD、英特尔、VIA 和其他 CPU 制造商使用的最新一代 x86 CPU 的通称。x64 汇编有陡峭的学习曲线,来自高级语言的概念很少适用。它是 x64 CPU 程序员可用的最强大的语言,但它通常不是最实用的语言。

汇编语言是中央处理器的语言,但是机器代码的数字被容易记住的助记符代替。而不是用纯十六进制编程,比如83 C4 04,程序员可以用一些更容易记忆和阅读的东西,比如ADD ESP, 4,给 ESP 加 4。人类可读的版本由一个叫做汇编程序的程序读取,然后通过一个叫做汇编的过程(类似于高级语言的编译)被翻译成机器代码。现代汇编语言是物理中央处理器和汇编程序共同作用的结果。现代汇编语言也有高级功能,如宏和用户定义的数据类型。

为什么学汇编?

很多高级语言(Java、C#、Python 等)。)有共同的特点。如果一个程序员熟悉其中的任何一个,那么他或她在几个星期的学习后会毫不费力地学会其他的。汇编语言很不一样;它与高级语言几乎没有什么共同之处。不同 CPU 架构的汇编语言往往没有什么共同点。例如,MIPS R4400 汇编语言与 x86 语言非常不同。没有复合语句。没有 if 语句,一直使用 goto 指令(JMP)。没有对象,也没有类型安全。程序员必须构建自己的循环结构,浮点和 int 没有区别。没有什么可以帮助程序员防止逻辑错误,执行指令和数据没有区别。汇编语言之间有许多不同之处。

我可以继续列举 x64 汇编语言与高级语言相比缺少的有用特性,但从某种意义上说,这意味着汇编语言的障碍更少。类型安全、预定义的调用约定以及将代码与数据分开都是限制。这些限制在程序集中不存在;唯一的限制是硬件本身施加的限制。如果机器有能力做某事,可以告诉它用自己的汇编语言来做。

一个法国人可能知道英语是他们的第二语言,他们可以被指示用英语做一项任务,但是如果任务太复杂,一些概念可能会在翻译中丢失。向法国人解释如何执行复杂任务的最好方法是用法语解释。同样,C++ 和其他高级语言也不是 CPU 的母语。计算机非常擅长用 C++ 接受指令,但是当你需要确切地解释如何做一些非常复杂的事情时,CPU 的母语是唯一的选择。

学习汇编语言的另一个重要原因是简单地理解 CPU。中央处理器与其汇编语言没有区别。这种语言被刻在中央处理器本身的硅片上。

目标受众

本书面向使用微软 Visual Studio 的开发人员。这是一个通用且非常强大的汇编语言 IDE。这本书的目标读者是对 C++ 有良好基础并且希望使用 Visual Studio IDE(专业版和快速版)对本机程序集进行编程的程序员。这些例子已经用 Visual Studio 和附带的汇编程序 ML64.exe(微软宏汇编程序 MASM 的 64 位版本)进行了测试。

掌握汇编语言编程知识也有助于程序员理解高级语言,如 Java 和 C#。这些语言被编译成虚拟机代码(Java 和 CIL 的 Java 字节码或的通用中间语言)。NET 语言)。虚拟机代码可以从。NET 可执行文件或动态链接库文件。当. NET 应用程序被另一个工具 ILAsm.exe 执行时,它会将 CIL 机器代码翻译成本机 x86 机器代码,然后由 CPU 执行。CIL 类似于一种汇编语言,对 x86 汇编的全面了解使得 CIL 的大部分代码都是可读的,尽管它们是不同的语言。这本书的重点是 C++,但这些信息同样适用于编程高级语言。

这本书是关于大多数台式机和笔记本电脑的汇编语言。几乎所有现代台式电脑都有基于 x86 架构的 64 位 CPU。传统的 32 位和 16 位处理器及其汇编语言将不会涉及任何细节。

MASM 使用英特尔语法,本书中的代码与美国电话电报公司汇编程序不兼容。大多数指令在其他流行的英特尔语法汇编器中是相同的,例如 YASM 和 NASM,但是每个汇编器的指令语法是不同的。