一、NASM
Netwide Assembler (NASM)是针对80x86和x86-64平台设计的,可移植的、模块化的汇编语言编译器。
它也可以输出纯二进制文件,英特尔十六进制和摩托罗拉S-Record格式。
它的语法设计得简单且易于理解,类似于英特尔软件开发人员手册中的语法,但复杂性最小。
它支持所有当前已知的x86架构扩展,并对宏有强大的支持。
1、下载、安装、配置NASM
到 NASM 官网 下载nasm;
和安装普通软件一样,安装NASM;
我选择安装在 C:\NASM
目录
windows下配置 PATH 环境变量 :
2、使用notepad++集成NASM
到 notepad++官网 下载notepad++
cmd /k pushd "$(CURRENT_DIRECTORY)" & C:\NASM\nasm.exe -f bin "$(FULL_CURRENT_PATH)" -l "$(NAME_PART).lst" -o "$(NAME_PART).bin" & PAUSE & EXIT
设置如下图,我们定义了快捷键ALT + R
3、NASM 命令选项
(1)、-f
指定输出文件的格式
NASM 生成的文件只包含“纯二进制”的内容,
C:\>nasm -f bin hello.asm
输出的二进制文件名为hello(无扩展名)。
如果您没有向NASM提供-f
选项,它将为您自己选择输出文件格式。
在NASM的发行版中,默认值始终是bin。
上面的指令和下面的指令等价的
C:\>nasm hello.asm
(2)、-o
指定编译后输出的文件名
-o
指定编译后输出(Output)的文件名
C:\>nasm -f bin hello.asm -o hello.bin
输出的二进制文件名为hello.bin
(3)、-l
指定输出文件的格式
C:\>nasm hello.asm -l hello.lst
生成二进制文件hello和listing文件,这个listing文件是什么样的?直接看看
📚 hello.asm文件
start mov ax,1
mov bx,2
times 32 db 0xc
current times 510-(current-start) db 0
db 0x55,0xaa
📚 hello.lst文件
1 00000000 B80100 start mov ax,1
2 00000003 BB0200 mov bx,2
3 00000006 0C<rept> times 32 db 0xc
4 00000026 00<rept> current times 510-(current-start) db 0
5 000001FE 55AA db 0x55,0xaa
在源文件的左面加上了机器码和汇编地址
(4)、-h
查看帮助
C:\>nasm -help
二、MASM
三、NASM & MASM 使用&区别
3.1、标号
MASM中 通过offset取得标号的段内偏移地址
label1:
mov ax,offset label1 ;// 相当于mov ax,0
label2:
mov ax,offset label2 ;// 相当于mov ax,3,因为上条指令长度为3
NASM中直接使用标号
label1:
mov ax,label1 ;// 相当于mov ax,0
label2:
mov ax,label2 ;// 相当于mov ax,3,因为上条指令长度为3
寻址方式
MASM
mov ax,cs:[di]
NASM
mov ax,[cs:di]