兰陵月 发表于 2018-3-13 00:24:24

琢石成器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个字符情况,显示编译不成功:

avicii_the_best 发表于 2020-2-25 17:56:31

大佬,notepad++为什么会乱码呀
页: [1]
查看完整版本: 琢石成器WIN32汇编程序设计学习(五)-API函数学习-MessageBox