求Windows平台最简MASM与NASM版MessageBox汇编程序
Windows平台下MASM与NASM的最简MessageBox汇编示例
MASM版本代码
.386 .model flat, stdcall option casemap :none include windows.inc include user32.inc includelib user32.lib .code start: invoke MessageBox, NULL, addr MsgText, addr MsgTitle, MB_OK invoke ExitProcess, NULL .data MsgTitle db "MASM Demo", 0 MsgText db "Hello from MASM!", 0 end start
编译运行步骤
- 使用MASM编译器
ml.exe编译生成目标文件:ml /c /coff masm_demo.asm - 通过
link.exe链接生成可执行文件:link /subsystem:windows masm_demo.obj user32.lib kernel32.lib
NASM版本代码
bits 32 extern _MessageBoxA@16 extern _ExitProcess@4 section .data msg_title db 'NASM Demo', 0 msg_text db 'Hello from NASM!', 0 section .text global _main _main: push 0 ; MB_OK 参数 push msg_title ; 标题字符串地址 push msg_text ; 内容字符串地址 push 0 ; 父窗口句柄NULL call _MessageBoxA@16 push 0 ; 退出码0 call _ExitProcess@4
编译运行步骤
- 使用NASM编译器
nasm.exe编译生成目标文件:nasm -f win32 nasm_demo.asm -o nasm_demo.obj - 通过
link.exe链接生成可执行文件:link /subsystem:windows nasm_demo.obj user32.lib kernel32.lib
核心差异对比
- 调用语法:MASM提供
invoke伪指令,自动处理stdcall调用的参数栈平衡;NASM需手动按从右到左顺序push参数,函数名需添加_前缀和@参数字节数的修饰符(32位stdcall规则)。 - 段定义:MASM用
.model、.code、.data伪指令划分段;NASM用section关键字显式声明段。 - 头文件与库:MASM通过
include引入Windows头文件、includelib链接库;NASM直接用extern声明外部函数,链接时手动指定库文件。
内容的提问来源于stack exchange,提问作者Darox99
相关产品推荐
相关产品推荐

