NASM语法

要汇编一个文件,你能够如下面的格式执行一个命令:测试

nasm -f <format> <filename> [-o <output>]优化

好比, 会把文件'myfile.asm'汇编成'ELF'格式 的文件'myfile.o'.还有:this

nasm -f bin myfile.asm -o myfile.com操作系统

会把文件'myfile.asm'汇编成纯二进制格式的文件'myfile.com'。命令行

想要以十六进制代码的形式产生列表文件输出,并让代码显示在源代码的左侧, 使用'-l'选项并给出列表文件名,好比:设计

nasm -f coff myfile.asm -l myfile.lst调试

想要获取更多的关于NASM 的使用信息,请输入:orm

nasm -hthree

它同时还会输出可使用的输出文件格式,游戏

若是你使用Linux 而且不清楚你的系统是'a.out'仍是'ELF',请输入:

file nasm

(在nasm 二进制文件的安装目录下使用),若是系统输出相似下面的信息:

nasm: ELF 32-bit LSB executable i386 (386 and up) Version 1

那么你的系统就是'ELF'格式的,而后你就应该在产生Linux 目标文件时使用选 项'-f elf',若是系统输入相似下面的信息:

nasm: Linux/i386 demand-paged executable (QMAGIC)

或者与此类似的,你的系统是'a.out'的,那你应该使用'-f aout'(Linux 的'a.out'

系统好久之前就过期了,如今已很是少见。)

就像其余的Unix 编译器与汇编器,NASM 在碰到错误之前是不输出任何信息的,所 以除了出错信息你看不到任何其余信息。

    2.1.1 '-o'选项:指定输出文件的文件名。

NASM 会为你的输出文件选择一个文件名;具体如何作取决于目标文件的格式,对 于微软的目标文件格式('obj'和'win32'),它会去掉你的源文件名的'.asm'扩展 名(或者其余任何你喜欢使用的扩展名,NASM 并不关心具体是什么),并替换上

'obj'。对于Unix 的目标文件格式('aout','coff','elf'和'as86')它会替换成

'.o',  对于'rdf',它会使用'.rdf',还有为'bin'格式,它会简单地去掉扩展名,因此

'myfile.asm'会产生的一个输出文件'myfile'。

若是输出文件已经存在,NASM 会覆盖它,除非它的文件名与输入文件同名,在这种 状况下,它会给出一个警告信息,并使用'nasm.out'做为输出文件的文件名。 在某些状况下,上述行为是不能接受的,因此,NASM 提供了'-o'选项,它能让你指定 你的输出文件的文件名,你使用'-o'后面紧跟你为输出文件取的名字,中间能够加 空格也能够不加。好比:

nasm -f bin program.asm -o program.com

nasm -f bin driver.asm -odriver.sys

请注意这是一个小写的o,跟大写字母O 是不一样的,大写的是用来指定须要传递的选 项的数目,请参阅2.1.15

   2.1.2 `-f'选项:指定输出文件的格式。

若是你没有对NASM 使用'-f'选项,它会本身为你选择一个输出文件格式。在发布的 NASM 版本中,缺省的输出格式老是'bin';若是你本身编译你的NASM,你能够在编译的 时候重定义'OF_DEFAULT'来选择你须要的缺省格式。

就象'-o','-f'与输出文件格式之间的空格也是可选的,因此'-f elf'和'-felf'都是 合法的。 全部可以使用的输出文件格式的列表能够经过运行命令'nasm -hf'获得。

   2.1.3 `-l' 选项:  产生列表文件

若是你对NASM 使用了'-l'选项,后面跟一个文件名,NASM 会为你产生一个源文件的列表 文件,在里面,地址和产生的代码列在左边,实际的源代码(包括宏扩展,除了那些指定 不须要在列表中扩展的宏,参阅4.3.9)列在右边,好比:

nasm -f elf myfile.asm -l myfile.lst

   2.1.4 `-M'选项:  产生Makefile 依赖关系.

该选项能够用来向标准输出产生makefile 依赖关系,能够把这些信息重定向到一个文件 中以待进一步处理,好比:

 

NASM -M myfile.asm > myfile.dep

   2.1.5 `-F'选项:  选择一个调试格式

该选项能够用来为输出文件选择一个调试格式,语法跟-f 选项相册,惟一不一样的是它产 生的输出文件是调试格式的。 一个具体文件格式的完整的可以使用调试文件格式的列表可经过命令'nasm -f <format> -y'

来获得。 这个选项在缺省状态下没有被构建时NASM 。如何使用该选项的信息请参阅6.10

  2.1.6 `-g' 选项:使调试信息有效。

该选项可用来在指定格式的输出文件中产生调试信息。

更多的信息请参阅2.1.5

  2.1.7 `-E' 选项:  把错误信息输入到文件。

   在'MS-DOS'下,尽管有办法,但要把程序的标准错误输出重定向到一个文件仍是很是困 难的。由于NASM 常把它的警告和错误信息输出到标准错误设备,这将致使你在文本编 辑器里面很难捕捉到它们。

所以NASM 提供了一个'-E'选项,带有一个文件名参数,它能够把错误信息输出到指定的 文件而不是标准错误设备。因此你能够输入下面这样的命令来把错误重定向到文件:

nasm -E myfile.err -f obj myfile.asm

  2.1.8 `-s' 选项:  把错误信息输出到'stdout'

'-s'选项能够把错误信息重定向到'stdout'而不是'stderr',它能够在'MS-DOS'下进行 重定向。想要在汇编文件'myfile.asm'时把它的输出用管道输出给'more'程序,能够这样:

nasm -s -f obj myfile.asm | more

请参考2.1.7 的'-E'选项.

 

   2.1.9 `-i'选项:  包含文件搜索路径

当NASM 在源文件中看到'%include'操做符时(参阅4.6),它不只仅会在当前目录下搜索给 出的文件,还会搜索'-i'选项在命令行中指定的全部路径。因此你能够从宏定义库中 包含进一个文件,好比,输入:

nasm -ic:\macrolib\ -f obj myfile.asm

 (一般,在 '-i'与路径名之间的空格是容许的,而且可选的。)

NASM 更多的关注源代码级上的彻底可移植性,因此并不理解正运行的操做系统对文件的 命名习惯;你提供给'-i'做为参数的的字符串会被一字不差地加在包含文件的文件名前。 因此,上例中最后面的一个反斜杠是必要的,在Unix 下,一个尾部的正斜线也一样是必要 的。

(固然,若是你确实须要,你也能够不正规地使用它,好比,选项'-ifoo'会致使

'%incldue "bar.i'去搜索文件'foobar.i'...)

若是你但愿定义一个标准的搜索路径,好比像Unix 系统下的'/usr/include',你能够在环境 变量NASMENV  中放置一个或多个'-i'(参阅2.1.19)

为了与绝大多数C 编译器的Makefile 保持兼容,该选项也能够被写成'-I'。

   2.1.10 `-p' 选项:  预包含一个文件

NASM 容许你经过'-p'选项来指定一个文件预包含进你的源文件。因此,若是运行:

nasm myfile.asm -p myinc.inc

跟在源文件开头写上'%include "myinc.inc"而后运行'nasm myfile.asm'是等效的。

为和'-I','-D','-U'选项操持一致性,该选项也能够被写成'-P'

 

2.1.11 `-d'选项:  预约义一个宏。

就像'-p'选项给出了在文件头放置'%include'的另外一种实现,'-d'选项给出了在文

件中写'%define'的另外一种实现,你能够写:

nasm myfile.asm -dFOO=100

做为在文件中写下面一行语句的一种替代实现:

        %define FOO 100

 在文件的开始,你能够取消一个宏定义,一样,选项'-dFOO'等同于代码'%define FOO'。 这种形式的操做符在选择编译时操做中很是有用,它们能够用'%ifdef'来进行测试, 好比'-dDEBUG'。

为了与绝大多数C 编译器的Makefile 保持兼容,该选项也能够被写成'-D'。

 

   2.1.12 `-u' 选项:  取消一个宏定义。

   '-u'选项能够用来取消一个由'-p'或'-d'选项先前在命令行上定义的一个宏定义。 好比,下面的命令语句:

       nasm myfile.asm -dFOO=100 -uFOO

会致使'FOO'不是一个在程序中预约义的宏。这在Makefile 中不一样位置重载一个操 做时颇有用。 为了与绝大多数C 编译器的Makefile 保持兼容,该选项也能够被写成'-U'。

 

  2.1.13 `-e'选项:  仅预处理。

  NASM 容许预处理器独立运行。使用'-e'选项(不须要参数)会致使NASM 预处理输入 文件,展开全部的宏,去掉全部的注释和预处理操做符,而后把结果文件打印在标 准输出上(若是'-o'选项也被指定的话,会被存入一个文件)。

该选项不能被用在那些须要预处理器去计算与符号相关的表达式的程序中,因此 以下面的代码:

       %assign tablesize ($-tablestart)

会在仅预处理模式中会出错。

  2.1.14 `-a' 选项:  不须要预处理。

   若是NASM 被用做编译器的后台,那么假设编译器已经做完了预处理,并禁止NASM 的预处理功能显然是能够节约时间,加快编译速度。'-a'选项(不须要参数),会让NASM 把 它强大的预处理器换成另外一个什么也不作的预处理器。

  2.1.15 `-On'选项:  指定多遍优化。

  NASM 在缺省状态下是一个两遍的汇编器。这意味着若是你有一个复杂的源文件须要 多于两遍的汇编。你必须告诉它。使用'-O'选项,你能够告诉NASM 执行多遍汇编。语法以下:

       (*)'-O0'严格执行两遍优化,JMP 和Jcc 的处理和0.98 版相似,除了向后跳的JMP 是 短跳 转,若是可能,当即数在它们的短格式没有被指定的状况下使用长格式。

       (*)'-O1'严格执行两遍优化,但前向分支被汇编成保证可以到达的代码;可能产生比

'-O0'更大的代码,但在分支中的偏移地址没有指定的状况下汇编成功的机率更大,

       (*)'-On' 多编优化,最小化分支的偏移,最小化带符号的当即数,当'strict'关键字

没有用的时候重载指定的大小(参阅3.7),若是2<=n<=3,会有5*n 遍,而不是n 遍。

注意这是一个大写的O,和小写的o 是不一样的,小写的o 是指定输出文件的格式,可参阅

  2.1.16 `-t'选项:  使用TASM 兼容模式。

  NASM 有一个与Borlands 的TASM 之间的受限的兼容格式。若是使用了NASM 的'-t'选项,就会产生下列变化:

        (*)本地符号的前缀由'.'改成'@@'

        (*)TASM 风格的以'@'开头的应答文件能够由命令行指定。这和NASM 支持的'-@resp' 风格是不一样的。

        (*)扩号中的尺寸替换被支持。在TASM 兼容模式中,方括号中的尺寸替换改变了操 做 数的尺寸大小,方括号再也不支持NASM 语法的操做数地址。好比,'mov eax,[DWORD VAL]' 在TASM 兼容语法中是合法的。但注意你失去了为指令替换缺省地址类型的能力。

        (*)'%arg'预处理操做符被支持,它同TASM 的ARG 操做符类似。

        (*) `%local'预处理操做符。

        (*) `%stacksize'预处理操做符。

        (*) 某些操做符的无前缀形式被支持。 (`arg', `elif',`else', `endif', `if',

         `ifdef', `ifdifi', `ifndef', `include',`local')

        (*) 还有不少...

须要更多的关于操做符的信息,请参阅4.9 的TASM 兼容预处理操做符指令。

  2.1.17 `-w'选项:  使汇编警告信息有效或无效。

  NASM 能够在汇编过程当中监视不少的状况,其中不少是值得反馈给用户的,但这些状况 还不足以构成严重错误以使NASM 中止产生输出文件。这些状况被以相似错误的形式 报告给用户,但在报告信息的前面加上'warning'字样。警告信息不会阻止NASM 产生 输出文件并向操做系统返回成功信息。

   有些状况甚至还要宽松:他们仅仅是一些值得提供给用户的信息。因此,NASM 支持'-w' 命令行选项。它以使特定类型的汇编警告信息输出有效或无效。这样的警告类型是 以命名来描述的,好比,'orphan-labels',你能够如下列的命令行选项让此类警告信息 得以输出:'-w+orphan-labels',或者以'-w-orphan-labels'让此类信息不能输出。 可禁止的警告信息类型有下列一些:

       (*)`macro-params'包括以错误的参数个数调用多行的宏定义的警告。这类警告信息

缺省状况下是输出的,至于为何你可能须要禁止它,请参阅4.3.1。

       (*)`orphan-labels'包含源文件行中没有指令却定义了一个没有结尾分号的label 的

警告。缺省情况下,NASM 不输出此类警告。若是你须要它,请参阅3.1 的例子。

       (*)  'number-overflow'包含那些数值常数不符合32 位格式警告信息(好比,你很容易 打 了不少的F,错误产生了'0x7fffffffffff')。这种警告信息缺省情况下是打开的。

 

  2.1.18 `-v'选项:  打印版本信息。

输入'NASM -v'会显示你正使用的NASM 的版本号,还有它被编译的时间。 若是你要提交bug 报告,你可能须要版本号。

 

  2.1.19 `NASMENV'环境变量。

若是你定义了一个叫'NASMENV'的环境变量,程序会被把它认做是命令行选项附加的一 部分,它会在真正的命令行以前被处理。你能够经过在'NASMENV'中使用'-i'选项来定义包含文件的标准搜索路径。 环境变量的值是经过空格符分隔的,因此值'-s ic:\nasmlib'会被看做两个单独的操 做。也正由于如此,意味着值'-dNAME='my name'不会象你预期的那样被处理, 由于它会在空格符处被分开,NASM 的命令行处理会被两个没有意义的字符串'-dNAME="my'和 'name"'给弄混。 为了解决这个问题,NASM 为此提供了一个特性,若是你在'NASMENV'环境变量的第一个 字符处写上一个非减号字符,NASM就会把这个字符看成是选项的分隔符。因此把环 境变量设成'!-s!-ic:\nasmlib'跟'-s -ic:\nasmlib'没什么两样,可是

'!-dNAME="my name"就会正常工做了。 这个环境变量之前叫作'NASM',从版本0.98.32 之后开始叫这个名字。

第三章 NASM 语言

----------------

   3.1 NASM 源程序行的组成。

就像不少其余的汇编器,每一行NASM 源代码包含(除非它是一个宏,一个预处理操做 符,或一个汇编器操做符,参况第4,5 章)下面四个部分的所有或某几个部分: 一般,这些域的大部分是可选的;label,instruction,comment 存在或不存在都是允 许的。固然,operands 域会由于instruction 域的要求而必需存或必须不存在。 NASM 使用反斜线(\)做为续行符;若是一个以一个反斜线结束,那第二行会被认为 是前面一行的一部分。

NASM 对于一行中的空格符并无严格的限制:labels 能够在它们的前面有空格,或 其余任何东西。label 后面的冒号一样也是可选的。(注意到,这意味着若是你想 要写一行'lodsb',但却错误地写成了'lodab',这仍将是有效的一行,但这一行不作 任何事情,只是定义了一个label。运行NASM 时带上命令行选项'-w+orphan-labels' 会让NASM 在你定义了一个不以冒号结尾的label 时警告你。

labels 中的有效的字符是字母,数字,'-','$','#','@','~','.'和'?'。但只有字母

'.',(具备特殊含义,参阅3.9),'_'和'?'能够做为标识符的开头。一个标识符还可

以加上一个'$'前缀,以代表它被做为一个标识符而不是保留字来处理。这样的话,

若是你想到连接进来的其余模块中定义了一个符号叫'eax',你能够用'$eax'在

NASM 代码中引用它,以和寄存器的符号区分开。

instruction 域能够包含任何机器指令:Pentium 和P6 指令,FPU 指令,MMX 指令还有甚 至没有公开的指令也会被支持。这些指令能够加上前缀'LOCK','REP','REPE/REPZ' 或'REPNE'/'REPNZ',一般,支持显示的地址尺寸和操做数尺寸前缀'A16','A32', 'O16'和'O32'。关于使用它们的一个例子在第九章给出。你也可使用段寄存器 名做为指令前缀:代码'es mov [bx],ax'等效于代码'mov [es:bx],ax'。咱们推荐后一种语法。由于它和语法中的其它语法特性一致。可是对于象'LODSB'这样的 指令,它没有操做数,但仍是能够有一个段前缀,对于'es lodsb'没有清晰地语法 处理方式 在使用一个前缀时,指令不是必须的,像'CS','A32','LOCK'或'REPE'这样的段前缀 以单独出如今一行上,NASM 仅仅产生一个前缀字节。 做为对实际机器指令的扩展,NASM  同时提供了必定数量的伪操做指令,这在3.2 节 详细描述。

指令操做数可使用必定的格式:它们能够是寄存器,仅仅以寄存器名来表示(比 如:'ax','bp','ebx','cr0':NASM 不使用'gas'的语法风格,在这种风格中,寄存器名 前必须加上一个'%'符号),或者它们能够是有效的地址(参阅3.3),常数(3.4),或 表达式。

对于浮点指令,NASM 接受各类语法:你可使用MASM 支持的双操做数形式,或者你 可使用NASM 的在大多数状况下全用的单操做数形式。支持的因此指令的语法 细节能够参阅附录B。好比,你能够写:

                   fadd      st1                 ; this sets st0 := st0 + st1

                   fadd      st0,st1            ; so does this

                   fadd      st1,st0            ; this sets st1 := st1 + st0

                   fadd      to st1             ; so does this

几乎全部的浮点指令在引用内存时必须使用如下前缀中的一个'DWORD',QWORD' 或'TWORD'来指明它所引用的内存的尺寸。

   3.2 伪指令。

伪指令是一些并非真正的x86 机器指令,但仍是被用在了instruction 域中的指 令,由于使用它们能够带来很大的方便。当前的伪指令'DB','DW','DD','DQ'和‘DT’,它们对应的未初始化指令是'RESB','RESW','RESD','RESQ'和'REST','INCBIN' 命令,'EQU'命令和'TIEMS'前缀。

   3.2.1 `DB'一类的伪指令:  声明已初始化的数据。

        在NASM 中,`DB', `DW', `DD', `DQ'和`DT'常常被用来在输出文件中声明已初始化 的数据,你能够多种方式使用它们:

                db      0x55                       ; just the byte 0x55

                db      0x55,0x56,0x57            ; three bytes in succession

                db      'a',0x55                ; character constants are OK

                db      'hello',13,10,'$'   ; so are string constants

                dw       0x1234                     ; 0x34 0x12

                dw       'a'                      ; 0x41 0x00 (it's just a number)

                dw       'ab'                     ; 0x41 0x42 (character constant)

                dw       'abc'                   ; 0x41 0x42 0x43 0x00 (string)

                dd      0x12345678                 ; 0x78 0x56 0x34 0x12

                dd      1.234567e20               ; floating-point constant

                dq      1.234567e20               ; double-precision float

                dt     1.234567e20               ; extended-precision float

'DQ'和'DT'不接受数值常数或字符串常数做为操做数。

   3.2.2 `RESB'类的伪指令:  

声明未初始化的数据。 `RESB', `RESW', `RESD', `RESQ' and `REST'被设计用在模块的BSS 段中:它们声明 未初始化的存储空间。每个带有单个操做数,用来代表字节数,字数,或双字数 或其余的须要保留单位。就像在2.2.7 中所描述的,NASM 不支持MASM/TASM 的扣留未 初始化空间的语法'DW ?'或相似的东西:如今咱们所描述的正是NASM  本身的方式。 'RESB'类伪指令的操做数是有严格的语法的,参阅3.8。

   3.2.3 `INCBIN':包含其余二进制文件。

'INCBIN'是从老的Amiga 汇编器DevPac 中借过来的:它将一个二进制文件逐字逐句地

包含到输出文件中。这能很方便地在一个游戏可执行文件中包含中图像或声音数 据。它能够如下三种形式的任何一种使用:

             incbin   "file.dat"                 ; include the whole file

             incbin   "file.dat",1024           ; skip the first 1024 bytes

             incbin   "file.dat",1024,512      ; skip the first 1024, and

                                                     ; actually include at most 512

   3.2.4 `EQU':  定义常数。

'EQU'定义一个符号,表明一个常量值:当使用'EQU'时,源文件行上必须包含一个label。 'EQU'的行为就是把给出的label 的名字定义成它的操做数(惟一)的值。定义是不可更 改的,好比:

message              db        'hello, world'

        msglen              equ        $-message

把'msglen'定义成了常量12。'msglen'不能再被重定义。这也不是一个预自理定义: 'msglen'的值只被计算一次,计算中使用到了'$'(参阅3.5)在此时的含义。注意 ‘EQU’的操做数也是一个严格语法的表达式。(参阅3.8)

   3.2.5 `TIMES':   重复指令或数据。为了与绝大多数C 编译器的Makefile 保持兼容,该选项也能够被写成'-U'。

   2.1.13 `-e'选项:  仅预处理。

   NASM 容许预处理器独立运行。使用'-e'选项(不须要参数)会致使NASM 预处理输入 文件,展开全部的宏,去掉全部的注释和预处理操做符,而后把结果文件打印在标 准输出上(若是'-o'选项也被指定的话,会被存入一个文件)。

该选项不能被用在那些须要预处理器去计算与符号相关的表达式的程序中,因此 以下面的代码:

        %assign tablesize ($-tablestart)

会在仅预处理模式中会出错。

  2.1.14 `-a' 选项:  不须要预处理。

   若是NASM 被用做编译器的后台,那么假设编译器已经做完了预处理,并禁止NASM 的 预处理功能显然是能够节约时间,加快编译速度。'-a'选项(不须要参数),会让NASM 把 它强大的预处理器换成另外一个什么也不作的预处理器。

  2.1.15 `-On'选项:  指定多遍优化。

  NASM 在缺省状态下是一个两遍的汇编器。这意味着若是你有一个复杂的源文件须要 多于两遍的汇编。你必须告诉它。

       使用'-O'选项,你能够告诉NASM 执行多遍汇编。语法以下:

       (*)'-O0'严格执行两遍优化,JMP 和Jcc 的处理和0.98 版相似,除了向后跳的JMP 是 短跳 转,若是可能,当即数在它们的短格式没有被指定的状况下使用长格式。

       (*)'-O1'严格执行两遍优化,但前向分支被汇编成保证可以到达的代码;可能产生比

'-O0'更大的代码,但在分支中的偏移地址没有指定的状况下汇编成功的机率更大,

       (*)'-On' 多编优化,最小化分支的偏移,最小化带符号的当即数,当'strict'关键字 没有用的时候重载指定的大小(参阅3.7),若是2<=n<=3,会有5*n 遍,而不是n 遍。 注意这是一个大写的O,和小写的o是不一样的,小写的o 是指定输出文件的格式,可参阅

2.1.1

  2.1.16 `-t'选项:  使用TASM 兼容模式。

  NASM 有一个与Borlands 的TASM 之间的受限的兼容格式。若是使用了NASM 的'-t'选项, 就会产生下列变化:

       (*)本地符号的前缀由'.'改成'@@'

       (*)TASM 风格的以'@'开头的应答文件能够由命令行指定。这和NASM 支持的'-@resp'

风格是不一样的。

       (*)扩号中的尺寸替换被支持。在TASM 兼容模式中,方括号中的尺寸替换改变了操 做 数的尺寸大小,方括号再也不支持NASM 语法的操做数地址。好比,'mov eax,[DWORD VAL]' 在TASM 兼容语法中是合法的。但注意你失去了为指令替换缺省地址类型的能力。

        (*)'%arg'预处理操做符被支持,它同TASM 的ARG 操做符类似。

        (*) `%local'预处理操做符。

        (*) `%stacksize'预处理操做符。

        (*) 某些操做符的无前缀形式被支持。 (`arg', `elif',`else', `endif', `if',

         `ifdef', `ifdifi', `ifndef', `include',`local')

        (*) 还有不少...

须要更多的关于操做符的信息,请参阅4.9 的TASM 兼容预处理操做符指令。

  2.1.17 `-w'选项:  使汇编警告信息有效或无效。

  NASM 能够在汇编过程当中监视不少的状况,其中不少是值得反馈给用户的,但这些状况 还不足以构成严重错误以使NASM 中止产生输出文件。这些状况被以相似错误的形式报告给用户,但在报告信息的前面加上'warning'字样。警告信息不会阻止NASM 产生 输出文件并向操做系统返回成功信息。

   有些状况甚至还要宽松:他们仅仅是一些值得提供给用户的信息。因此,NASM 支持'-w' 命令行选项。它以使特定类型的汇编警告信息输出有效或无效。这样的警告类型是 以命名来描述的,好比,'orphan-labels',你能够如下列的命令行选项让此类警告信息 得以输出:'-w+orphan-labels',或者以'-w-orphan-labels'让此类信息不能输出。

可禁止的警告信息类型有下列一些:

        (*)`macro-params'包括以错误的参数个数调用多行的宏定义的警告。这类警告信息

缺省状况下是输出的,至于为何你可能须要禁止它,请参阅4.3.1。

       (*)`orphan-labels'包含源文件行中没有指令却定义了一个没有结尾分号的label 的

警告。缺省情况下,NASM 不输出此类警告。若是你须要它,请参阅3.1 的例子。

        (*)  'number-overflow'包含那些数值常数不符合32 位格式警告信息(好比,你很容易 打  了不少的F,错误产生了'0x7fffffffffff')。这种警告信息缺省情况下是打开的。

  2.1.18 `-v'选项:  打印版本信息。

    输入'NASM -v'会显示你正使用的NASM 的版本号,还有它被编译的时间。 若是你要提交bug 报告,你可能须要版本号。

  2.1.19 `NASMENV'环境变量。

若是你定义了一个叫'NASMENV'的环境变量,程序会被把它认做是命令行选项附加的一 部分,它会在真正的命令行以前被处理。你能够经过在'NASMENV'中使用'-i'选项来定 义包含文件的标准搜索路径。 环境变量的值是经过空格符分隔的,因此值'-s ic:\nasmlib'会被看做两个单独的操 做。也正由于如此,意味着值'-dNAME='my name'不会象你预期的那样被处理,由于它 会在空格符处被分开,NASM 的命令行处理会被两个没有意义的字串'-dNAME="my'和 'name"'给弄混。 为了解决这个问题,NASM 为此提供了一个特性,若是你在'NASMENV'环境变量的第一个 字符处写上一个非减号字符,NASM 就会把这个字符看成是选项的分隔符。因此把环 境变量设成'!-s!-ic:\nasmlib'跟'-s -ic:\nasmlib'没什么两样,可是 '!-dNAME="my name"就会正常工做了。

这个环境变量之前叫作'NASM',从版本0.98.32 之后开始叫这个名字。

相关文章
相关标签/搜索