My *_*ug. 7 assembly pc interrupt x86-16
在我的8086汇编程序中执行循环时,有一个键盘按键阈值,如果你按键太多次,PC扬声器将开始发出哔哔声.这是令人讨厌的,它减慢了我的程序爬行速度,因为CPU必须跳离我的程序并花半秒钟来驱动扬声器.
几个月前我开始在实际硬件上测试我的程序之前,我甚至都不知道这个问题.这个问题在DosBox中不是问题,甚至在DosBox中安装的Dos 6.22中也不是问题.所以它必须是PC BIOS内置的一些低级硬件中断,我不太了解这些东西.
它出现在我的286机器和我的Pentium mmx笔记本电脑上,无论操作系统如何.
即使它只是一个死循环,我甚至没有轮询键盘输入,如果我按太多键也会发出蜂鸣声
我已经尝试将我的输入代码包装在cli和sti中,希望能够从系统中屏蔽我的键盘输入,但这确实不起作用.我只在程序中的一个奇点处收集扫描码,所以其余的时间都启用了中断.所以绝大多数时候仍然会发出哔哔声.
必须有一些我可以禁用的硬件寄存器或其他东西.我仔细查看了Boch的端口列表(http://bochs.sourceforge.net/techspec/PORTS.LST),寻找类似的东西,但没有看到任何东西.
也许我可以关闭中断?我想很多汇编程序员一定遇到过这个问题,但Google在这里根本没有帮助我.
BIOS正在发出警告,警告您键盘输入缓冲区已满.在DOS中,这通常发生在(永久或暂时)不读取键盘输入的程序中.
在您的情况下,您正在阅读键盘输入,但不是正确的方式.您正在直接从硬件(I/O端口60h)读取,但显然您没有捕获键盘中断(INT 09h).这意味着在后台,BIOS也在处理键盘输入.这有两个令人讨厌的副作用.
基本上,有三种方法可以解决这个问题.
强烈建议使用第一个选项.如果您的应用程序必须能够检测到同时持有的多个密钥(通常是视频游戏),则第二个是首选.这不是一项微不足道的任务,因此您需要一些帮助.
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |