在交互程序中常常需要用户对一个提示做出应答,或通过输入一个字母或数字对菜单的各项进行选择,这时就要用到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。