首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

第六篇 键盘间断与应用程序读取键盘缓冲区

2012-11-23 
第六篇 键盘中断与应用程序读取键盘缓冲区这篇博文主要介绍在X86下键盘的中断过程,以及应用程序如何利用中

第六篇 键盘中断与应用程序读取键盘缓冲区

这篇博文主要介绍在X86下键盘的中断过程,以及应用程序如何利用中断读取键盘缓冲区内容。

 

一、撰写该篇博文的背景介绍

在我们全屏看视频时,按下Esc键,播放器还原或者最小化;在利用其他软件的时候,我们会

发现,设置可以设置打开或关闭程序的快捷方式......

应用程序为什么可以根据键盘的指示工作?又是如何工作的呢?

 

二、对于键盘中断的介绍

当我们在按下按键时,键盘会把按键的扫描码发送到主板的接口电路中,具体说就是端口60H。

当60H收到扫描码,这时接口就会向CPU发出中断请求。这是一个可屏蔽中断。所以,当IF=1,

并且CPU执行完当前指令后就会响应中断。也就是进入int 9中断服务程序。此时,程序将读取

60H中的扫描码,并判断输入的按键是什么。

第六篇 键盘间断与应用程序读取键盘缓冲区

 

第六篇 键盘间断与应用程序读取键盘缓冲区

 

第六篇 键盘间断与应用程序读取键盘缓冲区

 

三、应用程序读取键盘缓冲区

利用键盘控制应用程序主要有两种方式:

1、直接从60H端口中读取键盘扫描码,在应用程序中分析键盘输入的是字符还是控制符、切换符等。

2、利用BIOS提供的中断int 16H。

第六篇 键盘间断与应用程序读取键盘缓冲区

 

四、介绍本程序

1、功能:当按下按键a,屏幕被写成红色;再按下shift+a屏幕又恢复成黑色。程序运行过程中,按下其他键没

有响应。

2、本程序是利用BIOS功能调用int 16h,读取键盘缓冲区的。

3、通过直接向显存写数据的办法,改变了屏幕的颜色。

4、代码:

int9 equ 09hdata segmentaddr dw ?,?     ;存储系统int 9的地址flag db 0       ;程序结束的标志,为1表明按下了shift+a,介绍程序data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axmov ax,0mov es,ax;保存原中断地址mov ax,es:[int9*4]mov addr,axmov ax,es:[int9*4+2]mov addr[2],ax;设置新中断地址;cli;mov word ptr es:[int9*4],offset isr;mov word ptr es:[int9*4+2],seg isr;sti;加入新中断服务程序地址clilea ax,isrmov es:[int9*4],axmov ax,seg isrmov es:[int9*4+2],axsti;等待shift+a,结束程序back:cmp flag,1je leavejmp back;恢复原中断地址leave:climov ax,addrmov es:[int9*4],axmov ax,addr[2]mov es:[int9*4+2],axstimov ah,4chint 21h;新的中断服务程序isr proc farpush axpush bxmov ax,datamov ds,ax;调用原int 9完成必要的工作pushfcall dword ptr addr;调用BIOS的int 16h读出键盘缓冲区的一个字节mov ah,0int 16h;按下acmp al,61hje go1;按下shift+acmp al,41hje go2back1:pop bxpop axiret;按下a通过bl传递显存中的字符属性为高亮红色go1:mov bl,48hcall far ptr displayjmp back1;按下shift+a则恢复go2:mov flag,1mov bl,0call far ptr displayjmp back1isr endpdisplay proc farpush cxpush si;向显存内写mov cx,0b800hmov es,cxmov cx,2000mov si,1again:mov es:[si],bladd si,2loop againpop sipop cxretcode endsend start

5、实验结果截图

①按下a

第六篇 键盘间断与应用程序读取键盘缓冲区

②按下shift+a

第六篇 键盘间断与应用程序读取键盘缓冲区

 

五、博主上传了王爽《汇编语言》。欢迎学习交流。

 

 

热点排行