📄 nasm中文文档资料.htm
字号:
<TD vAlign=center
align=top>-- 作者:航天奇侠<BR>-- 发布时间:2004-7-1
11:03:41<BR><BR>-- NASM中文文档资料<BR>
<P align=center><B>NASM中文文档资料</B></P>
<P>剑雨销香 CNIDP组织 联合制作!</P>
<P>目录详细介绍 </P>
<P>第一章:简介 </P>
<P>第二章:运行NASM </P>
<P>第三章:NASM语法介绍 </P>
<P>第四章:NASM的预处理器 </P>
<P>第五章:汇编方向性 </P>
<P>第六章:输出格式 </P>
<P>第七章:写16位代码(DOS,Windows 3/3.1) </P>
<P>第八章:写32位代码(Unix,Win32,DJGPP) </P>
<P>第九章:16位与32位混和编程 </P>
<P>第十章:问题解答 </P>
<P>---------------- Copyright (c) 2003 CNIDP 剑雨销香 all rights reserved
---------------- </P>
<P><FONT color=#ff0000>本来我们也开始翻译这个,想不到已经有人翻译好了,衷心感谢那些翻译的人!</FONT></P>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循环部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:航天奇侠<BR>-- 发布时间:2004-7-1
11:04:28<BR><BR>-- <BR>nasm网际编译器手册:<BR>此手册为NASM,网际汇编器:一个目标为Intelx86系列处理器,开放源码的编译器。<BR>第一章:简介<BR>1.1节
什么是NASM?<BR>1.1.1节 为什么用另外的编译器?<BR>1.1.2节 许可证<BR>1.2节 联络方式<BR>1.3节
安装<BR>1.3.1节 在MS_DOS或Windows下安装NASM<BR>1.3.2节
在Unix下安装NASM<BR><BR>第二章:运行NASM<BR>第2.1节
:那NASM命令行参数<BR>第2.1.1节:-o参数:指定输出文件名<BR>第2.1.2节:-f参数:指定输出文件格式<BR>第2.1.3节:-l参数:输出列表文件<BR>第2.1.4节:-E参数:输出错误信息到文件中<BR>第2.1.5节:-s参数:输出错误信息到屏幕<BR>第2.1.6节:-i参数:指定头文件路径<BR>第2.1.7节:-p参数:预编译头文件<BR>第2.1.8节:-d参数:预编译宏<BR>第2.1.9节:-u参数:取消宏定义<BR>第2.1.10节:-e参数:只预处理<BR>第2.1.11节:-a参数:根本不预处理<BR>第2.1.12节:-w参数:允许或禁止汇编警告信息<BR>第2.1.13节:NASM的环境变量<BR>第2.2节
对于MASM用户的快速入门<BR>第2.2.1节 NASM是区分大小写的<BR>第2.2.2节 NASM对内存操作需要方括号<BR>第2.2.3节
NASM不存储存变量类型<BR>第2.2.4节 NASM不用ASSUME关键字<BR>第2.2.5节 NASM不支持内存模型<BR>第2.2.6节
浮点数方面的区别<BR>第2.2.7节 其它区别 <BR>第三章<BR>第3.1节 NASM源码行号的分布<BR>第3.2节
伪指令<BR>第3.2.1节 DB及相关指令:声明初始化数据<BR>第3.2.2节 RESB及相关指令:声明未初始化数据<BR>第3.2.3节
INCBIN:包含外部二进制文件<BR>第3.2.4节 EQU:定义常量<BR>第3.2.5节 TIMES:重复指令或数据<BR>第3.3节
有效地址<BR>第3.4节 常量<BR>第3.4.1节 数字常量<BR>第3.4.2节 字符常量<BR>第3.4.3节
字符串常量<BR>第3.4.4节 浮点数常量<BR>第3.5节 表达式<BR>第3.5.1节 |:位运算符或<BR>第3.5.2节
^位运算符异或<BR>第3.5.3节 &位运算符与<BR>第3.5.4节
<<和>>:位移动操作符<BR>第3.5.5节 +和-:加和减操作符<BR>第3.5.6节
*,/,//,%和%%:乘法与除法操作<BR>第3.5.7节 一元操作符:+,-,~和SEG<BR>第3.6节 SEG和WRT<BR>第3.7节
临界资源表达式<BR>第3.8节 本地变量<BR>第4章 NASM的预处理器<BR>第4.1节 单行的宏操作<BR>第4.1.1节
正常处理方式:%define<BR>第4.1.2节 立即处理的单行宏:%xdefine<BR>第4.1.3节
未定义的宏:%undef<BR>第4.1.4节 预处理变量:%assign<BR>第4.2节 多行宏的操作 <BR>第4.2.1节
重载多行宏:%macro<BR>第4.2.2节 本地宏标识<BR>第4.2.3节 贪婪的宏参数<BR>第4.2.4节
默认宏参数<BR>第4.2.5节 %0:宏参数记数<BR>第4.2.6节 %rotate:旋转宏参数<BR>第4.2.7节
控制台的宏参数<BR>第4.2.8节 用宏参数做为条件语句<BR>第4.2.9节 禁止列表展开<BR>第4.3节 条件汇编<BR>第4.3.1节
%ifdef:测试单行宏的存在性<BR>第4.3.2节 %ifctx:测试上下相连的堆栈<BR>第4.3.3节
%if:测试任意数字表达式<BR>第4.3.4节 %ifidn和%ifidni:测试试验性文本标记<BR>第4.3.5节
%ifid,%ifnum,%ifstr:测试标记类型<BR>第4.3.6节 %error:报告用户自定义的错误<BR>第4.4节
预处理循环:%rep<BR>第4.5节 包含其它文件<BR>第4.6节 上下相关的堆栈<BR>第4.6.1节
%push和%pop:创建和移走上下环境<BR>第4.6.2节 前后相关的本地变量<BR>第4.6.3节 前后相关的单行宏<BR>第4.6.4节
%repl:重命名一个前后相关环境<BR>第4.6.5节 用前后相关堆栈的一个例子:IFs块<BR>第4.7节 标准宏<BR>第4.7.1节
_NASM_MAJOR_和_NASM_MINOR_:NASM版本信息<BR>第4.7.2节
_FLLE_和_LINE_:文件名和行号<BR>第4.7.3节 STRUC 与ENDSTRUC:定义结构数据类型<BR>第4.7.4节
ISTRUC,AT 与IEND :定义结构的变量<BR>第4.7.5节 ALIGN 和ALIGNB:数据对齐方式<BR>第5章
汇编方向性<BR>第5.1节 BITS:指定目标处理器模式<BR>第5.2节 SECTION或SEGMENT:改变和定义段<BR>第5.2.1节
_SECT_宏<BR>第5.3节 ABSOLUTE:定义绝对标号<BR>第5.4节 EXTERN:从其它模块导入符号<BR>第5.5节
GLOBAL:向其它模块输入信息<BR>第5.6节 COMMON:定义通用数据块<BR><BR>第6章 输出格式<BR>第6.1节
bin:平坦二进制输出<BR>第6.1.1节 ORG:二进制文件源码<BR>第6.1.2节 bin扩展到SECTION方向<BR>第6.2节
obj:微软的OMF目标文件格式<BR>第6.2.1节 obj扩展到SECTION方向<BR>第6.2.2节
GROUP:定义段的组信息<BR>第6.2.3节 UPPERCASE:禁止输出时大小区别<BR>第6.2.4节
IMPORT:导入DLL符号<BR>第6.2.5节 EXPORT:导出DLL符号<BR>第6.2.6节
..start:定义程序输入点位置<BR>第6.2.7节 obj 扩展到EXTERN 方向<BR>第6.2.8节
obj扩展到COMMON方向<BR>第6.3节 win32:微软Win32目标文件<BR>第6.3.1节
win32:扩展到SECTION方向<BR>第6.4节 coff:通用目标文件格式<BR>第6.5节 elf:Linux
ELF目标文件<BR>第6.5.1节 elf扩展到SECTION方向<BR>第6.5.2节
位置独立代码:elf指定符号和WRT<BR>第6.5.3节 elf扩展到GLOBAL方向<BR>第6.5.4节 elf扩展到COMMON方向
<BR>第6.6节 aout:Linux a.out目标文件<BR>第6.7节 aoutb:NetBSD/FreeBSD/OpenBSD
a.out目标文件<BR>第6.8节 as86:Linux as86 目标文件<BR>第6.9节
rdf:重定位动态目标文件格式<BR>第6.9.1节 需求库:LIBERARY方向<BR>第6.10节 dbg:Debuging
格式<BR><BR>第7章 写16位代码(DOS,Windows 3/3.1)<BR>第7.1节 生成.EXE文件<BR>第7.1.1节
用obj格式生成.exe文件<BR>第7.1.2节 用bin格式生成.exe文件<BR>第7.2节 生成.com文件<BR>第7.2.1节
用bin格式生成.com文件<BR>第7.2.2节 用obj格式生成.com文件<BR>第7.3节 生成.sys文件<BR>第7.4节
与16位C程序的接口<BR>第7.4.1节 外部符号名<BR>第7.4.2节 内存模型<BR>第7.4.3节
函数定义与函数调用<BR>第7.4.4节 数据项的访问<BR>第7.4.5节 c16.mac:16位C接口的帮助宏<BR>第7.5节 Borland
Pascal程序接口<BR>第7.5.1节 Pascal调用转换<BR>第7.5.2节 Borland Pascal段命名限制<BR>第7.5.3节
在Pascal程序中用c16.mac<BR>第8章 写32位代码(Unix,Win32,DJGPP)<BR>第8.1节
32位C语言接口<BR>第8.1.1节 外部符号名<BR>第8.1.2节 函数定义与函数调用<BR>第8.1.3节
数据项的访问<BR>第8.1.4节 c32.mac:32位C接口的帮助宏<BR>第8.2节
写NetBSD/FreeBSD/OpenBSD和Linux/ELF共享库<BR>第8.2.1节 包含GOT地址<BR>第8.2.2节
寻找程序本地数据项<BR>第8.2.3节 寻找外部和通用数据项<BR>第8.2.4节 导出符号到库用户<BR>第8.2.5节
在库外部调用过程<BR>第8.2.6节 生成库文件<BR><BR>第9章16位与32位混和编程<BR>第9.1节 混和尺寸的跳转<BR>第9.2节
不同尺寸段间的寻址<BR>第9.3节 其它的混和尺寸指令<BR><BR>第10章 问题解答<BR>第10.1节 常见问题<BR>第10.1.1节
NASM 生成无效的代码<BR>第10.1.2节 我程序中跳转出界了<BR>第10.1.3节 ORG不能工作了<BR>第10.1.4节 TIMES
不能工作了<BR>第10.2节 Bugs程序中的问题<BR>
<HR>
</TD></TR><!--printpage.asp##{$bbslist}循环部分-->
<TR>
<TD vAlign=center
align=top>-- 作者:航天奇侠<BR>-- 发布时间:2004-7-1
11:06:03<BR><BR>-- <BR>
<P><B>第1章 简介</B></P>
<P><B></B><B>1.1
什么是NASM?</B><BR>网际汇编器,NASM是一个模块化和便携性的80x86汇编编译器。它支持多种目标格式包含Linux的a.out<BR>,ELF,NetBSD/FreeBSD,COFF,Microsoft的16位OBJ和Win32。
它输出平坦模式的二进制文件。 <BR>它在语法设计上简单且容易理解,和Intel的相似但没有那么复杂。 它支持Pentium,P6和MMX操作码,
<BR>并且宏操作方面兼容。</P>
<P><BR><B>1.1.1
为什么不用其它编译器?</B><BR>网际编译器是在基于comp.lang.asm.x86(也可能是alt.lang.asm我记不清了)上的思想成长<BR>起来的。它在本质上不象周围很好的自由x86系列编译器,
并且应有人写一个。 <BR>a86是比较好的, 但并不免费,通常你不能得到任何32位兼容的除非你付费。 它只支持DOS。 <BR>gas是免费的,
并且适应于DOS和Unix, 但它不是很好用, 由于它被设计成相对于gcc的后端, <BR>所以必须给它输入一些正确的密码。
导致它的错误检查是很小。 因此, 从这方面来看待和<BR>真正写些代码来说,它的语法是很难懂的。
另外你不能用它写16位代码(正常情况下)。<BR>as86是Linux专用的, 并且有很多文档(至少对我来说)。<BR>MASM不是很好用,
它太贵了, 并且只能在DOS下运行。<BR>TASM好一些, 但仍在和MASM相兼容, 意味着将会有不计其数的指令的官文。
它的语法本质上<BR>和MASM相同。 但它也很贵。 只在DOS下运行。<BR>因此,
这里为了编码的快乐,用NASM。现在它仍然处理试验阶段-我不能保证它这些编译器好,但请向我<BR>们报告程序中的问题,修改意见及帮助信息,
和任何你现有的信息。 (感谢很多人会这样做, 你知道<BR>你也会) , 我们将不断的发展它。 </P>
<P><B>1.1.2 软件许可协议</B><BR>请查看许可协议文件,做为NASM描述档案的一部分提供,
你可以在许可协议下使用NASM。 </P>
<P><B>1.2 联系方式</B><BR>当前版本的NASM(从0.98)是由H.Peter
Anvin(hpa@zytor.com)维护的。<BR>如果你想报告任何程序问题,
请先读一下第10.2节.<BR>NASM有一个网页为:htt//www.cryogen.com/Nasm.<BR>原始作者可邮寄电子信箱:
jules@earthcorp.com
和anakin@pobox.com<BR><BR>最新版本的NASM已经上传到ftp.kernel.org,sunsite.unc.edu,ftp.simtel.net和ftp.coast.net.<BR>通告将发布在
comp.lang.asm.x86,alt.lang.asm,comp.os.linux.announce和<BR>comp.archives.msdos.announce(最后一个将自动传到ftp.simtel.net上)<BR>如果你没有新闻组可以访问,或者更喜欢用电子邮件进行交流,你可以发送一行包含<BR>subscribe
nasm-announce的内容的邮件到majordomo@linux.kernel.org.<BR>如果你想了解NASM
beta版的有关信息,请发送一封含有subscribe nasm-beta信息的电子邮件到<BR><A
href="http://www.pop417.com/bbs/mailtmajordomo@linux.kernel.org"
target=_blank>http://www.pop417.com/bbs/mailtmajordomo@linux.kernel.org</A>.</P>
<P><B>1.3安装</B></P><B>
<P><BR>1.3.1 在MS_DOS
或Windows下安装NASM<BR></B>当你得到NASM的DOS版本的文件时,nasmXXX.zip(XXX表示NASM的版本号),将它解压到当前目录下<BR>(例如:C:\\NASM)<BR>这个文件包含4个执行文件:NASM的执行文件为:nasm.exe和nasmw.exe和NDISASM的执行文件:<BR>ndisasm.exe,ndisasmw.exe.这个文件夹里文件名后有w为一个win32可执行文件,被设计在windows95<BR>或windows
NT下运行,另外的是16位的DOS执行程序。<BR>NASM文件要运行它的自运行文件,因此拷贝(至少)nasm.exe和nasmw.exe的一个到你的目录下,或<BR>选择一个编辑autoexec.bat文件将nasm的路径加到你的PATH目录上。
(如果你要节省空间可以删除它);<BR>然而,你可以保留这个文件或测试程序。<BR>如果你下载了DOS的源码文件包,
nasmXXXs.zip,nasm目录将包含完事的NASM源代码,你可以选择一个<BR>MAKEFILE(推荐)来重新编译NASM,README文件列出了这些MAKEFILE之间的不同和用什么编译程序编译<BR>的。
注意源文件:insnsa.c,insnsd.c,insnsi.h和insnsn.c是自动从Perl角本文件:<BR>主指令列表文件insns.dat生成的。
<BR>文件macros.c是通过另一个Perl角本从standard.mac生成的。<BR>虽然NASM
0.98的发布包含这些生成文件,但如果你改变了insns.dat,standard.mac或相关文档,<BR>你还是需要重新编译它。(因此你需要一个Perl解释器),也许以后的源码发布文档根本就不包含<BR>这些文件。Perl在不同平台(包含DOS和Windows)的输出变化,在<A
href="http://www.cpan.org/"
target=_blank>http://www.cpan.org/</A>可以找到。</P>
<P><B>1.3.2
在Unix下安装NASM</B><BR>一旦你得到NASM的Unix源码文件:nasm-X.XX.tar.gz(这里X.XX表示档案中包含NASM的版本号),你<BR>就可以把它解压到如:/usr/local/src的目录下,这个档案一旦解压会生成它自己的子目录:nasm-X.XX.<BR>NASM是一个自配置压缩包:你解压后,用cd命令到它解压的目录下,然后用type
./configure命令,<BR>这个shell角本将会找到最好的c编译器来编译NASM并建立相应的Makefiles文件。<BR>一旦NASM自动配置后,你就可以用命令type
make来编译nasm和ndisasm二进制文件,然后用命令install<BR>来将它们安装到/usr/loacl/bin下,将nasm.1和ndisasm.1的帮助文件安装到/usr/local/man/man1目录<BR>下。对于有选择的,你可以给出如--prefix来配置角本(关于安装的详细信息见INSTALL文件),或者安装<BR>你自己的程序。<BR>NASM也提供一些关于RDOFF自定义目标文件格式的工具,这些在NASM压缩包的rdoff子目录下,如果你想用<BR>他们的话。
<BR>如果NASM自配置失败的话,你可以用Unix的失败后退makefile文件Makefile.unx来编译它。对Makefile<BR>文件拷贝或重命名文件,
并试关重新编译。在rdoff子目录下也有一个Makefile.unx文件。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -