关于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....
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
MSN通讯协议逆向
MSN 进行数据通讯中,据说用了TWN认证,通过SSL/TLS连接到login.passport.com和 loginnet.passportr.com 等服务器。
...
-
win7+64位cpu的exe反汇编问题,多次问人,无果
vs20008写的一个很简单的c++控制台程序
平台是:win7 64位操作系统
用od进行反汇编,...
-
可能很白痴的问题:想给ax赋一个负数怎么做?
比如想要赋一个-5给ax,是不是只有求出这个-5的补码,然后mov进这个补码这一种方法?
------...
-
居然显示不出负数来,悲剧
Assembly code
.386
.model flat,stdcall
include kernel32.inc
includelib kernel32.lib
include ms...
-
call far ptr '标号'的问题[在线等答案]
为什么ax会是1010?不是1006??求详细解答
难道call far ptr不是执行了push cs,push ip,jm...
-
CPU的程序计数器PC和指令指针寄存器IP是一个东西吗?
看上去好像功能完全一样,又觉得不应该是一回事,求教
------解决方案----------...
-
菜鸟问题,高人来帮忙
编程,统计data段中数值为8的字节的个数,用ax保存结果
我的代码
Assembly code
assume cs:code,ds:data
data se...
-
一个死循环问题
什么原因造成内循环才刚循环一次还没完,到了loop s1的时候cx突然变成F?
Assembly code
assume cs:codesg,ds:datas...
-
初学MUL乘法指令,写法求解释下
MUL r8/m8 ;无符号字节乘:AX←AL×r8/m8
MUL r16/m16 ;无符号字乘:DX.AX←AX×r16/...
-
汇编如何 取到8051的P0口的内容呢?
Assembly code
ORG 0000H
AJMP START
ORG 0030H
START: MOV P0,#00H
LOOP: ...