基本格式
nasm -f
比如:
nasm -f elf myfile.asm ; 将myfile.asm 编译成 elf文件格式,的 myfile.o文件,elf 是linux的可执行程序格式
常用编译命令
-f
指定要编译的格式, windows 用 -f win32 或者win64 linux用 -f elf 裸机用 -f bin -o
指定编译后的文件的名称 否则会有默认的文件名称 -i
%include指定要查找的目录,最好是能在 NASMENV 环境变量里设置固定的路径,省的每次设置 -d
宏定义,编译的时候添加宏定义,这样就可以在编译的时候决定代码的内容了 -l (小写的L) 主要是查看汇编结果,调试之前对照用的,看哪里那个地址是不是写错了什么的 -e
这个也是调试的时候用的,主要是查看宏展开的等是否正确
举例
nasm myfile.asm -d debug -I c:\nasmlib -f bin -o myfile.bin -l myfile.list
编译 myfile.asm 文件 定义 debug 宏定义,如果文件中有条件宏 就可以根据我这里定义的debug 宏来是更多调试用的指令有效了 添加搜索文件的路径为 c:\nasmlib 这样如果我的文件中有%include 那么他就知道去哪里搜索对应的文件了 定义要变的格式是 bin格式 输出文件的名称叫 myfile.bin 同时产生列表文件交 myfile.list
NASMENV 环境变量
NASMENV 会附加在每个编译之后,但是环境变量会被空格分开,所以nasm有个特性就是环境变量的第一个字符当做空格(不能是减号)
比如 '!-s!-ic:\nasmlib 第一个字符是! 所以这里会把当成是空格,而真正的空格就当成一个普通的字符,所以这个就等效于-s -ic:\nasmlib
NASM -h 简单解释
-f 参数指定 编译的结果的格式 bin flat-form binary files (e.g. DOS .COM, .SYS) ith Intel hex srec Motorola S-records aout Linux a.out object files aoutb NetBSD/FreeBSD a.out object files coff COFF (i386) object files (e.g. DJGPP for DOS) elf32 ELF32 (i386) object files (e.g. Linux) elf64 ELF64 (x86_64) object files (e.g. Linux) elfx32 ELFX32 (x86_64) object files (e.g. Linux) as86 Linux as86 (bin86 version 0.3) object files obj MS-DOS 16-bit/32-bit OMF object files win32 Microsoft Win32 (i386) object files win64 Microsoft Win64 (x86-64) object files rdf Relocatable Dynamic Object File Format v2.0 ieee IEEE-695 (LADsoft variant) object file format macho32 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files macho64 NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files dbg Trace of all info passed to output stage elf ELF (short name for ELF32) macho MACHO (short name for MACHO32) win WIN (short name for WIN32)
-l (小写的L) 参数 可以生成 汇编而二进制文件的对照 格式 nasm -f bin myfile.asm -l myfile.list 使用 nasm -h 参看说明 -o 指定输出的文件名称 nasm -f elf myfile.asm -o self.o -i 指定搜索路径,主要是用在%include 伪指令包含的文件的所搜路径 -d/-D 添加预定义宏指令 就相当于在asm 文件前面自动添加一条 %define XXXX 指令 比如 nasm myfile.asm -dFOO=100 作为在文件中写下面一行语句的一种替代实现: %define FOO 100 -u/-U 与上一条相反就是取消一个宏定义-e 仅预处理,包括对 宏的展开等,但是不能处理计算任务,所以 如果有 $-tablestart 会报错
-p 预包含一个文件 就相当于在asm 文件前面自动添加一条 %include "filename" 伪指令 -M 产生对应的MAKEFILE文件
-F 使得输出文件带有调试信息
-g 使得调试信息有效
-E 将错误信息输出到文件中
-s 把出错信息输出到stdout 中
-a 这是在和IDE集成的时候,取消掉自身的预处理的指令,一般直接用命令行的话是用不到的
-On n是数字,指优化的次数,默认是两遍
-t TASM兼容模式,用不到
-w 开启或者关闭某些警告 格式 -w+orphan-labels 开启 orphan-labels 的警告 -w-orphan-labels 关闭 orphan-labels 的警告 可操作性的类型有 other any warning not specifially mentioned below (default on) macro-params macro calls with wrong parameter count (default on) macro-selfref cyclic macro references (default off) macro-defaults macros with more default than optional parameters (default on) orphan-labels labels alone on lines without trailing `:' (default on) number-overflow numeric constant does not fit (default on) gnu-elf-extensions using 8- or 16-bit relocation in ELF32, a GNU extension (default off) float-overflow floating point overflow (default on) float-denorm floating point denormal (default off) float-underflow floating point underflow (default off) float-toolong too many digits in floating-point number (default on) user %warning directives (default on) lock lock prefix on unlockable instructions (default on) hle invalid hle prefixes (default on) bnd invalid bnd prefixes (default on) zext-reloc relocation zero-extended to match output format (default on) ptr non-NASM keyword used in other assemblers (default on) bad-pragma empty or malformed %pragma (default off) unknown-pragma unknown %pragma facility or directive (default off) not-my-pragma %pragma not applicable to this compilation (default off) unknown-warning unknown warning in -W/-w or warning directive (default off) all all possible warnings -v 打印版本信息