鱼C论坛

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

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

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

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

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

x
本帖最后由 兰陵月 于 2018-3-13 00:46 编辑

源程序:
  1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  2. ; ******************【程】***【序】***【信】***【息】******************
  3. ;------------------------------------------------------------------------
  4. ; 程序基本信息
  5. ;------------------------------------------------------------------------
  6. ; 程序名称:SB.asm
  7. ; 程序功能:调用MessageBox函数生成一个对话框,演示基本功能的Windows程序
  8. ; 编辑软件:Notepad++  编码格式:ANSI
  9. ; 创建日期:2018.03.12
  10. ; 创 建 者: by 鱼C论坛  兰陵月  QQ:2186745820
  11. ;------------------------------------------------------------------------
  12. ; MakeFile 文件
  13. ;------------------------------------------------------------------------
  14. ;NAME = SB
  15. ;OBJS = $(NAME).obj
  16. ;LINK_FLAG = /subsystem:windows
  17. ;ML_FLAG = /c /coff
  18. ;$(NAME).exe: $(OBJS)
  19. ;        Link $(LINK_FLAG) $(OBJS)
  20. ;.asm.obj:
  21. ;        ml $(ML_FLAG) [        DISCUZ_CODE_0        ]lt;
  22. ;clean:
  23. ;        del *.obj
  24. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  25. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  26. ; 【模式定义】
  27. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  28.                                         .386
  29.                                         .model flat,stdcall
  30.                                         option casemap: none
  31. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  32. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  33. ; 【include 文件定义】
  34. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  35. include                        windows.inc
  36. include                        user32.inc
  37. includelib                user32.lib
  38. include                        kernel32.inc
  39. includelib                kernel32.lib
  40. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  41. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  42. ; 【Equ等值定义】,对应资源代码文件中的define部分
  43. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  44. ; ×××        equ                ×××
  45. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  46. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  47. ; 【数据段】
  48. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  49. ;------------------------------------------------------------------------
  50. ; 可读可写已初始化变量
  51. ;------------------------------------------------------------------------
  52.                                         .data
  53. ;------------------------------------------------------------------------
  54. szCaption                db        '鱼C论坛-汇编语言交流-by 兰陵月',0
  55. szText                        db        '这就是消息框内的消息内容......',0dh
  56.                                 db        'MessagBox函数原型:',0dh
  57.                                 db  'MessagBox hWnd, IpText, IpCaption, UType',0
  58. szTextCs1                db        '消息内容不分行情况:',0dh,0ah
  59.                                 db        '鱼C论坛好;','鱼C论坛妙;','鱼C论坛呱呱叫!',0
  60. szTextCs2                db        '消息内容分行情况:(在要分行的地方加0dh,0ah)',0dh,0ah
  61.                                 db        '鱼C论坛好;',0dh,0ah,'鱼C论坛妙;',0dh,0ah,'鱼C论坛呱呱叫!',0
  62. szTextCs3                db        '消息内容分行情况:',0dh,'(在要分行的地方加0dh和0ah,或者只需要其中任意一个也行,原因不清楚!)',0ah
  63.                                 db        '鱼C论坛好;',0dh,'鱼C论坛妙;',0ah,'鱼C论坛呱呱叫!',0
  64. szTextCs4                db        '将第三个参数lpCaption的值变为NULL。',0dh
  65.                                 db  'MessagBox NULL, offset szTextCs4, NULL, MB_OK',0ah
  66.                                 db        '请看消息框标题栏的变化情况,变成了“错误”二字!',0
  67. szTextCs5                db        '将函数的uType参数值变为:',0dh,'MB_ABORTRETRYIGNORE(十六进制值0x02)',0ah
  68.                                 db  'MessagBox NULL, offset szTextCs5, NULL, MB_ABORTRETRYIGNORE',0
  69. szTextCs6                db        '将函数的uType参数值变为:',0dh,'MB_CANCELTRYCONTINUE(十六进制值0x06)',0ah
  70.                                 db  'MessagBox NULL, offset szTextCs6, NULL, MB_CANCELTRYCONTINUE',0
  71. ;------------------------------------------------------------------------
  72. ; 可读可写未初始化变量
  73. ;------------------------------------------------------------------------
  74. ;                                        .data?
  75. ;------------------------------------------------------------------------
  76. hInstance                dd        ?
  77. ;------------------------------------------------------------------------
  78. ; 可读不可写初始化常量
  79. ;------------------------------------------------------------------------
  80. ;                                        .const
  81. ;------------------------------------------------------------------------
  82. ; ×××变量定义区×××
  83. ;------------------------------------------------------------------------

  84. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  85. ; 【代码段】
  86. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  87.                                         .code
  88. ;------------------------------------------------------------------------
  89. start:
  90.                 invoke                MessageBox,\
  91.                                         NULL,\
  92.                                         offset szText,\
  93.                                         offset szCaption,\
  94.                                         MB_OK or MB_TASKMODAL
  95.                 invoke                MessageBox,\
  96.                                         NULL,\
  97.                                         offset szTextCs1,\
  98.                                         offset szCaption,\
  99.                                         MB_OK                        
  100.                 invoke                MessageBox,\
  101.                                         NULL,\
  102.                                         offset szTextCs2,\
  103.                                         offset szCaption,\
  104.                                         MB_OK
  105.                 invoke                MessageBox,\
  106.                                         NULL,\
  107.                                         offset szTextCs3,\
  108.                                         offset szCaption,\
  109.                                         MB_OK
  110.                 invoke                MessageBox,\
  111.                                         NULL,\
  112.                                         offset szTextCs4,\
  113.                                         NULL,\
  114.                                         MB_OK
  115.                 invoke                MessageBox,\
  116.                                         NULL,\
  117.                                         offset szTextCs5,\
  118.                                         NULL,\
  119.                                         MB_ABORTRETRYIGNORE
  120.                 invoke                MessageBox,\
  121.                                         NULL,\
  122.                                         offset szTextCs6,\
  123.                                         NULL,\
  124.                                         MB_CANCELTRYCONTINUE or MB_ICONEXCLAMATION or MB_TASKMODAL
  125.                 invoke                ExitProcess,\
  126.                                         NULL
  127. ;------------------------------------------------------------------------
  128. ; 程序起始点
  129. ;------------------------------------------------------------------------
  130.                 end                        start
  131. ;------------------------------------------------------------------------
  132. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  133.                
  134.                
  135.                         
复制代码


MAKEFILE文件内容:
  1. NAME = SB
  2. OBJS = $(NAME).obj

  3. LINK_FLAG = /subsystem:windows
  4. ML_FLAG = /c /coff
  5. $(NAME).exe: $(OBJS)
  6.         Link $(LINK_FLAG) $(OBJS)

  7. .asm.obj:
  8.         ml $(ML_FLAG) [        DISCUZ_CODE_1        ]lt;

  9. clean:
  10.         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-4-20 13:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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