a.asm
global Start
section .text
inc dword [esi]
push edi
mov edi,[esp+0x14]
λ nasm -f win32 a.asm -l a.lst
1 global Start
2 section .text
3 00000000 FF06 inc dword [esi]
4 00000002 57 push edi
5 00000003 8B7C2414 mov edi,[esp+0x14]
如果你编写的是x64指令:
λ nasm -f win64 a.asm -l a.lst
>nasm --help
Usage: nasm [-@ response_file] [options...] [--] filename
nasm -v (or --v)
Options (values in brackets indicate defaults):
-h show this text and exit (also --help)
-v (or --v) print the NASM version number and exit
-@ file 响应文件; 每行一个命令行选项
-o outfile 将输出写入输出文件
--keep-all 即使发生错误也不会删除输出文件
-Xformat 指定错误报告格式(gnu或vc)
-s 将错误消息重定向到stdout
-Zfile 将错误消息重定向到文件
-M 在stdout上生成Makefile依赖项
-MG d:o, 假定丢失的文件已生成
-MF file 设置Makefile依赖文件
-MD file assemble and generate dependencies
-MT file 依赖目标名称
-MQ file 依赖关系目标名称(带引号)
-MP 发出虚假目标
-f format 选择输出文件格式
bin 平面原始二进制文件(MS-DOS,嵌入式,...)[默认]
ith Intel Hex编码的平面二进制
srec 摩托罗拉S记录编码的平面二进制
aout Linux a.out
aoutb NetBSD/FreeBSD a.out
coff COFF(i386)(DJGPP,某些Unix变体)
elf32 ELF32 (i386) (Linux,大多数Unix变体)
elf64 ELF64 (x86-64) (Linux,大多数Unix变体)
elfx32 ELFx32 (ELF32 for x86-64) (Linux)
as86 as86(bin86 / dev86工具链)
obj 特尔/微软OMF(MS-DOS,OS / 2,Win16)
win32 Microsoft扩展了Win32的COFF(i386)
win64 Microsoft为Win64(x86-64)扩展了COFF
rdf 可重定位动态对象文件格式v2.0
ieee IEEE-695(LADsoft变体)目标文件格式
macho32 Mach-O i386(Mach,包括MacOS X及其变体)
macho64 Mach-O x86-64(Mach,包括MacOS X及其变体)
dbg 跟踪传递到输出阶段的所有信息
elf “elf32”的旧别名
macho “macho32”的旧别名
win “win32”的旧别名
-g 生成调试信息
-F format 选择调试格式(取决于输出格式)
-gformat 与-g -F格式相同
elf32: dwarf ELF32 (i386) dwarf (newer) [default]
stabs ELF32 (i386) stabs (older)
elf64: dwarf ELF64 (x86-64) dwarf (newer) [default]
stabs ELF64 (x86-64) stabs (older)
elfx32: dwarf ELFx32 (x86-64) dwarf (newer) [default]
stabs ELFx32 (x86-64) stabs (older)
obj: borland Borland Debug Records [default]
win32: cv8 Codeview 8+ [default]
win64: cv8 Codeview 8+ [default]
ieee: ladsoft LADsoft Debug Records [default]
macho32: dwarf Mach-O i386 dwarf for Darwin/MacOS [default]
macho64: dwarf Mach-O x86-64 dwarf for Darwin/MacOS [default]
dbg: debug Trace of all info passed to debug stage [default]
-l listfile 将列表写入列表文件
-Lflags... 将可选信息添加到列表文件
-Lb 显示内置宏程序包(标准和%use)
-Ld 显示字节并以十进制而不是十六进制重复计数
-Le 显示预处理的输出
-Lf 忽略.nolist(强制输出)
-Lm 显示带有扩展参数的多行宏调用
-Lp 每过一次输出一个列表文件,以防出错
-Ls 显示所有单行宏定义
-Lw 每行之后刷新输出
-L+ 启用所有列表选项(非常详细!)
-Oflags... 优化操作码,立即数和分支偏移
-O0 没有优化
-O1 最小优化
-Ox 多遍优化(默认)
-Ov 显示最后执行的通过次数
-t 以受限的SciTech TASM兼容模式组装
-E (or -e) 仅预处理(默认情况下将输出写入标准输出)
-a 不要预处理(仅assemble)
-Ipath 将路径名添加到包含文件路径
-Pfile 预包含文件(--include)
-Dmacro[=str] 预定义宏
-Umacro 取消定义宏
--pragma str 预执行特定的 %%pragma
--before str 在输入之前添加行(通常是预处理程序语句)
--no-line 忽略输入中的%line指令
--prefix str 将给定的字符串添加到所有extern的名称之前,
通用符号和全局符号(--gprefix)
--suffix str 将给定的字符串附加到所有extern的名称中,
通用符号和全局符号(--gprefix)
--lprefix str 将给定的字符串放在本地符号之前
--lpostfix str 将给定的字符串附加到本地符号
-w+x 启用警告x(-Wx)
-w-x 禁用警告x(-Wno-x)
-w[+-]error 宣传所有错误警告 (-Werror)
-w[+-]error=x 将警告x提升为错误 (-Werror=x)
all 所有可能的警告
bnd 无效的BND前缀[on]
db-empty 没有用于数据声明的操作数[on]
environment 不存在的环境变量[on]
float 所有带有“ float-”前缀的警告
float-denorm 浮点异常[关闭]
float-overflow 浮点溢出[on]
float-toolong 浮点数中的位数过多[on]
float-underflow 浮点下溢[关闭]
hle 无效的HLE前缀[on]
label 所有带有“ label-”前缀的警告
label-orphan 仅在行上加上标签,而不能在末尾加上“:”
label-redef 标签重新定义为相同的值[off]
label-redef-late label(在代码生成过程中重新定义) [error]
lock 可解锁指令上的LOCK前缀 [on]
macro 所有带有前缀的警告 "macro-"
macro-defaults 具有比可选参数更多默认值的宏 [on]
macro-params 所有带有前缀的警告 "macro-params-"
macro-params-legacy 不正确地调用多行宏以获得旧版支持 [on]
macro-params-multi 参数计数错误的多行宏调用 [on]
macro-params-single 参数计数错误的单行宏调用 [on]
negative-rep 常规%rep计数 [on]
number-overflow 数值常数不适合 [on]
obsolete 所有带有前缀的警告 "obsolete-"
obsolete-nop 指令已过时,并且是目标CPU上的noop [on]
obsolete-removed 指令已过时并已在目标CPU上删除 [on]
obsolete-valid 指令已过时,但在目标CPU上有效 [on]
phase 稳定期间的相位误差 [off]
pragma 所有带有前缀的警告 "pragma-"
pragma-bad 格式错误的%pragma [off]
pragma-empty 空%pragma指令 [off]
pragma-na %pragma不适用于此编译 [off]
pragma-unknown 未知的%pragma工具或指令 [off]
ptr 其他汇编程序中使用的非NASM关键字 [on]
regsize 寄存器大小规格被忽略 [on]
unknown-warning -W / -w或警告指令中的未知警告 [off]
user %warning指令 [on]
warn-stack-empty 警告堆栈为空 [on]
zeroing 初始化节中的RESx变为零 [on]
zext-reloc 重定位零扩展以匹配输出格式 [on]
other 上面没有特别提到的任何警告 [on]
--limit-X val 设定执行极限X
passes 总通过次数[不限]
stalled-passes 没有前进的通过次数[1000]
macro-levels 宏扩展级别[10000]
macro-tokens tokens processed during single-lime macro expansion [10000000]
mmacros 最后返回之前的多行宏 [100000]
rep %rep count [1000000]
eval expression evaluation descent [8192]
lines 总处理的源代码行 [2000000000]