以前的学习笔记 。可以根据注释拆开分成多个文件编译,或者用radasm等asm ide编译。
.386 ;使用80386指令集
.MODEL Flat, STDCALL ;指定内存模式,参数的传递约定
option casemap:none ;告诉 MASM 要区分标号的大小写
include windows.inc ;windows head file(等效于把整个文件都粘贴到此处)
include user32.inc ;windows head file
includelib user32.lib ;windows lib,主要控制用户界面
include kernel32.inc ;windows head file
includelib kernel32.lib ;windows lib,主要处理内存管理和进程调度
.DATA ;数据段,已初始化的数据
szCaption db 'A MessageBox !',0
szText db 'Hello, sword !',0
.DATA? ;数据段,未初始化的数据
szNullString db 100?
.CONST ;数据段,常量定义
szConString db 'hello const data!',0
.CODE ;代码段
memcpy proc public uses esi edi Source:PTR BYTE,Dest:PTR BYTE,ln:DWORD
cld
mov esi, [Source]
mov edi, [Dest]
mov ecx, [ln]
shr ecx, 2
rep movsd
mov ecx, [ln]
and ecx, 3
rep movsb
ret
memcpy endp
lion01:
;invoke可以调用函数指针,且有参数检查,call则较不方便、不安全
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke memcpy,offset szConString,offset szNullString,18
invoke MessageBox,NULL,offset szNullString,offset szConString,MB_OK
invoke ExitProcess,NULL
end lion01
;以下是masm8的bat文件,它设置了编译环境
;@echo off
;set Masm32Dir=D:/Masm32
;set include=%Masm32Dir%/Include;%include%
;set lib=%Masm32Dir%/lib;%lib%
;set path=%Masm32Dir%/Bin;%Masm32Dir%;%PATH%
;set Masm32Dir=
;cmd
;cd D:/Masm32
;echo on
;以下是windows make文件
;NAME = Hello
;OBJS = $(NAME).obj
;
;LINK_FLAG = /subsystem:windows
;ML_FLAG = /c /coff
;
;$(NAME).exe: $(OBJS)
; Link $(LINK_FLAG) $(OBJS)
;
;.asm.obj:
; ml $(ML_FLAG) $<
;
;clean:
; del *.obj
;以下是编译程序的bat文件
;nmake clean
;nmake