资源描述:
《汇编实验扩充键盘处理功能的程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验六扩充键盘处理功能的程序一、实验的目的与要求(一)实验目的:掌握中断的概念以及中断服务程序的编写(二)实验要求:完成键盘处理基本功能的基础上,增加left_shift和right_shift键的功能。要求实现左右SHIFT任何一个键处于按下状态时输入字符为键盘的上档字符或大写字母,否则输出数字或小写字母。二、实验正文实验分析:本次实验要求在示例3.6的基础上,添加功能,关于left_shift和right_shift可以通过它们各口的扫描码进行判断,此外还应该设置标志变量便于程序的判断,较示例的程序除了要添加判断是否为shift键外,还应该再设置一张shifttab转换表,这样当shif
2、t被按下时,应由这样转换表进行转换,而其他情况下由,scantab转换表转换。在读入信息时候需要在不同的端口读入信息并判断,通过检测状态和数据作出正确的操作。四、流程图如下kbflglxl四、实验结果附录:程序源代码如下:stacksegmentdb256dup(O)stackends*******************************************************databufferbufptlbufpt2kbflagkbflaglpromptseantabsegmentdb16hdup(O)dw0dw0db0db0db'…kbd_ioprogrambegin…
3、:Odh,Oah,'$‘db0,0;1234567890-='/8,0db'qwertyuiop[]:0dh,0db'asdfghjkrz3bh,27h,0,0,0db'zxcvbnm,./1,0,0,0db'',0,0,0,0,0,0,0,0,0^,0,0,0db789-456+1230.*shiftabdbOzO;!@#$%A&*()_+',0z0dbQWERTYUIOP{}:0DH,0db’ASDFGHJKL:”',0,0,0db'ZXCVBNMo?',0,0,0db'',26dup(0)evenoldcs9oldip9datadw?dw?endscodesegmentstartpro
4、cfarassumecs:code,ds:datapushdsmovax,0pushaxmovax,datamov•ds,ax/climoval,09movah,35hint21hmovoldcs9,es;开中断;屮断类型号;DOS调用,取中断向量;ES:BX=中断向量mov•oldip9,bx9pushdsmovdx,offsetkbintmovax,segkbintmovds,ax;DS:DX=中断向量moval,09;中断类型号movah,25h;DOS调用,设置中断向量int21hpopdsinandout■al,21hal,Ofdh21hzal/movdx,offsetprompt
5、movah,9int21hstiforever:callkbgettestkbflag,80hjnzendintpushaxcalldispcharpopaxcmpal,Odhjnzforevermoval?Oahcalldispcharjmpforeverendint:movdx,oldip9movax,oldcs9movds,axmovalz09hmovah,25hint•21h/retstartendp检测并等待键盘屮断;设置中断屏蔽字,只允许键盘中断kbgetprocpushnearbxcmpal,2ahjnzshift5cmpkbflagl,ljzshiftlmovkbflagl,
6、ljmpshiftlcli;关屮断movbx,bufptlcmpbx,bufpt2jnzkbget2cmpkbflagzOjnzkbget3sti;开中断Popbxjmpkbgetkbget2:moval,[buffer+bx]incbxcmpbx,16jckbget3movbx,0kbget3:movbufptl,bxpopbxretkbgetendp•9键盘中断程序kbintprocfarpushbxpush■ax/inalz60h;从也口读扫描码pushaxinal,61h;从卩8口读信息oral,80hout61h,al;置键盘应答位andal,7fhout•61h,al;复位键盘应
7、答位/popaxtestal,80h;检测AL第8位是否为1,判断键位是按下(1)还是放开jnzkbint2;判断是否为左Shift键;标志位置1shift5:cmpal,36hjnzshift2cmpkbflagl,ljzshiftlmovkbflagl,ljmpshiftl;判断是否为右Shift键cmpkbflagl,!jnzshift3leabx,shiftab;shifttab换码xlat;(AL)