| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 674 人关注过本帖
标题:求教下为什么会卡死哈,谢谢哈
只看楼主 加入收藏
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:4 
求教下为什么会卡死哈,谢谢哈
;王爽实验15 安装新中断替代int 9h 程序只能运行在dosbox里,windows下改int9会被自动改回来的
;其它按键可以正常,当按A后可以显示满屏A但无法退回到c:\>下直接在满屏A那里卡住不响应了


assume cs:code
code segment
main:
mov ax,0
mov es,ax
mov di,204h
mov ax,cs
mov ds,ax
mov si,newint9
mov cx,offset endint9- offset newint9

mov ax,es:[9*4] ;这4句 保存原int9 ip和cs到200h 202h处
mov es:[200h],ax
mov ax,es:[9*4+2]
mov es:[202h],ax
rep movsb ;复制新中断到204开始处
cli ;安装新中断到向量表
mov word ptr es:[9*4],204h  
mov word ptr es:[9*4+2],0
sti
mov ax,4c00h
int 21h

newint9: ;新中断程序
push ax
push cx
push es
push di

in al,060h
cmp al,01eh+80h ;A键的断码?
jne oldint9 ;不是
mov cx,0B800h ;是的话,显示满屏A
mov es,cx
mov cx,2000
mov di,0
s1:
mov byte ptr es:[di],'A'
add di,2
loop s1
jmp exit

oldint9: ;调用原先int9h处理按键  
pushf  
call dword ptr cs:[200h]
exit:
pop di
pop es
pop cx
pop ax
iret
endint9:nop
code ends
end main
搜索更多相关主题的帖子: windows 
2014-05-24 20:28
xiexiejohn
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-4-21
收藏
得分:0 
结贴,csdn有回答了
2014-05-26 20:39
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:20 
这个程序在windows_xp sp2下运行是正常的。
只修改了一处:
    mov si,newint9 改为 mov si,offset newint9

输入的不是“a”时,一切正常。输入“a”后
显示满屏“a”,显示后就直接退出,而没有
完成int9的其他功能,所以键盘失效,卡住了。
2014-05-28 09:16
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
删除这一句:
jmp exit
就不卡了
2014-05-28 10:17
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
     int9在人机交互中无疑是一个很重要的中断,
对于外设接口的编程本来是汇编语言的强项,但
又由于涉及到许多硬件的知识,多说不得。
     从事计算机自动化控制的,能有更多的见解,
一些复杂的应用需要对int9重新编程吗?
     楼主的帖很有启迪,我都发表了三个回复了,
只是含金量不足。
2014-05-31 12:36
快速回复:求教下为什么会卡死哈,谢谢哈
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015385 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved