NASM全称The Netwide Assembler,是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。NASM是汇编语言编译程序,只能编译程序。不能链接。如果需要在windows中运行,还需要找个链接器制作exe或者dll。
win10系统汇编hello world的Demo如下,把下面文件保存为hello.asm。
extern printf
SECTION .data
msg db 'Hello World! This is a test.', 0Ah
SECTION .text
global main
main:
push msg
call printf
add esp, 4
ret
把nasm拷贝到hello.asm同目录,再用nasm把汇编编译成win32程序,
注:--prefix 是把所有函数名前加上下划线,这是window的要求。
nasm.exe -f win32 hello.asm --prefix _ -o hello.obj
在打开vs的的命令行Command Prompt,执行如下命令。
注:使用需要使用32位的命令行,因为nasm生成的是32位程序,所以link也要32位的。我使用vs2022的64位cmd一直提示错误,链接不上。vs2013的cmd一次成功。
link /subsystem:console /defaultlib:msvcrt.lib /entry:main hello.obj /out:hello.exe
汇编调用的printf使用了c语言的库msvcrt.lib,如果没有这个库文件须要下载这个库文件。https://download.csdn.net/download/GetDC/87473394
保存到电脑“D:\projectpath"\msvcrt.lib”。命令行改为如下,即可链接
link /subsystem:console /defaultlib:"D:\"projectpath"\msvcrt.lib" /entry:main hello.obj /out:hello.exe
网上还可以查到其他各种链接器。但windows下安装vs最方便。link是比较好的选择。