NASM的下载和安装
每种处理器都可能会有自己的汇编语言编译器,而对于同一款处理器来说,针对不同的平台(比如Windows和Linux),也会有不同版本的汇编语言编译器。
现存的汇编语言编译器有多种,用得比较多的有 MASM、FASM、TASM、AS86、GASM等,每种汇编器都有自己的特色和局限性。特别是,有些还需要付费才能使用。不同于前面所列举的这些,在本书中,我们用的是另一款叫做NASM的汇编语言编译器。
NASM 的全称是 NetwideAssembler,它是可免费使用的开源软件。下面是它的下载地址:
https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D
通过以上地址可以找到所有平台上的 NASM 版本,比如为 16位和32位 DOS、LINUX、OS/2等操作系统开发的版本。因为本书的读者一般在 Windows 平台上工作,所以应当使用下面的链接来直接定位到 Windows 平台上的NASM版本:
https://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/
通过以上链接,可以显示所有 Widows 平台上的 NASM 版本,应当选择最新版本下载。这本书出版的时候,最新的NASM 版本是2.07。
代码的书写和编译过程
和你已经司空见惯的其他 Windows 应用程序不同,NASM 在运行之后并不会显示一个图形用户界面。相反地,它只能通过命令行使用。
比如,我们可以用 Windows 记事本编写一个汇编语言源程序,并把它保存到NASM 工作目录下(就是在前面安装NASM 所用的安文)文名为 exam.asm为例,汇编语言源程序文件的扩展名是“.asm”,不过,你当然可以使用其他扩展名。
一旦有了一个源程序,下一步就是将它的内容编译成机器代码。为此,可以从 Windows 开始菜单里找到“Netwide Assembler xxx”,其中的“xxx”取决于你安装的NASM 版本。然后,选择其下的“Nasm Shell”,这将打开一个命令行窗口。
接着,在命令行提示符后输入“nasm -f bin exam.asm -o exam.bin”并按 Enter 键。
NASM 需要一系列参数才能正常工作。-f 参数的作用是指定输出文件的格式(Frmat)。这样,-f bin 就是要求 NASM 生成的文件只包含“纯二进制”的内容。换句话说,除了处理器能够识别的机器代码外,别的任何东西都不包含。这样一来,因为缺少操作系统所需要的加载和重定位信息,它就很难在 Windows、DOS 和 Liux 上作为一个普通的应用程序运行。不过,这正是本书所需要的。
紧接着,exam.asm 是源程序的文件名,它是将要被编译的对象。
-0 参数指定编译后输出 (Output)的文件名。在这里,我们要求 NASM 生成输出文件
exam.bin。
不同于其他汇编语言编译器,NASM 最让我喜欢的一个特点是允许在源程序中只包含指令。用过微软公司 MASM 的人都知道,在真正开始书写汇编指前,先要穿靴戴帽,在源程序中定义很多东西,比如代码段和数据段等,弄了半天,实际上连一条指令还没开始写呢。
在汇编源程序中,可以为每一行添加注释。注释的作用是说明某条指令或者某个符号的含义和作用。注释也是源程序的组成部分,但在编译的时候会被编译器忽略。为了诉编译器注释是从哪里开始的,注释需要以英文字母的分号“,”开始。