鱼C论坛

 找回密码
 立即注册
查看: 3389|回复: 15

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

[复制链接]
发表于 2012-8-18 16:33:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

在做中断试验时,照小甲鱼的样子写了个调用除法溢出中断例程。按道理说结果是应该会在那个Debug的黑窗口中间显示出一个绿色的感叹号,并出现除法溢出提示(Divide overflow)的,可结果是一闪而过,只在cmd的窗口下显示了Divide overflow。
如图,

                               
登录/注册后可看大图

我想问一下,为什么我的程序没有在Debug下停顿下来而是直接一闪就回到了cmd命令提示符下?有谁和我的情况一样?谁能帮忙解释一下?
Oh Ye! 图片终于贴上去了!!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-18 16:35:54 | 显示全部楼层
图片怎么没了?郁闷。。。:curse::curse::curse::curse:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-18 16:37:41 | 显示全部楼层

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 16:52:23 | 显示全部楼层
本帖最后由 lukelqz 于 2012-8-18 16:53 编辑

你的情况属于系统滚屏了。参考下面的帖子
http://bbs.fishc.com/forum.php?m ... =1&extra=#pid359750
按照3楼做法试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-18 17:06:15 | 显示全部楼层
lukelqz 发表于 2012-8-18 16:52
你的情况属于系统滚屏了。参考下面的帖子
http://bbs.fishc.com/forum.php?m ... =1&extra=#pid359750
按 ...

谢谢你!不过刚才我按你说的用cls清屏试了一下,可结果还是一样。然后我又按你说的在
mov ax,4c00h
int 21h
前面加上相当于暂停的
mov ah,7
int 21h
也还是一样,一闪即逝,就回到了cmd中。没看到绿色的感叹号。。。。郁闷。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 17:09:09 | 显示全部楼层
如果。。。 发表于 2012-8-18 17:06
谢谢你!不过刚才我按你说的用cls清屏试了一下,可结果还是一样。然后我又按你说的在
mov ax,4c00h
int ...


把你代码贴出来看看。暂停都显示不出来,那我真心怀疑你的代码了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-18 17:12:24 | 显示全部楼层
lukelqz 发表于 2012-8-18 17:09
把你代码贴出来看看。暂停都显示不出来,那我真心怀疑你的代码了。

assume cs:code
code segment
start:        mov ax,0b800h
                mov es,ax
                mov byte ptr es:[12*160+40*2],'!'        ;往显存的中间位置写入一个感叹号
                mov byte ptr es:[12*160+40*2+1],2        ;设置颜色为绿色
               
                int 0                ;调用除法溢出中断
               
                mov ah,7
                int 21h
               
                mov ax,4c00h
                int 21h
code ends
end start
       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 17:14:05 | 显示全部楼层
如果。。。 发表于 2012-8-18 17:12
assume cs:code
code segment
start:        mov ax,0b800h


==我看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-18 17:15:37 | 显示全部楼层

嗯嗯!!!!3Q啦!:'(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 17:24:59 | 显示全部楼层
你的int0中断例程还是调用的是原来的系统的中断例程,当然显示不出来咯。
mov byte ptr es:[12*160+40*2],'!'                        
mov byte ptr es:[12*160+40*2+1],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:[0],200h ;设置中断向量表
mov word ptr es:[2],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,[si]
mov ah,02h
mov es:[di],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中断,然后运行第二个源码测试。

原理自己研究一下吧,我有空再来解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 17:29:14 | 显示全部楼层
你的那个代码也可以显示的。但是没用到中断显示。就是直接显示而已。给你看下调试结果。 测试.png
开始也是一闪就没了。进入一下debug,然后q退出,然后再运行,就有显示了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 17:30:07 | 显示全部楼层
第十楼当我废话好了,11楼才符合你的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-18 17:31:34 | 显示全部楼层
lukelqz 发表于 2012-8-18 17:24
你的int0中断例程还是调用的是原来的系统的中断例程,当然显示不出来咯。 把上面的语句写入int0中断例程才行 ...

好吧,谢谢你咯!!其实你说的我知道。。。我要的就是默认的int 0的中断例程,我只是纠结我的为什么不会像小甲鱼的电脑那样运行(注意是运行不是调试)一下那个程序,它会停在Debug的界面?而我的是直接回到了cmd界面。。。要是一步一步的Debug那个程序,然后直接用g命令,直接跳到mov ax,4c00那的时候会看到屏幕中间有个绿色的感叹号。我所郁闷的是为什么直接在cmd中运行 7.exe 没有感叹号,而用debug跳转才有。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 18:11:44 | 显示全部楼层
如果。。。 发表于 2012-8-18 17:31
好吧,谢谢你咯!!其实你说的我知道。。。我要的就是默认的int 0的中断例程,我只是纠结我的为什么不会像 ...

你看到我11楼的图了吗?直接运行也可以显示的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-18 19:21:12 | 显示全部楼层
本帖最后由 如果。。。 于 2012-8-18 19:28 编辑
lukelqz 发表于 2012-8-18 18:11
你看到我11楼的图了吗?直接运行也可以显示的

看到了!首先谢谢你这么耐心的解答!可是遗憾的告诉你,在我这边还是不行。不显示,应该是直接被刷掉了。我想贴图也贴不上去。。。郁闷,只能把cmd里面的结果给复制下来了。你看看吧

                               
登录/注册后可看大图

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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-18 20:37:43 | 显示全部楼层
如果。。。 发表于 2012-8-18 19:21
看到了!首先谢谢你这么耐心的解答!可是遗憾的告诉你,在我这边还是不行。不显示,应该是直接被刷掉了。 ...

无能无力了,可能你的电脑太nb了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-27 21:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表