求 罗云彬win32 汇编 的调试 方法。
下面这个程序 编译通过,但是 运行时出错,求高手 教一个 调试方法,找到出错的地方。
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAINequ1000
DLG_MAINequ1000
IDC_COUNTERequ1001
IDC_PAUSEequ1002
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstancedd?
hWinMaindd?
hWinCountdd?
hWinPausedd?
dwOptiondd?
F_PAUSEequ0001h
F_STOPequ0002h
F_COUNTINGequ0004h
.const
szStopdb'停止计数',0
szStartdb'计数',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_Counterprocuses ebx esi edi ,_lParam
ordwOption,F_COUNTING
anddwOption,not(F_PAUSE or F_STOP)
invokeSetWindowText,hWinCount,addr szStop
invokeEnableWindow,hWinPause,TRUE
xor ebx,ebx
.while!(dwOption & F_STOP)
.if!(dwOption & F_PAUSE)
inc ebx
invokeSetDlgItemInt,hWinMain,IDC_COUNTER,ebx,FALSE
.endif
.endw
invokeSetWindowText,hWinCount,addr szStart
invokeEnableWindow,hWinPause,FALSE
anddwOption,not (F_COUNTING or F_STOP or F_PAUSE)
ret
_Counterendp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMainprocuses ebx edi esi hWnd,uMsg,wParam,lParam
local@dwTreadId
moveax,uMsg
;********************************************************************
.ifeax ==WM_COMMAND
moveax,wParam
.ifax == IDOK
.ifdwOption & F_COUNTING
ordwOption,F_STOP
.else
invoke CreateThread,NULL,0,addr _Counter,NULL,\
NULL,@dwTreadId;创建线程
invokeCloseHandle,eax
.endif
.elseifax == IDC_PAUSE
xordwOption,F_PAUSE
.endif
;********************************************************************
.elseifeax ==WM_CLOSE
invokeEndDialog,hWnd,NULL
;********************************************************************
.elseifeax == WM_INITDIALOG
push hWnd
pop hWinMain
invokeGetDlgItem,hWnd,IDOK
movhWinCount,eax
invokeGetDlgItem,hWnd,IDC_PAUSE
movhWinPause,eax
;********************************************************************
.else
moveax,FALSE
ret
.endif
;********************************************************************
xoreax,eax
ret
_ProcDlgMainendp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
invokeGetModuleHandle,NULL
movhInstance,eax
;??? addr _ProcDlgMain
;invokeDialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invokeDialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invokeExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
endstart