--------------------------------------------------------------------------------
第一章: 简介
-----------------------
1.1 什么是NASM
NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多
的目标文件格式,包括Linux和NetBSD/FreeBSD,a.out,ELF,COFF,微软16
位的OBJ和Win32。它还可以输出纯二进制文件。它的语法设计得相当的简
洁易懂,和Intel语法相似但更简单。它支持Pentium,P6,MMX,3DNow!,
SSE and SSE2指令集,
1.1.1 为什么还需要一个汇编器?
NASM当初被设计出来的想法是comp.lang.asm.x86(或者可能是alt.lang.asm
,我忘了),从本质上讲,是因为没有一个好的免费的x86系例的汇编器可以使用,
所以,必须有人来写一个。
(*)a86不错,但不是免费的,而且你不可能得到32位代码编写的功能,除非你
付费,它只使用在dos上。
(*) gas是免费的,而且在dos下和unix下都可以使用,但是它是作为gcc的一
个后台而设计的,并不是很好,gcc一直就提供给它绝对正确的代码,所以它的
错误检测功能相当弱,还有就是对于任何一个想真正利用它写点东西的人来讲,
它的语法简直太可怕了,并且你无法在里面写正确的16位代码。
(*) as86是专门为Minix和Linux设计的,但看上去并没有很多文档可以参考。
(*) MASM不是很好,并且相当贵,还且只能运行在DOS下。
(*) TASM好一些,但却极入与MASM保持兼容,这就意味着无数的伪操作码和繁琐
的约定,并且它的语法本质上就是MASM的,伴随着的就是一些自相矛盾和奇怪的
东西。它也是相当贵的,并且只能运行在DOS下。
所以,只有NASM才能使您愉悦得编程。目前,它仍在原型设计阶段-我们不期望它
能够超越所有的这些汇编器。但请您发给我们bug报告,修正意见,和其他有用的
信息,还有其他任何你手头有的对我们有用的信息(感谢所有已经这样在做了的
人们),我们还会不断地改进它。
1.1.2 许可条件
请阅读作为NASM发布的一部分的文件Licence,只有在该许可条件下你才可以使
用NASM。
1.2 联系信息
当前版本的NASM(0.98.08)由一个开发小组在维护,你可以从nasm-devel邮件列表
中得到(看下面的链接),如果你想要报告bug,请先阅读10.2节
NASM有一个主页:http://www.web-sites.co.uk/nasm,更多的信息还可以在
`http://nasm.2y.net/上获取。
最初的作者你可以通过email:`jules@dsf.org.uk和`anakin@pobox.com和他们联
系,但后来的开发小组并不在其中。
最新的NASM发布被上传至官方网站`http://www.web-sites.co.uk/nasm和`ftp.kernel.org,
`ibiblio.org
公告被发布至`comp.lang.asm.x86, `alt.lang.asm 和`comp.os.linux.announce
如果你想了解NASM beta版的发布,和当前的开发状态,请通过在
`http://groups.yahoo.com/group/nasm-devel,
`http://www.pairlist.net/mailman/listinfo/nasm-devel and
`http://sourceforge.net/projects/nasm
注册来捐助nasm-devel邮件列表。
在网站Sourceforge上的列表是较好的一个列表,它也是最新nasm源代码与发布的
一个网站,另外的列表也是公开的,但有可能不会被继续长期支持。
1.3 安装
1.3.1 在dos和Windows下安装NASM
如果你拿到了NASM的DOS安装包,nasmXXX.zip(这里.XXX表示该安装包的NASM版
本号),把它解压到它自己的目录下(比如:‘c:\nasm)
该包中会包含有四个可执行文件:NASM可拟行文件nasm.exe和nasmw.exe,还有
NDISASM可执行文件ndisasm.exe和ndisasmw.exe。文件名以w结尾的是Win32
可执行格式。是运行在Windows 95或Windows NT的Intel处理器上的,另外的是
16位的DOS可执行文件。
NASM运行时需要的唯一文件就是它自己的可执行文件,所以可以拷贝nasm.exe
和nasmw.exe的其中一个到你自己的路径下,或者可以编写一个autoexec.bat把
nasm的路径加到你的PATH环境变量中去。(如果你只安装了Win32版本的,你可能
希望把文件名改成nasm.exe。)
就这样,NASM装好了。你不需要为了运行nasm而让nasm目录一直存在(除非你把它
加到了你的PATH中,所以如果你需要节省空间,你可删掉它,但是,你可能需要保留
文档或测试程序。
如果你下载了DOS版的源码包,nasmXXXs.zip,那nasm目录还会包含完整的NASM源
代码,你可以选择一个Makefiles来重新构造你的NASM版本。
注意源文件`insnsa.c, `insnsd.c, `insnsi.h和`insnsn.c是由standard.mac中
的指令自动生成的,尽管NASM0.98发布版中包含了这些产生的文件,你如果改动了
insns.dat,standard.mac或者文件,可能需要重新构造他们,在将来的源码发布中有
可能将不再包含这些文件,多平台兼容的Perl可以从www.cpan.org上得到。
1.3.2 在unix下安装NASM
如果你得到了Unix下的NASM源码包nasm-x.xx.tar.gz(这里x.xx表示该源码包中的
nasm的版本号),把它解压压到一个目录,比如/usr/local/src。包被解压后会创建
自己的子目录nasm-x.xx
NASM是一个自动配置的安装包:一旦你解压了它,cd到它的目录下,输入./configuer,
该脚本会找到最好的C编译器来构造NASM,并据此建立Makefiles。
一旦NASM被自动配置好后,你可以输入make来构造nasm和ndisasm二进制文件,
然后输入make install把它们安装到/usr/local/bin,并把man页安装到
/usr/local/man/man1下的nasm.1和ndisasm.1或者你可以给配置脚本一个
--prefix选项来指定安装目录,或者也可以自己来安装。
NASM还附带一套处理RDOFF目标文件格式的实用程序,它们在rdoff子目录下,
你可以用make rdf来构造它们,并使用make rdf_install来安装。如果你需
要的话。
如果NASM在自动配置的时候失败了,你还是可以使用文件Makefile.unx来编译它们,
把这个文件改名为Makefile,然后输入make。在rdoff子目录下同样有一个
Makefile.unx文件。
第二章 运行NASM
-----------------------
2.1 NASM命令行语法
要汇编一个文件,你可以以下面的格式执行一个命令:
nasm -f [-o
第一章: 简介
-----------------------
1.1 什么是NASM
NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多
的目标文件格式,包括Linux和NetBSD/FreeBSD,a.out,ELF,COFF,微软16
位的OBJ和Win32。它还可以输出纯二进制文件。它的语法设计得相当的简
洁易懂,和Intel语法相似但更简单。它支持Pentium,P6,MMX,3DNow!,
SSE and SSE2指令集,
1.1.1 为什么还需要一个汇编器?
NASM当初被设计出来的想法是comp.lang.asm.x86(或者可能是alt.lang.asm
,我忘了),从本质上讲,是因为没有一个好的免费的x86系例的汇编器可以使用,
所以,必须有人来写一个。
(*)a86不错,但不是免费的,而且你不可能得到32位代码编写的功能,除非你
付费,它只使用在dos上。
(*) gas是免费的,而且在dos下和unix下都可以使用,但是它是作为gcc的一
个后台而设计的,并不是很好,gcc一直就提供给它绝对正确的代码,所以它的
错误检测功能相当弱,还有就是对于任何一个想真正利用它写点东西的人来讲,
它的语法简直太可怕了,并且你无法在里面写正确的16位代码。
(*) as86是专门为Minix和Linux设计的,但看上去并没有很多文档可以参考。
(*) MASM不是很好,并且相当贵,还且只能运行在DOS下。
(*) TASM好一些,但却极入与MASM保持兼容,这就意味着无数的伪操作码和繁琐
的约定,并且它的语法本质上就是MASM的,伴随着的就是一些自相矛盾和奇怪的
东西。它也是相当贵的,并且只能运行在DOS下。
所以,只有NASM才能使您愉悦得编程。目前,它仍在原型设计阶段-我们不期望它
能够超越所有的这些汇编器。但请您发给我们bug报告,修正意见,和其他有用的
信息,还有其他任何你手头有的对我们有用的信息(感谢所有已经这样在做了的
人们),我们还会不断地改进它。
1.1.2 许可条件
请阅读作为NASM发布的一部分的文件Licence,只有在该许可条件下你才可以使
用NASM。
1.2 联系信息
当前版本的NASM(0.98.08)由一个开发小组在维护,你可以从nasm-devel邮件列表
中得到(看下面的链接),如果你想要报告bug,请先阅读10.2节
NASM有一个主页:http://www.web-sites.co.uk/nasm,更多的信息还可以在
`http://nasm.2y.net/上获取。
最初的作者你可以通过email:`jules@dsf.org.uk和`anakin@pobox.com和他们联
系,但后来的开发小组并不在其中。
最新的NASM发布被上传至官方网站`http://www.web-sites.co.uk/nasm和`ftp.kernel.org,
`ibiblio.org
公告被发布至`comp.lang.asm.x86, `alt.lang.asm 和`comp.os.linux.announce
如果你想了解NASM beta版的发布,和当前的开发状态,请通过在
`http://groups.yahoo.com/group/nasm-devel,
`http://www.pairlist.net/mailman/listinfo/nasm-devel and
`http://sourceforge.net/projects/nasm
注册来捐助nasm-devel邮件列表。
在网站Sourceforge上的列表是较好的一个列表,它也是最新nasm源代码与发布的
一个网站,另外的列表也是公开的,但有可能不会被继续长期支持。
1.3 安装
1.3.1 在dos和Windows下安装NASM
如果你拿到了NASM的DOS安装包,nasmXXX.zip(这里.XXX表示该安装包的NASM版
本号),把它解压到它自己的目录下(比如:‘c:\nasm)
该包中会包含有四个可执行文件:NASM可拟行文件nasm.exe和nasmw.exe,还有
NDISASM可执行文件ndisasm.exe和ndisasmw.exe。文件名以w结尾的是Win32
可执行格式。是运行在Windows 95或Windows NT的Intel处理器上的,另外的是
16位的DOS可执行文件。
NASM运行时需要的唯一文件就是它自己的可执行文件,所以可以拷贝nasm.exe
和nasmw.exe的其中一个到你自己的路径下,或者可以编写一个autoexec.bat把
nasm的路径加到你的PATH环境变量中去。(如果你只安装了Win32版本的,你可能
希望把文件名改成nasm.exe。)
就这样,NASM装好了。你不需要为了运行nasm而让nasm目录一直存在(除非你把它
加到了你的PATH中,所以如果你需要节省空间,你可删掉它,但是,你可能需要保留
文档或测试程序。
如果你下载了DOS版的源码包,nasmXXXs.zip,那nasm目录还会包含完整的NASM源
代码,你可以选择一个Makefiles来重新构造你的NASM版本。
注意源文件`insnsa.c, `insnsd.c, `insnsi.h和`insnsn.c是由standard.mac中
的指令自动生成的,尽管NASM0.98发布版中包含了这些产生的文件,你如果改动了
insns.dat,standard.mac或者文件,可能需要重新构造他们,在将来的源码发布中有
可能将不再包含这些文件,多平台兼容的Perl可以从www.cpan.org上得到。
1.3.2 在unix下安装NASM
如果你得到了Unix下的NASM源码包nasm-x.xx.tar.gz(这里x.xx表示该源码包中的
nasm的版本号),把它解压压到一个目录,比如/usr/local/src。包被解压后会创建
自己的子目录nasm-x.xx
NASM是一个自动配置的安装包:一旦你解压了它,cd到它的目录下,输入./configuer,
该脚本会找到最好的C编译器来构造NASM,并据此建立Makefiles。
一旦NASM被自动配置好后,你可以输入make来构造nasm和ndisasm二进制文件,
然后输入make install把它们安装到/usr/local/bin,并把man页安装到
/usr/local/man/man1下的nasm.1和ndisasm.1或者你可以给配置脚本一个
--prefix选项来指定安装目录,或者也可以自己来安装。
NASM还附带一套处理RDOFF目标文件格式的实用程序,它们在rdoff子目录下,
你可以用make rdf来构造它们,并使用make rdf_install来安装。如果你需
要的话。
如果NASM在自动配置的时候失败了,你还是可以使用文件Makefile.unx来编译它们,
把这个文件改名为Makefile,然后输入make。在rdoff子目录下同样有一个
Makefile.unx文件。
第二章 运行NASM
-----------------------
2.1 NASM命令行语法
要汇编一个文件,你可以以下面的格式执行一个命令:
nasm -f
Comments