鱼C论坛

 找回密码
 立即注册
查看: 3578|回复: 1

[学习笔记] 琢石成器WIN32汇编程序设计学习(五)-API函数学习-MessageBox

[复制链接]
发表于 2018-3-13 00:24:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 兰陵月 于 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

运行结果:
01.png


04.png
05.png
06.png
07.png
另外,经过试验,字符数目最多允许252个,如果超过252个,则编译不会成功。字符显示的时候会自动换行,可能是80个一行。
下图表示刚好显示252个字符:
09.png
下图表示超过252个字符情况,显示编译不成功:
10.png
09.png
10.png

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 17:56:31 | 显示全部楼层
大佬,notepad++为什么会乱码呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-25 00:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表