第十七节:使用BIOS进行键盘输入和磁盘读写
1.int9中断例程对键盘输入的处理:
CPU在9号中断发生后,执行int9中断例程,从60h端口读出扫描码,并将其转化为相应的ASCII码或状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中
比如 A键的扫描码1eh和对应的ASCII码,即字母’a’的ASCII码61h,写入键盘缓冲区。缓冲区的字单元中,高位字节存储扫描码,低位字节存储ASCII码
2.使用int 16h中断例程读取键盘缓冲区:
int 16h中断例程中包含的一个最重要的功能是从键盘缓冲区中读取一个键盘键入,该功能的编号为0。
下面的指令从键盘缓冲区中读取一个键盘输入,并且将其从缓冲区中删除:
mov ah,0
int 16h
结果:(ah)=扫描码,(al)=ASCII码
int 16h中断例程的0号功能,进行如下工作:
1.检测键盘缓冲区中是否有数据
2.没有则继续做第一步
3.读取缓冲区第一个字单元中的键盘输入
4.将读取的扫描码送入ah,ASCII码送入al
5.将已读取的键盘输入从缓冲区中删除
int 9中断例程和int 16h中断例程是一对相互配合的程序。
int 9 中断例程向键盘缓冲区写入,有键按下的时候向键盘缓冲区中写入数据。
int 16h 中断例程从缓冲区中读出,有应用程序对其进行调用的时候,将数据从键盘缓冲区中读出
3.字符串的输入:
最基本的字符串输入程序,需具备以下功能:
1.在输入的同时需要显示这个字符串
2.一般在输入回车符后,字符串输入结束
3.能够删除已经输入的字符
(dh),(dl)=字符串在屏幕上显示的行,列位置
ds:si指向字符串的存储空间,字符串以0为结尾符
分析如下:
1.字符的输入和删除:
按照栈的访问规则进行,后进后出,字符栈中的所有字符,从栈底到栈顶,组成一个字符串
2.在输入回车符后,字符串输入结束:
输入回车符后,可以在字符串中加入0,表示字符串结束
3.在输入的同时需要显示这个字符串:
每次有新的字符输入和删除一个字符的时候,都应该重新显示字符串。
4.程序的处理过程:
a.调用int 16h读取键盘输入
b.如果是字符,进入字符栈,显示字符栈中所有的字符;继续执行a
c.如果是退格键,从字符栈中弹出一个字符,显示字符栈中所有字符;继续执行a
d.如果是enter键,向字符栈中压入0,返回
子程序:字符栈的入栈,出栈和显示
参数说明:
(ah)