![]() | 第6章 文字输出与键盘输入 | -159- | |||||||||||||||||||
6.5 键盘输入 | |||||||||||||||||||||
我们早已研究了如何通过21H或16H中断调用来取得按键的信息,但我们对这些信息究竟是如何产生的还一无所知,这一节我们就要更细致地讨论这个问题。那么首先我们把上一节留下的问题解决掉。 我们在前面编制过一个"TESTKEY"程序,下面这个程序是"TESTKEY"的一个升级版本: |
|||||||||||||||||||||
TESTKEY2 ESC_KEY code main ascii continue: waitkey: main out_ax outloop: |
.ASM equ segment assume org proc jmp db push pop mov int call cmp jnz mov int endp proc push mov mov rol mov and xlat mov |
01h cs:code 100h far continue '0123456789ABCDEF' cs ds ah,0 16h out_ax ah,ESC_KEY waitkey ah,4ch 21h near ax bx,offset ascii cx,0404h ax,cl dx,ax ax,000fh ascii ah,0eh |
;一个与ESC键有关的常量 ;跳过数据区 ;十六进制数对应的ASCII码 ;通过堆栈将CS寄存器送入DS寄存器 ;等待键盘输入 ;调用OUT_AX子过程输出AX寄存器的值 ;输入的是ESC键吗? ;不是ESC键则转WAITKEY继续 ;结束程序 ;OUT_AX子过程 ;暂存AX寄存器 ;BX寄存器指向ASCII表 ;设置循环计数与移位计数 ;将AX寄存器的高4位移至低4位 ;用DX寄存器暂存移位后的结果 ;保留AX低4位(实际是移位前的高4位) ;取得对应的ASCII码 ;利用10H中断的0EH功能 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |