首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

求 罗云彬win32 汇编 的调试 步骤

2013-06-19 
求 罗云彬win32 汇编 的调试 方法。下面这个程序 编译通过,但是 运行时出错,求高手 教一个 调试方法,找到出

求 罗云彬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


[解决办法]
出现异常,看什么表现,从症状大致可以判别问题可能在哪些地方,然后就针对地下断点查看是否正确。
稍微有规模的程序,结构化、模块化是需要的,这样可以在有问题时能很快地定位问题、修正错误。

热点排行