琢石成器WIN32汇编程序设计学习(五)-API函数学习-MessageBox
本帖最后由 兰陵月 于 2018-3-13 00:46 编辑源程序:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ******************【程】***【序】***【信】***【息】******************
;------------------------------------------------------------------------
; 程序基本信息
;------------------------------------------------------------------------
; 程序名称:SB.asm
; 程序功能:调用MessageBox函数生成一个对话框,演示基本功能的Windows程序
; 编辑软件:Notepad++编码格式:ANSI
; 创建日期:2018.03.12
; 创 建 者: by 鱼C论坛兰陵月QQ:2186745820
;------------------------------------------------------------------------
; MakeFile 文件
;------------------------------------------------------------------------
;NAME = SB
;OBJS = $(NAME).obj
;LINK_FLAG = /subsystem:windows
;ML_FLAG = /c /coff
;$(NAME).exe: $(OBJS)
; Link $(LINK_FLAG) $(OBJS)
;.asm.obj:
; ml $(ML_FLAG) [ DISCUZ_CODE_0 ]lt;
;clean:
; del *.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 【模式定义】
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap: none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 【include 文件定义】
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 【Equ等值定义】,对应资源代码文件中的define部分
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ××× equ ×××
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 【数据段】
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;------------------------------------------------------------------------
; 可读可写已初始化变量
;------------------------------------------------------------------------
.data
;------------------------------------------------------------------------
szCaption db '鱼C论坛-汇编语言交流-by 兰陵月',0
szText db '这就是消息框内的消息内容......',0dh
db 'MessagBox函数原型:',0dh
db'MessagBox hWnd, IpText, IpCaption, UType',0
szTextCs1 db '消息内容不分行情况:',0dh,0ah
db '鱼C论坛好;','鱼C论坛妙;','鱼C论坛呱呱叫!',0
szTextCs2 db '消息内容分行情况:(在要分行的地方加0dh,0ah)',0dh,0ah
db '鱼C论坛好;',0dh,0ah,'鱼C论坛妙;',0dh,0ah,'鱼C论坛呱呱叫!',0
szTextCs3 db '消息内容分行情况:',0dh,'(在要分行的地方加0dh和0ah,或者只需要其中任意一个也行,原因不清楚!)',0ah
db '鱼C论坛好;',0dh,'鱼C论坛妙;',0ah,'鱼C论坛呱呱叫!',0
szTextCs4 db '将第三个参数lpCaption的值变为NULL。',0dh
db'MessagBox NULL, offset szTextCs4, NULL, MB_OK',0ah
db '请看消息框标题栏的变化情况,变成了“错误”二字!',0
szTextCs5 db '将函数的uType参数值变为:',0dh,'MB_ABORTRETRYIGNORE(十六进制值0x02)',0ah
db'MessagBox NULL, offset szTextCs5, NULL, MB_ABORTRETRYIGNORE',0
szTextCs6 db '将函数的uType参数值变为:',0dh,'MB_CANCELTRYCONTINUE(十六进制值0x06)',0ah
db'MessagBox NULL, offset szTextCs6, NULL, MB_CANCELTRYCONTINUE',0
;------------------------------------------------------------------------
; 可读可写未初始化变量
;------------------------------------------------------------------------
; .data?
;------------------------------------------------------------------------
hInstance dd ?
;------------------------------------------------------------------------
; 可读不可写初始化常量
;------------------------------------------------------------------------
; .const
;------------------------------------------------------------------------
; ×××变量定义区×××
;------------------------------------------------------------------------
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 【代码段】
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;------------------------------------------------------------------------
start:
invoke MessageBox,\
NULL,\
offset szText,\
offset szCaption,\
MB_OK or MB_TASKMODAL
invoke MessageBox,\
NULL,\
offset szTextCs1,\
offset szCaption,\
MB_OK
invoke MessageBox,\
NULL,\
offset szTextCs2,\
offset szCaption,\
MB_OK
invoke MessageBox,\
NULL,\
offset szTextCs3,\
offset szCaption,\
MB_OK
invoke MessageBox,\
NULL,\
offset szTextCs4,\
NULL,\
MB_OK
invoke MessageBox,\
NULL,\
offset szTextCs5,\
NULL,\
MB_ABORTRETRYIGNORE
invoke MessageBox,\
NULL,\
offset szTextCs6,\
NULL,\
MB_CANCELTRYCONTINUE or MB_ICONEXCLAMATION or MB_TASKMODAL
invoke ExitProcess,\
NULL
;------------------------------------------------------------------------
; 程序起始点
;------------------------------------------------------------------------
end start
;------------------------------------------------------------------------
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MAKEFILE文件内容:
NAME = SB
OBJS = $(NAME).obj
LINK_FLAG = /subsystem:windows
ML_FLAG = /c /coff
$(NAME).exe: $(OBJS)
Link $(LINK_FLAG) $(OBJS)
.asm.obj:
ml $(ML_FLAG) [ DISCUZ_CODE_1 ]lt;
clean:
del *.obj
运行结果:
另外,经过试验,字符数目最多允许252个,如果超过252个,则编译不会成功。字符显示的时候会自动换行,可能是80个一行。
下图表示刚好显示252个字符:
下图表示超过252个字符情况,显示编译不成功:
大佬,notepad++为什么会乱码呀
页:
[1]