1,安装masm32,并设置环境变量:
@echo off
set Masm32Dir=E:\masm32
set include=%Masm32Dir%\Include;%include%;D:\dyk\vc6\Include;D:\dyk\vc6\MFC\Include
set lib=%Masm32Dir%\lib;%lib%
set path=%Masm32Dir%\Bin;%Masm32Dir%;%PATH%
echo on

再将VC6.0下的nmake.exe拷贝到Masm32的bin目录下.
2,编写代码:
.386
.model flat,stdcall
option casemap:none

;引入头文件
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

;数据段

.data
szCaption db 'Info',0 ;标题
szText db 'Hello,World!',0 ;信息内容

;代码段

.code
start:
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK ;打印"Hello,World"
invoke ExitProcess,NULL ;结束当前进程
end start

3,进入代码目录,用nmake编译程序,出现下面的错误:

这是因为还没有MAKEFILE,所以无法进行编译,拷贝一个 MAKEFILE修改如下:
EXE = Hello.exe #指定输出文件
OBJS = Hello.obj #需要的目标文件

LINK_FLAG = /subsystem:windows #连接选项
ML_FLAG = /c /coff #编译选项

$(EXE): $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)

.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<

clean:
del *.obj
del *.res

因为没有用到资源文件,所以RES这一项没有,再次用nmake进行编译:

目录下生成如下图:

运行Hello.exe,即完成第一个”Hello,World”了,

对于这个代码有一个问题我还不大清楚,.inc文件和.lib文件的区别是什么?我个人理解.inc是变量和函数的声明,而.lib是静态链接库,包含着函数的具体实现,再有一个感觉就是MAKEFILE的书写也是一门学问。。
代码重新封装下:
.386
.model flat,stdcall
option casemap:none

;引入头文件
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

;数据段

.data
szCaption db 'Info',0
szText db 'Hello,World!',0

.data?
szBuffer db 1024 dup (?) ;1K的缓冲区

;代码段
.code

;打印子程序,标题和文本通过eax,ebx分别传进来
PrintInfo proc
invoke MessageBox,NULL,eax,ebx,MB_OK ;打印"Hello,World"
ret
PrintInfo endp

start:
mov eax,offset szText ;eax中存放“文本”的地址
mov ebx,offset szCaption ;ebx中存放“标题”的地址
call PrintInfo
invoke ExitProcess,NULL ;结束当前进程
end start
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述