当前位置: 代码迷 >> 汇编语言 >> DEBUG中的程序跟踪有关问题
  详细解决方案

DEBUG中的程序跟踪有关问题

热度:1523   发布时间:2013-02-26 00:00:00.0
DEBUG中的程序跟踪问题
编写了一段汇编, 在DEBUG跟踪时使用-T选项, 但发现到一处地方时产生的下一指令却开始不与所写的对应了, 但结果是对的。 想弄清楚这件事, 请高手赐教。 谢谢。代码如下:
Sseg segment stack
db 1024 dup (?)
Sseg ends
;
Dseg segment
discv PROC FAR
push ax
push dx
;
mov ah, 02h
mov dl, 32d
int 21h ;跟踪到这里时, 下面的指令就对不上了。
mov dl, 65d
int 21h
pop dx
pop ax
ret
discv ENDP
Dseg ends
;
Cseg segment
ASSUME cs:Cseg, ss:Sseg, ds:Dseg
;
MAIN:
mov ax, 1234d
push ax
call FAR PTR discv
call disp
;
mov ah, 04ch
int 21h
;
disp PROC
push ax
push dx
mov ah, 02h
mov dl, 'h'
int 21h
mov dl, 'e'
int 21h
;
call FAR PTR discv
pop dx
pop ax
;
ret
disp ENDP

Cseg ends
END MAIN

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

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

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