鱼C论坛

 找回密码
 立即注册
查看: 1537|回复: 0

WIN32ASM

[复制链接]
发表于 2013-5-18 12:03:59 | 显示全部楼层 |阅读模式

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

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

x
  .386
  .model flat, stdcall
  option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include  windows.inc
include  user32.inc
includelib user32.lib
include  kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .data?
hInstance dd ?
hWinMain dd ?
hWinCount dd ?
hWinPause dd ?
hEvent  dd ?
dwOption dd ?
F_PAUSE  equ 0001h
F_STOP  equ 0002h
F_COUNTING equ 0004h
  .const
  IDD_DIALOG1   equ 101
IDC_STC1   equ 1001
IDC_BTN1   equ 1002
IDC_BTN2   equ 1003
IDC_EDT1   equ 1004
szStop  db '停止计数',0
szStart  db '计数',0
szing1  db "循环判断条件为假",0
szing2  db  "循环判断条件为真",0
szing3  db "进入PROC",0  
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Counter proc uses ebx esi edi,_lParam
  invoke MessageBox,hWinMain,offset szing3,NULL,MB_OK
  or dwOption,F_COUNTING
  and dwOption,not (F_STOP or F_PAUSE)
  invoke SetEvent,hEvent
  invoke SetWindowText,hWinCount,addr szStop
  invoke EnableWindow,hWinPause,TRUE
  xor ebx,ebx
  .while ! (dwOption & F_STOP)
   inc ebx
   invoke SetDlgItemInt,hWinMain,IDC_EDT1,ebx,FALSE
   invoke WaitForSingleObject,hEvent,INFINITE
  .endw
  invoke MessageBox,hWinMain,NULL,NULL,MB_OK
  invoke SetWindowText,hWinCount,addr szStart
  invoke EnableWindow,hWinPause,FALSE
  and dwOption,not (F_COUNTING or F_STOP or F_PAUSE)
  ret

_Counter endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
  local @dwThreadID
  mov eax,wMsg
;********************************************************************
  .if eax == WM_COMMAND
   mov eax,wParam
   .if ax == IDC_BTN1
    .if dwOption & F_COUNTING      ;1这里第一次循环IF结果为假执行绿色代码段~~~2:第二次按下该键码此判断结果为真,执行灰色语句,然后就是我不明白的地方了,程序执行到这里应该就不会有什么反应了但是这个程序执行了紫色代码段。这是为什么啊没看到哪里有调用啊,而且好像也不是走_Counter这个入口进去的。。。求解答啊~~~~感激啊!!!!!
     invoke SetEvent,hEvent
     or dwOption,F_STOP
     invoke MessageBox,hWinMain,offset szing2,NULL,MB_OK
    .else
     invoke CreateThread,NULL,0,offset _Counter,NULL,\      ;1:进入_COUNTER过程,返回dwoPTION的值为4,2:再次按下;IDC_BTN1键运行上方红色代码段
      NULL,addr @dwThreadID
     invoke CloseHandle,eax
     invoke MessageBox,hWinMain,offset szing1,NULL,MB_OK

    .endif
   .elseif ax == IDC_BTN2
    xor dwOption,F_PAUSE
    .if dwOption & F_PAUSE
     invoke ResetEvent,hEvent
    .else
     invoke SetEvent,hEvent
    .endif
   .endif
;********************************************************************
  .elseif eax == WM_CLOSE
   invoke CloseHandle,hEvent
   invoke EndDialog,hWnd,NULL
;********************************************************************
  .elseif eax == WM_INITDIALOG
   push hWnd
   pop hWinMain
   invoke GetDlgItem,hWnd,IDC_BTN1
   mov hWinCount,eax
   invoke GetDlgItem,hWnd,IDC_BTN2
   mov hWinPause,eax
   invoke CreateEvent,NULL,TRUE,FALSE,NULL
   mov hEvent,eax
;********************************************************************
  .else
   mov eax,FALSE
   ret
  .endif
  mov eax,TRUE
  ret
_ProcDlgMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
  invoke GetModuleHandle,NULL
  mov hInstance,eax
  invoke DialogBoxParam,eax,IDD_DIALOG1,NULL,offset _ProcDlgMain,NULL
  invoke ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  end start
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-10-7 18:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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