TAG:
//============================[转贴请保留该信息]========================== // Nasm Document // Version: 0.98.08 // // Translator : codez // Finished Date : 2002-11-8 // // Email: jay_zephyr2002@yahoo.com.cn // Home :www.xlrj.com/codez // // NOTE: // ps - Translator Comment // //============================[转贴请保留该信息]=========================== 第一章: 简介 1.1 什么是 Nasm? Nasm (Netwide Assembler) 是一款以轻便化和模块化为目标,以 80x86 平台为基础的编译器。 它支持非常广泛的目标程序格式,其中包括 Linux 和 NetBSD/FreeBSD 操作系统的 a.out,ELF, COFF(ps: 看来 COFF 不是微软自创的?)格式,以及 Microsoft 的 16bit obj 文件和 Win32 格式。 当然,他也可以输出无格式的二进制文件(ps: 比如 com 文件啦)。其语法格式设计的通俗易懂,与 Intel 规定的很相似但却没有那么复杂。它与 Pentium, P6, MMX, 3DNow!, SSE 和 SSE2 的语句及其宏兼容。 1.1.1 为什么还需要另外的编译器? 制作 Nasm 的想法源于 comp.lang.asm.x86(或者可能是 alt.lang.asm - 我忘记了), 而根本 原因则是因为在我看来,我们周围并没有一个比较好的免费的 x86 系列的编译器,所以,需要一些 人来写一个。 * a86 是一个好的编译器,但是它并不是免费的,除非你购买它,否则你根本不能得到任何 的 32 bit 兼容代码。只有 dos 的。 * gas 是一个能够用于 Dos 和 Unix 的免费软件,但是它并不是很好,由于作为 gcc 的 后端出现,所以,他认为所有输入的代码都是正确的(ps: feed it correct code).因此,它的错 误检查是最小化的。而且它的语法是非常糟糕的,它几乎把任何人的任何输入都作为正确的结果。另外, 你不能通过它写出合适的 16 bit 的代码。 * as86 是专门为 Minix 和 Linux 定制的,并且(至少是我使用的最后一个版本)很难(或者 根本不能)找到相关的文档。 * Masm 并不是很好,可它却是非常的昂贵,而且它只能产生 dos 下的代码(ps: 应该说是 Microsoft 自己的操作系统的代码). * Tasm 是一款非常好的编译器,但是它努力与 masm 兼容(ps: 我不觉的这个是缺点,而且 它有自己的特点,并不是十分的兼容,应该说 Tasm 的语法几乎包容了 masm 但是又超越了 masm), 这样,它可以拥有很多的官方文章了。他的语法与拥有矛盾的、怪异的限定权的 masm 相一致(尽管它 选出了一些 Ideal 模式)。另外,它也非常的昂贵,并且只支持 dos(ps: 我想作者用的应该是比较 旧的版本)。 所以,为了能够使你愉快的编程,试试 Nasm. 现在的 Nasm 仍然处于原型模式下 - 我们并不承诺它 会比其它的编译器做得更好。但是,请你,请你一定将错误报告, 修复信息, 有帮助的相关信息以及一 切你能得到的和传递给我们的信息(感谢很多已经这么做了的朋友们!你们知道你们是谁)发送给我们, 我们将改进所有尚未被我们发现的问题。 1.1.2 相关协议 请看附带的 Licence 文件, 你可以在协议允许的条件下,获取 nasm 所发布的相关文档和使用 Nasm. 1.2 联系信息 Nasm 当前版本(V0.98.08)由开发者小组通过 nasm-devel 邮件列表维护(联系方式见下面)。如果你想 报告错误,请先阅读 section 10.2。 Nasm 的主页是 http://www.web-sites.co.uk/nasm, 或者使用另外一个带有附加信息的站点 http://nasm.2y.net/ 原创作者的邮箱: 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 版本的发放信息,以及当前的开发情况,请加入 nasm-devel 邮件列表。 你可以到以下网址注册: http://groups.yahoo.com/group/nasm-devel http://www.pairlist.net/mailman/listinfo/nasm-devel http://sourceforge.net/projects/nasm 首选列表为 sourceforge.net ,它是 nasm 最新的源码提交和发行的主页(但是现在好像连不上去)。 其它的开放邮件列表可能不会长期支持。 1.3 安装 1.3.1 在 MS-Dos 或者 Windows 下安装 nasm 当你获取了 Dos 版本的 nasm 的压缩文档 nasmXXX.zip(XXX 表示压缩包中的 nasm 版本),将它 释放到 nasm 目录(eg. C:\\Nasm) 压缩包中包含四个可执行文件: Nasm.exe, nasmw.exe, ndisasm.exe 和 ndisamw.exe. 其中文 件名以 w 结尾的可执行文件表示 win32 可执行文件,用来运行于 win95 or winnt Intel 平台, 另外一个是 16bit 的 dos 可执行文件。 nasm 是一个单独的可执行文件,所以你可以拷贝(至少一个) nasm.exe 和 nasmw.exe 到你的 PATH 所指向的目录下,或者在 AUTOEXEC.BAT 中添加 NASM 的目录路径(如果你只使用 windows 版本,你 可能愿意把 nasmw.exe 更名为 nasm.exe). 这就是 nasm 的安装,你不需要在 nasm 的目录中运行 nasm(除非你没有添加到你的路径中),你可以 删除它,如果你想节省你的硬盘空间;但是,你可能会希望保留相关文档和测试程序。 如果你下载了 dos 版本的源代码,那么 nasmXXX.zip 则会包含全部的 nasm 的源代码,然后你可以 选择 makefiles 文件,重新创建你的 nasm 拷贝。 注意: 源文件 insnsa.c, insnsd.c, insnsi.c, insnsn.c 将会由 perl 脚本通过主指令表格 (Master Instruction Table)文件 insns.dat 自动创建;文件 macros.c 将通过 standard.mac 文件由另外一个 perl 脚本自动创建。尽管 nasm v0.98 包含这些文件,如果你要修改 insns.dat, standard.mac 和相关文档,你仍然需要重新创建它们(所以,你至少应该拥有一个 perl 的解释器)。 将来的源文件可能不会在包含着部分内容。Perl 能够运行于广泛的平台,其中也包括 dos 和 windows, 如果想获取相管信息,可以察看网站http://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(ps: cd 是 Unix 的命令)进入你所创建的 nasm 目录,输入 ./configure. 外壳脚本(Shell Script)将会自动搜索最佳的 c 编译器进行创建工作。 当 nasm 自动配置完毕,你可以键入 make 用来建立 nasm 和 ndisasm 二进制文件,然后 make install 将它们安装到 /usr/local/bin 目录下并安装 man 帮助 nasm.1 和 ndisasm.1 到 man 的主目录 /usr/local/man/man.1. 另外,你也可以在配置时使用 --prefix 参数(更多,请察看 INSTALL),从而自 己手动安装。 Nasm 也提供了一组管理 RDOFF 自定义目标文件格式(ps: Custom object-file format),他被安装到 nasm 目录下的 rdoff 子目录中。如果愿意,你可以使用 make rdf 创建它并使用 make rdf_install 安装它。 如果 nasm 自动创建失败,你可以通过 Makefile.unx 文件来直接编译它。拷贝或者重命名该文件为 makefile 并尝试 make 它。rdoff 子目录中也同样包含一个 Makefile.unx 文件。 //======================================================================== THE END. (codez) |