在交互程序中常常需要用户对一个提示做出应答,或通过输入一个字母或数字对菜单的各项进行选择,这时就要用到INT 21H的单字符输入功能。例如程序显示出一串信息,要求你回答Y或N,回答Y,程序将转入标号为YES的程序段,而回答N使程序转入标号为NO的程序段,按下其它键程序就等待。例9.2的程序段就是完成这个工作的。

  测试Y,N或其它字母,数字和符号可直接把它们写在CMP指令中,用引号括起来。但是如果 想检测Enter (Return)键,就要在指令中写出它的ASCII码0D(16进制)或13(十进制)。

  例9.2
  GET_KEY: MOV   AH, 1        ;读键入字符并回显
       INT   21H
       CMP   AL,'Y'       ; 是 Y ?
       JE    YES          ; 是, 则转YES
       CMP   AL,'N'        ; 是N ?
       JE    NO          ; 是, 则转NO
       JNE   GET_KEY        ; 否则, 等待输入Y或N

  例9.3
  WAIT_HERE:MOV   AH,7        ; 键盘输入,不回显
        INT   21H
        CMP   AL,0DH        ; 是CR ?
        JNE   WAIT_HERE       ; 不是, 等待输入

  例9.3中用AH=7代替AH=1,差别只是不把按下的键显示出来,或不执行键的特定功能。

  例9.4
        MOV   AH, 7         ; 键盘输入,不回显
        INT  21H
        CMP   AL, 0         ; 是功能键 ?
        JE   GET_EC        ; 是, 读扫描码
        JMP   ERROR         ; 否, 显示出错信息
  GET_EC:   MOV   AH, 7
        INT  21H
        CMP   AL, 3BH       ; F1?
        JE   OPTION1
        CMP   AL, 3CH        ; F2?
        JE   OPTION2
        CMP   AL, 3DH       ; F3?
        JE   OPTION3
        JMP   ERROR         ; 无效键, 显示出错信息

  

  
如果要求程序能接收功能键或数字组合键,必须进行两次DOS调用,第一次回送00,第二次回送扫描码。例9.4程序显示出一个菜单,要求用户通过键入F1,F2或F3来选择1,2或3项,按其它键则产生错误信息。程序的应答检测部分如例9.4。