1. ; 注释
    2. ; 指定CPU型号
    3. .386
    4. ; FLAT - 使用平台内存模式
    5. ; STDCALL - 默认函数调用约定
    6. .model FLAT ,STDCALL
    7. ; 指定大小敏感
    8. option casemap:none
    9. include msvcrt.inc
    10. includelib msvcrt.lib
    11. include user32.inc
    12. includelib user32.lib
    13. .data
    14. pszStr db 'hello world', 0dh, 0ah , 0
    15. pszPause db "pause" , 0
    16. pszS db "%s" , 0
    17. pszYes db "Yes",0
    18. pszNo db "No",0
    19. ; 定义了一个100字节是数组, 使用0来填充
    20. g_buff db 100 dup(0)
    21. ; 汇编语句必须写在代码段中
    22. ; .code 用于定义代码段
    23. .code
    24. ; 指定程序入口
    25. ; entry: 表示定义一个标签,entry是标签的名字
    26. entry:
    27. push offset pszStr
    28. call crt_printf
    29. add esp , 4
    30. push offset pszPause
    31. call crt_system
    32. add esp,4
    33. ; scanf("%s" , g_buff)
    34. push offset g_buff
    35. push offset pszS
    36. call crt_scanf
    37. add esp , 8
    38. ; 判断输入的字符个数是否小于8
    39. ; 1. 得到字符串的长度
    40. ; int n = strlen(g_buff)
    41. push offset g_buff
    42. call crt_strlen
    43. add esp, 4
    44. ; 一般情况, 函数的返回值保存在eax中.
    45. ; if ( eax < 8) MessageBox(0,"Yes",0,0)
    46. cmp eax , 8
    47. jb _BLOW
    48. ; 如果没有跳, 就说明是大于的
    49. push 0
    50. push 0
    51. push offset pszYes
    52. push 0
    53. call MessageBox
    54. jmp _ENDIF
    55. ; else MessageBox(0,"No",0,0)
    56. _BLOW:
    57. push 0
    58. push 0
    59. push offset pszNo
    60. push 0
    61. call MessageBox
    62. _ENDIF:
    63. ret
    64. ; 指定程序入口: end + 标签的名字
    65. end entry