第十七章 使用BLOS进行键盘输入和磁盘读写

大多数有用的程序都需要处理用户的输入,键盘输入是最基本的输入。程序和数据都是需要长期存储,磁盘是最常用的存储设备,blos为这两种外设的i/o提供了最基本的中断例程。

17.1int 9中断例程对键盘输入的处理

键盘输入将引发9号中断,BLOS提供了int 9中断例程,cpu在9号中断发生之后,执行9号中断例程,从60h端口读出扫描码,并将其转化为相对应的ASCII码或者状态信息,存储在内存的指定空间(键盘缓冲区或状态字节)中。

缓冲区的字单元中,高位字节存储扫描码,低位字节存储ASCII码。

17.2使用int 16h中断例程读取缓冲区

BLOG提供了int 16h中断例程供程序员调用。int 16包含一个很重要的功能是从键盘缓冲区中读取一个键盘输入,该功能的编号是0

mob ah,0
int 16h

结果:(ah)=扫描码,(al)=ASCII码

int 16h中断例程的0号功能,进行了如下的工作:

  1. 检测键盘缓冲区是否有数据
  2. 没有则继续第一步
  3. 读取缓冲区中的一个字单元的键盘输入
  4. 将读取的扫描码送入到ah中,ASCII码送入到al
  5. 将已读的键盘输入从缓冲区中删除

编程,接收用户的键盘输入,输入‘r’,将在屏幕显示红色,输入‘g’将显示绿色,输入‘b’将现实蓝色。

程序如下:

assume cs:code
code segment
start:mov ah,0
     int 16h
     
     mov ah,0
     cmp al,'r'
     je red
     cmp al,'g'
     je green
     cmp al,'b'
     je blue
     jmp stort sret
     
  red:shl ah,1
green:shl ah,1
 blue:mov bx,0b800h
      mov es,bx
      mov bx,1
      mov cx,2000
    s:and byte ptr es:[bx],11110000b
      or es:[bx],ah
      add bx,2
      loop s
      
  sret:mov ax,4c00h
       int 21h
  code ends
code start

17.3字符串的输入

17.4应用int 13h中断例程对磁盘进行读写

共有 0 条评论

Top