《汇编程序设计与计算机体系结构:软件工程师教程》 —3 汇编语言及其语法的基础知识
第 3 章
Assembly Programming and Computer Architecture for Software Engineers
汇编语言及其语法的基础知识
目标
了解各种汇编语法之间的区别
了解汇编代码的各个段落并知晓其用途
用正确的语法来定义数据
创建能够运行的汇编程序
网络资源
https://sourceware.org/binutils/docs/as/(GAS 参考资料)
https://msdn.microsoft.com/en-us/library/afzk3475.aspx(MASM 参考资料)
http://www.nasm.us/doc/nasmdoc0.html(NASM 参考资料)
3.1 简介
这一章讲解 x86 及 x86_64 汇编语言。由于软件工程师通常会根据所要解决的问题来换用不同的操作系统,因此,本章与后续各章会同时采用三种较为流行的汇编器来进行讲解,也就是 GAS、MASM 与 NASM。这样写出来的范例能够运行在 Mac、Windows 与 Linux 这三种常见的操作系统上,使你可以通过与这些系统分别对应的三种开发环境(也就是 Apple Xcode、Microsoft Visual Studio,以及 Linux 系统的命令行界面)来学习汇编语言。
笔者会仔细地标出各种汇编器在语法上的区别。如果同一个意思必须按照三种不同的方式撰写才能分别适用于这三种汇编器,那么笔者就会以表格的形式对比这三种写法,并在表头标明各种写法所针对的汇编器。有的时候,笔者所举的范例代码只是为了解释某个概念,而不是打算讨论三种汇编器在语法上的区别,这些范例代码不会以表格的形式印出,而且也不会说明它针对的是哪一种汇编器。表 3-1 列出了各种汇编器所采用的汇编语法。
表 3-1 各种汇编器所遵循的语法规则
提示:Xcode 并没有使用标准的 GNU Assembler(GAS),而是以 Clang 为前端,以 LLVM 为后端,自己整合了一种汇编器。这种 Clang/LLVM 汇编器与标准的 GAS 之间稍有区别,不过,由于 Clang 的目标是成为 GNU toolchain(GNU 工具链)的替代品,因此,在 Xcode 中写的汇编代码同样可以用当前版本的 GAS 来编译(笔者撰写本书时,GAS 的版本是 2.27)。请不要使用 macOS 自带的 GAS 版本(笔者撰写本书时,
版本是 1.38)。这本书里的代码都已经用 macOS 系统中的 Xcode 测试过了,而且也能够在 Linux 系统中用 2.x 版本的 GAS 来编译,也就是说,它同时兼容 macOS 及 Linux 系统。为了保持一致,笔者把这两种情况下所用的汇编器统称为 GAS。
读完这一章,你就能熟悉 x86 与 x86_64 汇编的基本结构及语法了。第 4 章及后续各章都要求你必须先很好地理解这一章所讲的基础汇编语法。
- 点赞
- 收藏
- 关注作者
评论(0)