nasm网际编译器手册

上传人:第*** 文档编号:32691325 上传时间:2018-02-12 格式:DOC 页数:34 大小:140KB
返回 下载 相关 举报
nasm网际编译器手册_第1页
第1页 / 共34页
nasm网际编译器手册_第2页
第2页 / 共34页
nasm网际编译器手册_第3页
第3页 / 共34页
nasm网际编译器手册_第4页
第4页 / 共34页
nasm网际编译器手册_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《nasm网际编译器手册》由会员分享,可在线阅读,更多相关《nasm网际编译器手册(34页珍藏版)》请在金锄头文库上搜索。

1、1NASM 网际编译器手册第 1 章 简介 1.1 什么是 NASM? 网际汇编器,NASM 是一个模块化和便携性的 80x86 汇编编译器。它支持多种目标格式包含 Linux 的 a.out,ELF,NetBSD/FreeBSD,COFF,Microsoft 的 16 位 OBJ 和 Win32。 它输出平坦模式的二进制文件。 它在语法设计上简单且容易理解,和 Intel 的相似但没有那么复杂。 它支持 Pentium,P6 和 MMX 操作码, 并且宏操作方面兼容。 1.1.1 为什么不用其它编译器? 网际编译器是在基于 comp.lang.asm.x86(也可能是 alt.lang.as

2、m 我记不清了)上的思想成长起来的。它在本质上不象周围很好的自由 x86 系列编译器, 并且应有人写一个。 a86是比较好的, 但并不免费,通常你不能得到任何 32 位兼容的除非你付费。 它只支持DOS。 gas 是免费的, 并且适应于 DOS 和 Unix, 但它不是很好用, 由于它被设计成相对于 gcc 的后端, 所以必须给它输入一些正确的密码。 导致它的错误检查是很小。 因此,从这方面来看待和真正写些代码来说,它的语法是很难懂的。 另外你不能用它写 16 位代码(正常情况下) 。as86 是 Linux 专用的, 并且有很多文档(至少对我来说) 。MASM 不是很好用, 它太贵了, 并且

3、只能在 DOS 下运行。TASM 好一些, 但仍在和 MASM 相兼容,意味着将会有不计其数的指令的官文。 它的语法本质上和 MASM 相同。 但它也很贵。只在 DOS 下运行。因此, 这里为了编码的快乐,用 NASM。现在它仍然处理试验阶段- 我不能保证它这些编译器好,但请向我们报告程序中的问题,修改意见及帮助信息, 和任何你现有的信息。 (感谢很多人会这样做, 你知道你也会) , 我们将不断的发展它。 1.1.2 软件许可协议 请查看许可协议文件,做为 NASM 描述档案的一部分提供, 你可以在许可协议下使用 NASM。 1.2 联系方式 当前版本的 NASM(从 0.98)是由 H.Pe

4、ter Anvin()维护的。如果你想报告任何程序问题, 请先读一下第 10.2 节.NASM 有一个网页为:htt/ 和 最新版本的 NASM 已经上传到 ftp.kernel.org,sunsite.unc.edu, 和 .通告将发布在 comp.lang.asm.x86,alt.lang.asm,comp.os.linux.announce 和comp.archives.msdos.announce(最后一个将自动传到 上)如果你没有新闻组可以访问,或者更喜欢用电子邮件进行交流,你可以发送一行包含 subscribe nasm-announce 的内容的邮件到 majordomol

5、inux.kernel.org.如果你想了解 NASM beta 版的有关信息,请发送一封含有 subscribe nasm-beta 信息的电子邮件到http:/ 1.3 安装 1.3.1 在 MS_DOS 或 Windows 下安装 NASM 当你得到 NASM 的 DOS 版本的文件时,nasmXXX.zip(XXX 表示 NASM 的版本号),将它解压到当前目录下(例如: C:NASM) 2这个文件包含 4 个执行文件:NASM 的执行文件为:nasm.exe 和 nasmw.exe 和NDISASM 的执行文件: ndisasm.exe,ndisasmw.exe.这个文件夹里文件名后

6、有 w 为一个win32 可执行文件,被设计在 windows95 或 windows NT 下运行,另外的是 16 位的 DOS 执行程序。NASM 文件要运行它的自运行文件,因此拷贝(至少)nasm.exe 和 nasmw.exe 的一个到你的目录下,或选择一个编辑 autoexec.bat 文件将 nasm 的路径加到你的 PATH 目录上。 (如果你要节省空间可以删除它) ;然而,你可以保留这个文件或测试程序。如果你下载了 DOS 的源码文件包, nasmXXXs.zip,nasm 目录将包含完事的 NASM 源代码,你可以选择一个 MAKEFILE(推荐)来重新编译 NASM,REA

7、DME 文件列出了这些MAKEFILE 之间的不同和用什么编译程序编译的。 注意源文件 :insnsa.c,insnsd.c,insnsi.h 和insnsn.c 是自动从 Perl 角本文件:主指令列表文件 insns.dat 生成的。 文件 macros.c 是通过另一个 Perl 角本从 standard.mac 生成的。虽然 NASM 0.98 的发布包含这些生成文件,但如果你改变了 insns.dat,standard.mac 或相关文档,你还是需要重新编译它。 (因此你需要一个Perl 解释器),也许以后的源码发布文档根本就不包含这些文件。Perl 在不同平台(包含DOS 和 Wi

8、ndows)的输出变化,在 http:/www.cpan.org/可以找到。 1.3.2 在 Unix 下安装 NASM 一旦你得到 NASM 的 Unix 源码文件:nasm-X.XX.tar.gz(这里 X.XX 表示档案中包含NASM 的版本号) ,你就可以把它解压到如:/usr/local/src 的目录下,这个档案一旦解压会生成它自己的子目录:nasm-X.XX.NASM 是一个自配置压缩包:你解压后,用 cd 命令到它解压的目录下,然后用 type ./configure 命令,这个 shell 角本将会找到最好的 c 编译器来编译NASM 并建立相应的 Makefiles 文件。

9、一旦 NASM 自动配置后,你就可以用命令 type make来编译 nasm 和 ndisasm 二进制文件,然后用命令 install 来将它们安装到/usr/loacl/bin 下,将 nasm.1 和 ndisasm.1 的帮助文件安装到/usr/local/man/man1 目录下。对于有选择的,你可以给出如-prefix 来配置角本( 关于安装的详细信息见 INSTALL 文件),或者安装你自己的程序。NASM 也提供一些关于 RDOFF 自定义目标文件格式的工具,这些在 NASM 压缩包的rdoff 子目录下,如果你想用他们的话。 如果 NASM 自配置失败的话,你可以用 Uni

10、x 的失败后退 makefile 文件 Makefile.unx 来编译它。对 Makefile 文件拷贝或重命名文件, 并试关重新编译。在 rdoff 子目录下也有一个 Makefile.unx 文件。第二章 运行 NASM 2.1NASM 命令行参数 为了汇编一个文件,你必须用一个命令行来实现: nasm -f -o 例子: nasm -f elf myfile.asm 将文件 myfile.asm 汇编成一个 elf 目标文件 myfile.o. nasm -f bin myfile.asm -o 将文件 myfile.asm 汇编成一个二进制文件 . 为了生成一个列表文件,用参数-l

11、 来给出一个列表文件名,例如: nasm -f coff myfile.asm -l myfile.lst 为了得到更多关于 NASM 指令用法请用命令: nasm -h 3这也可以列出有效的输出文件格式,及它们是什么.如果你用 Linux,但不确信你的系统是a.out 还是 ELF,用命令 file nasm (在你安装 NASM 一进制文件的哪个目录),如果它显示如下信息: nasm:ELF 32-bit LSB executable i386 (386 and up) Version 1 哪么你的系统为 ELF,当你想生成 Linux 目标文件时应该用-f elf。如果它显示:nasm:

12、Linux/i386 demand-paged executable(QMAGIC) 或相似的一些信息,你的系统应该是a.out 的.你应该用 use -f aout 来代替(Linux a.out 系统被认为淘汰了,现在很小见)象一些Unix 编译器,NASM 是默认的除非它出错;你瘵不能看到它输出任何信息,除非它显示错误信息。 2.1.1 -o 参数 指定输出文件名 NASM 正常情况下将为你指定输出文件名;它对目标文件格式是独立的。对于微软的目标格式文件(obj 和 win32),它将从你的源文件移走 asm 扩展名( 或者你用-NASM 来忽略)并加上 obj 扩展名.对于 Unix

13、目标文件格式(aout.coff,elf 和 as86),它将为 rdf 加上.o,它将用.rdf,而对于二进制文件它只是简单的移去扩展名.所以 myfile.asm 文件将生成名为 myfile 的输出文件.如果输出文件存在,NASM 将覆盖它,除非它有相同名字的输入文件, 这种情况它将组出一个警告并用 nasm.out 来代替输出文件名。这种替换行为是不允许的,NASM 提供-o 命令行参数来允许你指定你想要的输出文件名。 你可以在-o 后边加空格或不加空格,然后在加文件名,如: nasm -f bin program.asm -o nasm -f bin driver.asm -odr

14、iver.sys 2.1.2 -f 参数:指定输出文件格式 如果你不用-f 参数指定文件格式,NASM 将为你指定一种格式。在 NASM 的发布版本中,默认的为 bin;如果你编译你自己的 NASM 拷贝,你可以在编译时重新定义 OF_DEFAULT并且选择你想默认的文件名。象 -o 参数一样,在-f 和输出文件格式之间的空格是可选的。所以-f elf 和-felf 都是有效。一个完整的输出文件格式列表可能过命令 nasm -h 来得到。 2.1.3 -l 参数:生成列表文件 如果你用 NASM 的-l 参数,后面加文件名(通常中间加),NASM 将生成一个源码列表文件。生成的代码和地址被列在

15、左边,还有真正的源码,并带有多行宏的扩展。 (除了指定在要求在源码列表不扩展:见第 4.2.9 节)在右边。例如: nasm -f elf myfile.asm -l myfile.lst 2.1.4 -E 参数:将错误信息输出到文件中 在 MS-DOS 下将程序的错误信息输入到一个文件中是比较困难(虽然这有方法) ,因此 NASM 通常将警告信息和错误信息显示在屏幕上,如果你想捕获这些信息并存入到编辑器中将是比较困难的事. NASM 因此提供了-E 参数然后加上文件名将会使错误输出到文件中而不是标准错误设备上。因此你可以通过命令 typing nasm -E myfile.err -f obj myfile.asm重新将错误信息输出到文件中。 2.1.5 -s 参数:将错误输出到标准输出上 -s 参数将错误信息重新定位到标准输出面不是标准错误上,因此它能在 MS-DOS 下运4行。为了汇编文件 myfile.asm 并且将它通过管道输出到其它程序中,你可以通命令: nasm -s -f obj myfile.asm |more 关于-E 参数的详细信息请看第 2.1.4 节 2.1.6 -i 参数:头文件设置路径 当 NASM 在源文件中查看%include 定向符号时( 详细信息见第 4.5

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号