如果。。。 发表于 2012-8-18 16:33:37

Debug窗口一闪即逝,有谁和我一样?

本帖最后由 如果。。。 于 2012-8-18 19:31 编辑

在做中断试验时,照小甲鱼的样子写了个调用除法溢出中断例程。按道理说结果是应该会在那个Debug的黑窗口中间显示出一个绿色的感叹号,并出现除法溢出提示(Divide overflow)的,可结果是一闪而过,只在cmd的窗口下显示了Divide overflow。
如图,http://ww4.sinaimg.cn/mw690/92c7cb9bgw1dw12aao4p3j.jpg
我想问一下,为什么我的程序没有在Debug下停顿下来而是直接一闪就回到了cmd命令提示符下?有谁和我的情况一样?谁能帮忙解释一下?
Oh Ye! 图片终于贴上去了!!!

如果。。。 发表于 2012-8-18 16:35:54

图片怎么没了?郁闷。。。:curse::curse::curse::curse:

如果。。。 发表于 2012-8-18 16:37:41

http://hiphotos.baidu.com/runing%CE%CF%C5%A3/pic/item/a1915409213fb80e7dfd384d36d12f2eb83894f8.jpg

lukelqz 发表于 2012-8-18 16:52:23

本帖最后由 lukelqz 于 2012-8-18 16:53 编辑

你的情况属于系统滚屏了。参考下面的帖子
http://bbs.fishc.com/forum.php?m ... =1&extra=#pid359750
按照3楼做法试试

如果。。。 发表于 2012-8-18 17:06:15

lukelqz 发表于 2012-8-18 16:52 static/image/common/back.gif
你的情况属于系统滚屏了。参考下面的帖子
http://bbs.fishc.com/forum.php?m ... =1&extra=#pid359750
按 ...

谢谢你!不过刚才我按你说的用cls清屏试了一下,可结果还是一样。然后我又按你说的在
mov ax,4c00h
int 21h
前面加上相当于暂停的
mov ah,7
int 21h
也还是一样,一闪即逝,就回到了cmd中。没看到绿色的感叹号。。。。郁闷。。。

lukelqz 发表于 2012-8-18 17:09:09

如果。。。 发表于 2012-8-18 17:06 http://bbs.fishc.com/static/image/common/back.gif
谢谢你!不过刚才我按你说的用cls清屏试了一下,可结果还是一样。然后我又按你说的在
mov ax,4c00h
int ...

{:5_103:}把你代码贴出来看看。暂停都显示不出来,那我真心怀疑你的代码了。

如果。。。 发表于 2012-8-18 17:12:24

lukelqz 发表于 2012-8-18 17:09 static/image/common/back.gif
把你代码贴出来看看。暂停都显示不出来,那我真心怀疑你的代码了。

assume cs:code
code segment
start:        mov ax,0b800h
                mov es,ax
                mov byte ptr es:,'!'        ;往显存的中间位置写入一个感叹号
                mov byte ptr es:,2        ;设置颜色为绿色
               
                int 0                ;调用除法溢出中断
               
                mov ah,7
                int 21h
               
                mov ax,4c00h
                int 21h
code ends
end start
       

lukelqz 发表于 2012-8-18 17:14:05

如果。。。 发表于 2012-8-18 17:12 http://bbs.fishc.com/static/image/common/back.gif
assume cs:code
code segment
start:      mov ax,0b800h


==我看看

如果。。。 发表于 2012-8-18 17:15:37

lukelqz 发表于 2012-8-18 17:14 static/image/common/back.gif
==我看看

嗯嗯!!!!3Q啦!:'(

lukelqz 发表于 2012-8-18 17:24:59

你的int0中断例程还是调用的是原来的系统的中断例程,当然显示不出来咯。
mov byte ptr es:,'!'                        
mov byte ptr es:,2 把上面的语句写入int0中断例程才行啊。
我要下班吃饭去了,来不及和你细讲,给你两个源代码。
第一个是0号中断的安装程序。

assume cs:code
code segment
start: mov ax,cs ;原地址
mov ds,ax
mov si,offset do0
mov ax,0 ;目的地址
mov es,ax
mov di,200h
mov cx,offset do0end - offset do0
cld
rep movsb

mov word ptr es:,200h ;设置中断向量表
mov word ptr es:,0

mov ax,4c00h
int 21h

do0: jmp short do0start
db 'welcome luke to masm!'            ;这里可以改
do0start:
mov ax,cs ;设置ds:si指向字符串
mov ds,ax
mov si,202h

mov ax,0b800h ;设置es:di显存
mov es,ax
mov di,12*160+36*2

mov cx,21
s: mov al,
mov ah,02h
mov es:,ax
inc si
add di,2
loop s

mov ax,4c00h
int 21h

do0end:
nop

code ends
end start

第二个是测试0号中断是否被我们修改成我们想要显示的内容。

assume cs:code

code segment
start: mov ax,1000h
mov bh,1h
div bh                                        ;这里出现了除法溢出,系统自动调用int0号中断,其实已经被我们修改了
mov ax,4c00h
int 21h
code ends

end start

你把两个源码都编译一下,然后先运行第一个源码,安装覆盖掉原来的int0中断,然后运行第二个源码测试。

原理自己研究一下吧,我有空再来解释

lukelqz 发表于 2012-8-18 17:29:14

你的那个代码也可以显示的。但是没用到中断显示。就是直接显示而已。给你看下调试结果。
开始也是一闪就没了。进入一下debug,然后q退出,然后再运行,就有显示了。

lukelqz 发表于 2012-8-18 17:30:07

第十楼当我废话好了,11楼才符合你的问题。

如果。。。 发表于 2012-8-18 17:31:34

lukelqz 发表于 2012-8-18 17:24 static/image/common/back.gif
你的int0中断例程还是调用的是原来的系统的中断例程,当然显示不出来咯。 把上面的语句写入int0中断例程才行 ...

好吧,谢谢你咯!!其实你说的我知道。。。我要的就是默认的int 0的中断例程,我只是纠结我的为什么不会像小甲鱼的电脑那样运行(注意是运行不是调试)一下那个程序,它会停在Debug的界面?而我的是直接回到了cmd界面。。。要是一步一步的Debug那个程序,然后直接用g命令,直接跳到mov ax,4c00那的时候会看到屏幕中间有个绿色的感叹号。我所郁闷的是为什么直接在cmd中运行 7.exe 没有感叹号,而用debug跳转才有。。。。

lukelqz 发表于 2012-8-18 18:11:44

如果。。。 发表于 2012-8-18 17:31 static/image/common/back.gif
好吧,谢谢你咯!!其实你说的我知道。。。我要的就是默认的int 0的中断例程,我只是纠结我的为什么不会像 ...

你看到我11楼的图了吗?直接运行也可以显示的

如果。。。 发表于 2012-8-18 19:21:12

本帖最后由 如果。。。 于 2012-8-18 19:28 编辑

lukelqz 发表于 2012-8-18 18:11 static/image/common/back.gif
你看到我11楼的图了吗?直接运行也可以显示的
看到了!首先谢谢你这么耐心的解答!可是遗憾的告诉你,在我这边还是不行。不显示,应该是直接被刷掉了。我想贴图也贴不上去。。。郁闷,只能把cmd里面的结果给复制下来了。你看看吧
http://ww3.sinaimg.cn/mw690/92c7cb9bgw1dw126vx2emj.jpg
F:\try>7

Divide overflow

F:\try>debug
-q

F:\try>7

Divide overflow

F:\try>debug 7.exe
-q

F:\try>7

Divide overflow

F:\try>

lukelqz 发表于 2012-8-18 20:37:43

如果。。。 发表于 2012-8-18 19:21 static/image/common/back.gif
看到了!首先谢谢你这么耐心的解答!可是遗憾的告诉你,在我这边还是不行。不显示,应该是直接被刷掉了。 ...

{:5_103:}无能无力了,可能你的电脑太nb了
页: [1]
查看完整版本: Debug窗口一闪即逝,有谁和我一样?