Int 9h是否在端口60h出现新通断码后立即调用?拟链式调用
关于Int 9h与键盘扫描码的调用时机问题
咱们先直接给结论:是的,这两个问题的答案都是肯定的——Int 9h会在端口60h出现新扫描码的瞬间被调用,而且只要端口60h有新的通断码(make/break code)到达,Int 9h总会立即被触发。
背后的工作逻辑其实很清晰
结合你提到的资料来看:
当按键被按下时,键盘会将对应的扫描码发送给键盘控制器,键盘控制器对其进行转换后向CPU发出中断请求。
你提到的那份PDF第1155页的细节也能佐证这一点:
当扫描码到达键盘控制器的输入缓冲区后,控制器会先完成必要的格式转换(比如把键盘原生的扫描码转换成系统可识别的标准格式),然后立刻通过IRQ1中断线向CPU发送硬件中断请求。CPU一旦响应这个请求,就会立刻调用Int 9h中断服务程序,而Int 9h的核心任务之一就是从端口
60h读取这个刚准备好的新扫描码。
关于你想做链式调用的可行性
这个思路完全靠谱!因为每次新的扫描码就绪时,Int 9h都会被实时触发,你可以通过链式调用的方式,把自己的输入处理代码插入到原Int 9h的执行流程中(比如在原程序读取扫描码前先处理,或者在它执行完后做后续逻辑),实现对键盘输入的即时响应。不过有几个小细节要注意:
- 链式调用时一定要保存好所有寄存器的状态,用完后恢复原样,不然会破坏原中断服务程序的执行环境,导致系统出问题
- 你的自定义代码要尽量精简高效,别占用太多CPU时间,否则可能会导致键盘输入延迟,甚至丢码
- 别忘了在读取端口
60h的扫描码后,给键盘控制器发送应答信号(一般是向端口61h写入特定值),不然键盘控制器会认为之前的扫描码没被处理,停止发送后续的扫描码
内容的提问来源于stack exchange,提问作者bad
相关产品推荐
相关产品推荐

