王爽韩语 王爽第3版《汇编语言》讲稿
《汇编语言》课件 王爽著-清华大学出版社第17章使用BIOS进行键盘输入和磁盘读写17.1int9中断例程对键盘输入的处理17.2使用int16h中断例程读取键盘缓冲区17.3字符串的输入17.4应用int13h中断例程对磁盘进行读写引言大多数有用的程序都需要处理用户的输入,键盘输入是最基本的输入。
程序和数据通常需要长期存储,磁盘是最常用的存储设备。BIOS为这两种外设的I/O提供了最基本的中断例程,在本章中,我们对它们的应用和相关的问题进行讨论。
17.1int9中断例程对键盘输入的处理我们已经讲过,键盘输入将引发9号中断,BIOS提供了int9中断例程。CPU在9号中断发生后,执行int9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中。
17.1int9中断例程对键盘输入的处理一般的键盘输入,在CPU执行完int9中断例程后,都放到了键盘缓冲区中。
键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的入ASCII码。17.1int9中断例程对键盘输入的处理下面我们按照键盘缓冲区的逻辑结构,来看一下键盘输入的扫描码和对应ASCII码是如何写入键盘缓冲区的。
注意17.1int9中断例程对键盘输入的处理注意:在我们的课程中,仅在逻辑结构的基础上,讨论BIOS键盘缓冲区的读写问题。其实键盘缓冲区是用环形队列结构管理的内存区,但我们不对队列和环形队列的实现进行讨论,因为那是另一门专业课《数据结构》的内容。
17.1int9中断例程对键盘输入的处理下面,我们通过下面几个键:A、B、C、D、E、Shift_A、A的输入过程,简要地看一下int9中断例程对键盘输入的处理方法:处理键盘输入演示17.
2使用int16h中断例程读取键盘缓冲区BIOS提供了int16h中断例程供程序员调用。int16h中断例程中包含的一个最重要的功能是从键盘缓冲区中读取一个键盘输入,该功能的编号为0。
17.2使用int16h中断例程读取键盘缓冲区下面的指令从键盘缓冲区中读取一个键盘输入,并且将其从缓冲区中删除:movah,0 int16h结果:(ah)=扫描码,(al)=ASCII码。
17.2使用int16h中断例程读取键盘缓冲区下面,我们接着上一节中的键盘输入过程,看一下int16h如何读取键盘缓冲区。 int16h读键盘缓冲区演示17.
2使用int16h中断例程读取键盘缓冲区从上面我们可以看出,int16h中断例程的0号功能,进行如下的工作:(1)检测键盘缓冲区中是否有数据;(2)没有则继续做第1步;(3)读取缓冲区第一个字单元中的键盘输入;(4)将读取的扫描码送入ah,ASCII码送入al;(5)将己读取的键盘输入从缓冲区中删除。
17.2使用int16h中断例程读取键盘缓冲区可见,B1OS的int9中断例程和int16h中断例程是一对相互配合的程序,int9中断例程向键盘缓冲区中写入,int16h中断例程从缓冲区中读出。
它们写入和读出的时机不同,int9中断例程在有键按下的时候向键盘缓冲区中写入数据;而int16h中断例程是在应用程序对其进行调用的时候,将数据从键盘缓冲区中读出。
17.2使用int16h中断例程读取键盘缓冲区我们在编写一般的处理键盘输入的程序的时候,可以调用int16h从键盘缓冲区中读取键盘的输入。
编程,接收用户的键盘输入,输入“r”,将屏幕上的字符设置为红色:输入“g”,将屏幕上的字符设置为绿色;输入“b”,将屏幕上的字符设置为蓝色。程序源码特别提示检测点17.1(page304)没有通过此检测点,请不要向下进行!
17.3字符串的输入用户通过键盘输入的通常不仅仅是单个字符而是字符串。下面我们讨论字符串输入中的问题和简单的解决方法。17.3字符串的输入最基本的字符串输入程序,需要具备下面的功能:(1)在输入的同时需要显示这个字符串;(2)一般在输入回车符后,字符串输入结束;(3)能够删除已经输入的字符。
对于这三个功能,我们可以想象在DOS中,输入命令行时的情况。17.3字符串的输入编写一个接收字符串的输入子程序,实现上面三个基本功能。
因为在输入的过程中需要显示,子程序的参数如下:(dh)、(dl)=字符串在屏幕上显示的行、列位置;ds:si指向字符串的存储空间,字符串以0为结尾符。
下面我们进行分析 17.3字符串的输入(1)字符的输入和删除。 每个新输入的字符都存储在前一个输入的字符之后,而删除是从最后面的字符进行的。我们看下面的过程:空字符串:输入“a”:a输入“b”:ab输入“c”:abc输入“d”:abcd删除一个字符:abc删除一个字符:ab删除一个字符:a删除一个字符:17.3字符串的输入可以看出在字符串输入的过程中,字符的输