第十七章:使用BIOS进行键盘输入和磁盘读写01
让编程改变世界
Change the world by program
引言
大多数有用的程序都需要处理用户的输入,键盘输入是最基本的输入。 程序和数据通常需要长期存储,磁盘是最常用的存储设备。 BIOS 为这两种外设的I/O提供了最基本的中断例程,在本章中,我们对它们的应用和相关的问题进行讨论。int 9中断例程对键盘输入的处理
我们已经讲过,键盘输入将引发9 号中断,BIOS 提供了int 9 中断例程。 CPU 在9 号中断发生后,执行int 9中断例程,从60h 端口读出扫描码,并将其转化为相应的ASCII 码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中。 所以,一般的键盘输入,在CPU 执行完int 9 中断例程后,都放到了键盘缓冲区中。 键盘缓冲区中有16 个字单元,可以存储15个按键的扫描码和对应的入ASCII 码。 下面我们按照键盘缓冲区的逻辑结构,来看一下键盘输入的扫描码和对应 ASCII 码是如何写入键盘缓冲区的。 下面,我们通过下面几个键: A、B、C、D、E、shift_A、A 请看动画演示过程! [kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.fishc.com/wp-content/uploads/2012/07/17_int9写键盘缓冲区.swf" width="400" height="300" targetclass="flashmovie" wmode="transparent"] [/kml_flashembed]BIOS提供了int 16h 中断例程供程序员调用
int 16h 中断例程中包含的一个最重要的功能是从键盘缓冲区中读取一个键盘输入,该功能的编号为0。 下面的指令从键盘缓冲区中读取一个键盘输入,并且将其从缓冲区中删除:mov ah,0
int 16h
结果:(ah)=扫描码,(al)=ASCII码。 下面,我们接着上一节中的键盘输入过程,看一下 int 16h 如何读取键盘缓冲区。 int 16h读键盘缓冲区演示! [kml_flashembed publishmethod="static" fversion="8.0.0" movie="http://blog.fishc.com/wp-content/uploads/2012/07/17_int16读键盘缓冲区.swf" width="400" height="300" targetclass="flashmovie" wmode="transparent"] [/kml_flashembed]