. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  由课程14.4和15.5引发的思考:请教高手解释int9的作用到底是什么  [待解决] 回复[ 5次 ]   点击[ 438次 ]  
ljm920819
[帖 主]   [ 发表时间:2011-07-11 17:59 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-05-27 23:32
在课程15.4和15.5中,在自己编的int9中断程序中,有一句 in al,60h ;
这之后都有pushf;call dword ptr cs:[200h]这两句再调用原来的int9中断程序;
我不理解int9的作用具体是什么,我的想法是有了in al,60h不就够了吗,此条指令可以读取键盘输入情况,然后直接用cmp指令进行比较不行吗,为什么还要调用int9中断程序呢。。。然后我把这两个课程中的程序中的“pushf;call dword ptr cs:[200h]”删去,结果在运行的时候,颜色能改变,可是只能改变一次,所以我知道我肯定是错了,但是请问各位高手,调用新编的int9程序中调用原来的int9中断程序的作用是什么呢?它和in al,60h的作用不重复吗?
miaoasm
[第1楼]   [ 回复时间:2011-07-24 14:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-13 15:40
书上有一句话,
发生键盘中断的时候,要做许多事情,而这些事情不是以学到这一步就能够理解的。

为了能执行自定义的INT9,而又在不了解如何做那些事情的基础上,把那些事情做了,
可以调用 系统自带的 INT9,这个原来的INT9可以帮助你把 应该做的事情都做掉,不用你操心

而你需要做的,就是 把原来INT9的 入口地址保存,并且在你自定义的INT9中,调用那段系统自带的INT9程序即可

新手个人理解,不对别骂,谢谢
miaoasm
[第2楼]   [ 回复时间:2011-07-24 14:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-06-13 15:40
IN AL,6OH 只是从端口把当前的 扫描码读出来,
至于 其他功能---比如把你输入的字符显示出来,都是 老 INT9做的事情,
如果你不调用老INT9的话,就不能做出来那些功能了

这就是 调用老INT9 程序的 作用吧
juende66
[第3楼]   [ 回复时间:2011-12-06 15:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-11-11 23:27
9h 中断例程 是 键盘中断例程   
  如果想实现 按一下 a 就改变 屏幕颜色的 功能 同时不影响其他按键的默认功能   
  首先就要按键盘a 然后 默认会引发9h号 中断例程  但 9h号中断例程 不会因为按了a就改变屏幕颜色

  如果要让9h号中断例程中具有按下a 就改变颜色的功能 就要修改9h号中断例程 
  但目前的水平谈何容易,所以 就想到了 在9h号中断套一层 具有按下a就改变颜色的功能

  也就是:本来按键是直接 被9h号中断例程处理 ,现在要写一个程序 实现按下a改变颜色 接着再去调用原       bios的9h号中断例程, 用这个程序的入口替换原来9h号中断例程的入口地址 间接的调用9h号中断例程          这样 既实现 a 的功能 也不影响 其他按键的功能   

 所以就叫着  修改的中断例程 中 调用 原中断例程
e56004474
[第4楼]   [ 回复时间:2012-04-23 13:40 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1016&qkSg=2&qID=60002&readSg=1

踫到了这个问题,稍微找了下。
p275页,int9 主要干的事。

(1) 读出60h端口中的扫描码
看到这条,那是不是新int9源程序中的'in al,60h'这条指令也省掉么?
有待测试。

个人觉得,如果不调用 原int 9 程序,那么只有按到我们判断的键时,有用。

不调用原int9程序,直接:
in al,60h
cmp al,3bh   ;f1的扫描码
比较省事些,
如果按别的键需要处理,那么就可能需要调用原int9来处理了。

或者 mov ah,1
    int 21h
的时候,那么新int 9就需要调用原int9功能来实现了。
e56004474
[第5楼]   [ 回复时间:2012-04-23 13:45 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:1
注册日期:2008-09-04 16:35
p300
既然键盘缓存区有16个字单元,为什么只存15个扫描码和所对应的ascii码呢?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved