专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

关于debug下调试程序的疑问,该怎么解决

发布时间:2010-06-14 15:47:53 文章来源:www.iduyao.cn 采编人员:星星草
关于debug下调试程序的疑问
在下最近在cmd下debug中调试程序的时候发生了这样的问题:
拿下面的程序来说
这个程序时王爽《汇编语言》第二版的实验15

功能就是装入新的 int9例程
使得,再按下A键并松开后,显示满窗口的'A'

调试完成之后

我按下了A键并松开,显示了满窗口的'A'

但与此同时,
再按键盘的时候就没用了
窗口中能看到光标一闪一闪了
但是键盘也不能输入了
一直都是满窗口的'A'

想用q命令退出debug也不行
只得把cmd窗口关了,重新运行cmd

请问这是怎么回事?


assume cs:code

stack segment
 db 128 dup (0)
stack ends

code segment
w: 
  push cs
  pop ds
  mov si,offset int9  
   
  mov ax,0
  mov es,ax
  mov di,204h
   
  mov cx,offset int9end-offset int9
  cld
  rep movsb ;将新的中断例程写入0:204h
   
  push es:[9*4]
  pop es:[200h]
  push es:[9*4+2]
  pop es:[202h] ;原int9中断例程地址存入0:200中
   
  cli
  mov word ptr es:[9*4],204h
  mov word ptr es:[9*4+2],0
  sti ;int9 中断例程地址指向0:204
   
  mov ax,4c00h
  int 21h

int9:
  push ax
push bx
push cx
push es

in al,60h
cmp al,9eh
jne ok  

mov ax,0b800h
mov es,ax
mov bx,0
mov cx,4000
  s: mov byte ptr es:[bx],'A'
add bx,2
loop s
jmp short int9ret

ok:
pushf
call dword ptr cs:[200h] ;调用中断程序后,cs为0

int9ret: pop es
  pop cx
pop bx
pop ax
iret
int9end:nop

code ends
end w

------解决方案--------------------
debug由于自身所在V8086的原因,在调试一些和单步中断,读写显存时

会出现一些问题。解决办法是,使用一些带有调试功能的虚拟机或者

使用一定调试技巧进行调试。
------解决方案--------------------
一,把新INT 9里一进去就要将IF和TF位置0,否则进新INT 9后还可以响应键盘中断,在按下键盘后可能你没那么反映敏捷,只保证只INT 9只响应一下,那就可能造成嵌套,如果在进INT 9后的那几个PUSH后再响应问题就出来了.
二,无论按下的是不是a键,都要让原INT 9执行一下,虽然我不知道原INT 9具体怎么在操作,但保险系数会高点...
三,loop 2000次就够了...25*80....
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: