读书人

DEBUG中的程序跟踪有关问题

发布时间: 2012-02-11 09:51:35 作者: rapoo

DEBUG中的程序跟踪问题
编写了一段汇编, 在DEBUG跟踪时使用-T选项, 但发现到一处地方时产生的下一指令却开始不与所写的对应了, 但结果是对的。 想弄清楚这件事, 请高手赐教。 谢谢。代码如下:
Sseg segment stack
db1024 dup (?)
Sseg ends
;
Dseg segment
discvPROCFAR
pushax
pushdx
;
movah, 02h
movdl, 32d
int21h ;跟踪到这里时, 下面的指令就对不上了。
movdl, 65d
int21h
popdx
popax
ret
discvENDP
Dseg ends
;
Cseg segment
ASSUME cs:Cseg, ss:Sseg, ds:Dseg
;
MAIN:
movax, 1234d
pushax
callFAR PTR discv
calldisp
;
movah, 04ch
int 21h
;
disp PROC
pushax
pushdx
movah, 02h
movdl, 'h'
int21h
movdl, 'e'
int21h
;
callFAR PTR discv
popdx
popax
;
ret
disp ENDP

Cseg ends
END MAIN

上面已经标出了跟不到的地方, 请高手赐教, 再次感谢。

[解决办法]
-T是让CPU执行一条指令后中断,所以会中断在int 21h里面,如果要一次完成int 21h可以用-P单步调试。
[解决办法]
debug在调试某些和显存,中断例程相关的代码是可能会出现异常情况。
[解决办法]
我来个最通俗的解释:
比如: 用C语言的打印字符串的函数printf().
当你跟踪在这个函数的时候,如果你跟到这个printf()里面去了,那么你就会看到和你想的不一样了。
但是结果是对的!
那个int 21也一样,这是个中断指令,其实就是类似一个系统的函数调用。所以你用单步跟踪T指令,跟到这个里面去了。所以看到的和你想的不一样了!

用一楼提到的-P指令,直接通过这个int 21中断
[解决办法]
已经进入中断了,即函数调用了,后面指令是中断中的指令了。

读书人网 >汇编语言

热点推荐