购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 NASMIDE的下载和使用

NASM可以运行在不同的操作系统平台上,但这本书的讲解无法兼顾所有平台,所以只能以用户较多的Windows平台来介绍。对于其他操作系统平台,其实也都大同小异,可以自行参考相关的资料。

在Windows平台上,和你已经司空见惯的其他应用程序不同,NASM在运行之后并不会显示一个图形用户界面。相反,它只能通过命令行使用。

举例来说,假定我们编写了一个汇编语言程序。你可以使用任何文本编辑工具来写程序,比如你可以运行Windows记事本软件,在里面写这样一行程序:

写完之后,将这个文件保存在D盘的MyAsm目录下,文件的名字叫exam.asm。保存的时候,“保存类型”要选择“所有文本(*.*)”而不是默认的“文本文档(*.txt)”,不然的话就会保存成exam.asm.txt。作为惯例,汇编语言源程序文件的扩展名是“.asm”,不过,你当然可以使用其他扩展名。

一旦有了一个源程序,下一步就是将它的内容编译成机器代码。为此你需要打开一个命令行窗口。比如在Windows 10中,你需要从启动菜单中选择“Windows系统”→“命令提示符”,或者直接按Windows徽标键+R,在弹出的“运行”对话框中输入“cmd”并回车。

接着,切换到你的工作目录(汇编语言程序所在的目录)。如图1-3所示,因为我们刚才是把源文件exam.asm保存在D盘的MyAsm目录下,那么,编译这个文件的方法很简单,就是切换到这个目录,然后在命令行提示符后输入“nasm-f bin exam.asm-o exam.bin”并按下Enter键。

图1-3 在Windows命令行编译汇编语言程序

如图中所示,在编译之后我们用DIR命令查看文件,发现多一个“exam.bin”,这就是编译器生成的文件,它包含了处理器可以识别和执行的机器指令。

NASM需要一系列参数才能正常工作。

-f参数的作用是指定输出文件的格式(Format)。这样,-f bin就是要求NASM生成的文件只包含“纯二进制”的内容。换句话说,除处理器能够识别的机器代码外,别的任何东西都不包含。这样一来,因为缺少操作系统所需要的加载和重定位信息,它就很难在Windows、DOS和Linux上作为一个普通的应用程序运行。不过,这正是本书所需要的。

紧接着,exam.asm是源程序的文件名,它是将要被编译的对象。

-o参数指定编译后输出(Output)的文件名。在这里,我们要求NASM生成输出文件exam.bin。

编写汇编语言源程序,文本编辑软件的选择也是很重要的。为了方便,我写了一个文本编辑器,可以用来编写汇编语言程序。同时,这个编辑器还可以调用汇编器来编译正在编辑的汇编语言源程序。

我编写的这个程序只能在Windows上运行。它分为两个版本,一个是32位版本,名字叫Nasmide32,专为32位Windows而设计;一个是64版本,名字叫Nasmide64,专为64位Windows而设计。可以在64位的Windows上运行32位和64位版本,但32位版本只能运行在32位Windows上。这两个版本的程序就包含在与本书配套的文件包里,不过遗憾的是它们却并非是用汇编语言书写的。

软件下载之后就可以运行了。不管你运行的是Nasmide32.exe还是Nasmide64.exe,为了方便,我们以后统称为Nasmide。如图1-4所示,Nasmide的界面分为三个部分。顶端是菜单,可以用来新建文件、打开文件、保存文件或者调用NASM来编译当前文档。

图1-4 Nasmide程序的基本界面

中间最大的空白区域是编辑区,用来书写汇编语言源代码。原来的版本只能编辑一个文件,新版可以同时编辑多个文件。

窗口底部那个窄的区域是消息显示区。在编译当前文档时,不管是编译成功,还是发现了文档中的错误,都会显示在这里。

基本上,你现在已经可以在Nasmide里书写汇编语言程序了。不过,在此之前你最好先做一件事情。Nasmide只是一个文本编辑工具,它自己没有编译能力。不过不要紧,它可以在后台调用NASM来编译当前文档,前提是它必须知道NASM安装在什么地方。

为此,你需要在菜单上选择“选项”→“编译器路径名设置”来打开“选项设置”窗口。如图1-5所示,你需要指定NASM所在的路径,这个路径就是你在前面安装NASM时指定的安装路径,包括可执行文件名nasm.exe。

图1-5 为Nasmide指定NASM编译器所在路径

不同于其他汇编语言编译器,NASM最让我喜欢的一个特点是允许在源程序中只包含汇编语言指令,如图1-6所示。用过微软公司MASM的人都知道,在真正开始书写汇编语言指令前,先要穿靴戴帽,在源程序中定义很多东西,比如代码段和数据段等,弄了半天,实际上连一条指令还没开始写呢。

图1-6 NASM允许在源文件中只包含指令

如图1-4和1-6所示,用Nasmide编辑源程序时,它会自动在每行内容的左边显示行号。对于初学者来说,一开始可能会误以为行号也会出现在源程序中。不要误会,行号并非源程序的一部分,保存源程序的时候,也不会出现在文件内容中。

让Nasmide显示行号,这是一个聪明的决定。一方面,我在书中讲解源程序时,可以说第几行到第几行是做什么用的;另一方面,当编译源程序的时候,如果发现了错误,错误信息中也会说明是第几行有错。这样,因为Nasmide显示了行号,这就很容易快速找到出错的那一行。

在汇编源程序中,可以为每行添加注释。注释是对程序或者指令的解释和说明,比如说明某条指令或者某个符号的含义和作用。注释也是源程序的组成部分,但在编译的时候会被编译器忽略。如图1-4所示,为了告诉编译器注释是从哪里开始的,注释需要以半角字母的分号“;”开始。

当源程序书写完毕之后,就可以进行编译了,方法是在Nasmide中选择菜单“文件”→“编译源文件”。这时,Nasmide将会在后台调用NASM来完成整个编译过程,不需要你额外操心。如图1-6所示,即使只有3行的程序也能通过编译。编译完成后,会在窗口底部显示一条消息。 1QjWt92tx6D7KERpKZPtC7cG+moXsk9c+SaoiMPuWyxYeApX6TxDPU5sugKKa169

点击中间区域
呼出菜单
上一章
目录
下一章
×