实 验 六 从 键 盘 输 入 数 据 并 显 示 1 要 求 : 编 写 程 序 , 将 键 盘 接 收 到 的 四 位 十 六 进 制 数 转 换 为 等 值 的 二 进 制 数 , 并 显 示 在 屏 幕 上 。若输 入 的 不是0—F间的 数 字, 则显 示 出错 信息, 并 要 求 重新输 入 。 2 目的 : 掌握接 收 键 盘 数 据 的 方法, 并 了解将 键 盘 数 据 显 示 时须转 换 为 AS CII码的 原理。 实验程序 CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MARK DB ? MESS DB 'please input the number(H),press inter,ture into number(B).press space end.',0DH,0AH,'$' ERROR DB 0DH,0AH, 'input error',0DH,0AH,'$' DATA ENDS STACK SEGMENT STA DW 32 DUP(?) TOP DW ? STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOP HEAD: CRLF MOV MARK,0 MOV AH,09H LEA DX,MESS INT 21H ;显 示 提 示 输 入 的 信 息 CALL GETNUM ;接 收 键 入 数 值 送 DX CMP MARK,01H JE HEAD MOV CX,0010H ;16位 MOV BX,DX TTT: ROL BX,1 ;循 环 左 移 1位 MOV DL,BL AND DL,01H ;屏 蔽 掉 高 7位 ADD DL,30H MOV AH,02H INT 21H ;显 示 二 进 制 位 对 应 的 ASCII字 符 LOOP TTT JMP HEAD FINI: MOV AX,4C00H INT 21H ;返 回 DOS GETNUM PROC NEAR ;子 程 序 ,接 收 键 入 数 值 送 DX PUSH CX XOR DX,DX GGG: MOV AH,01H INT 21H CMP AL,0DH ;输 入 为回 车,则进 行转换 JE PPP CMP AL,20H ;输 入 为空格,则退回 DOS JE FINI CMP AL,30H JB KKK SUB AL,30H CMP AL,0AH JB GETS CMP AL,11H JB KKK SUB AL,07H CMP AL,0FH JBE GETS CMP AL,2AH JB KKK CMP AL,2FH JA KKK SUB AL,20H GETS: MOV CL,04 SHL DX,CL XOR AH,AH ADD DX,AX JMP GGG KKK: MOV AH,09H MOV DX,OFFSET ERROR INT 21H MOV MARK,01H PPP: PUSH DX CRLF POP DX POP CX RET GETNUM ENDP CODE ENDS END START