|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
|
|