表9.4 BIOS键盘中断(INT 16H)

 AH    功 能
    返回参数
 0   从键盘读一字符
   AL=字符码
   AH=扫描码
 1   读键盘缓冲区的字符
   如ZF=0
    AL=字符码
    AH=扫描码
   如ZF=1,缓冲区空
 2    取键盘状态字节
   AL=键盘状态字节

  MOV  AH,0         ; 读字符功能
  INT   16H          ; 键盘BIOS调用
  MOV   BX,AX        ; 扫描码和字符码送BX
  CALL  BINIHEX        ; 打印扫描码和字符码

 
   图9.2 键盘状态字节 


  前面我们已经提到Shift、Ctrl 、Alt、Num Lock、Scroll、Ins 和Caps Lock这些键不具有ASCII码,但按动了它们能改变其它键所产生的代码,那么如何能判断这些键按动与否呢?在键盘状态字节中高4位指出各种键盘方式(Ins、Caps Lock、Num Lock、Scroll)是ON(1)还是OFF(0);低4位表示Alt、Ctrl、Shift键是否按动。这8个键有时又被称为变换键。使用INT 16H的AH=2的功能即可得到这些键状态的信息。

  例9.1 读取键盘状态字节,并以十六进制显示出各位的状态。
  AGAIN:
  MOV    AH,02H      ; 取键盘状态功能
  INT    16H        ; 键盘BIOS调用
  MOV    BX,AX       ; 状态信息存入BX
  CALL    BINIHEX      ; 显示状态信息
  MOV    DL,0DH      ; 显示回车符
  MOV    AH,02H
  INT    21H
  JMP    AGAIN       ; 重复