《微机原理实验简易计算器.docx》由会员分享,可在线阅读,更多相关《微机原理实验简易计算器.docx(6页珍藏版)》请在金锄头文库上搜索。
1、【实验题目】简单计算器设计【实验目的】综合测试学生微机接口技术及应用能力,包含系统构思设计、电路设计搭建、软件调试等;结合应用实质,培育学生运用微机技术服务应用、服求实质的能力。【基本要求】1)利用实验箱上的4x4键盘及6、运算,计算结果限制在范围2)16个按键的分配可以自行指定;位数码管,实现两个-655356553516位宽的非负整数(065535,超出范围在数码管最低位显示)进行、E;【扩展要求】1)按基本要求保持输入的范围不变(16位宽),扩展计算结果的范围到用足6位数码管,当计算结果超出-65535999999时,显示E;2)增加的功能,有小数显示;【实验程序】;该程序实现了基本要求
2、及扩展要求的2)DSEGSEGMENTNEXT:BUFFDB6DUP()MOVBYTEPTRSI,16LED_7DBINCSI3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39LOOPNEXTH,5EH,79H,71H,00H,40HCALLSHOW;将显示缓冲区中内容在LED前一次显POSITIONDB0DFH,0EFH,0F7H,0FBH,0FDH,0FEH示出来UNIT10DW10000,1000,100,10,1MOVCOUNT,0;记按下了几位数NEWNUMDB0NEXT2:COUNTDB0CALLSHOWFLAGDB0;能否有键按下
3、的标记CALLSCAN;判断能否有按键按下NEGTIDB0;能否为负数的标记CMPFLAG,1NUMDW0JZOKNUM1DW0JMPNEXT2NUM2DW0OK:TAGDB0;运算种类标记MOVFLAG,0POINTDB0;除法结果增加小数点标记MOVPOINT,0RESULTDW0MOVDX,3000H;判断是哪一个键被按下DSEGENDSMOVAL,0FFHCSEGSEGMENTOUTDX,ALASSUMEDS:DSEG,CS:CSEGMOVCH,-1;CH用于保存当前被扫描的列号START:MOVCL,07FHMOVAX,DSEGXL:MOVDS,AXROLCL,1MOVDX,300C
4、H;8255初始化INCCHMOVAL,81HMOVDX,3000HOUTDX,ALMOVAL,CLLEASI,BUFFOUTDX,ALMOVCX,6MOVDX,3008HINAL,DXJIAFA:ANDAL,0FHMOVTAG,1;置加法标记CMPAL,0FHCALLTO_DEC;将输入的数转变成十进制数保存JZXL;选中下一列被扫描MOVAX,NUMCMPAL,0EHMOVNUM1,AXJNZFOURJMPSTART;连续输入第二个按键数MOVCL,0;CL保存行号JIANFA:JMPFREEMOVTAG,2FOUR:CALLTO_DECCMPAL,0DHMOVAX,NUMJNZBAMOV
5、NUM1,AXMOVCL,4JMPSTARTJMPFREECHENGFA:BA:MOVTAG,3CMPAL,0BHCALLTO_DECJNZSHIERMOVAX,NUMMOVCL,8MOVNUM1,AXJMPFREEJMPSTARTSHIER:CHUFA:CMPAL,07HMOVTAG,4JNZXLCALLTO_DECMOVCL,12MOVAX,NUMFREE:MOVNUM1,AXADDCH,CL;行列值相加为按键代表的值JMPSTARTCMPCH,9CLEAR:JBESHUZIJMPSTARTCMPCH,12;加法YUNSUAN:JZJIAFACALLTO_DEC;将第二次输入的数转变成十进
6、制数CMPCH,13;减法保存JZJIANFAMOVAX,NUMCMPCH,14;乘法MOVNUM2,AXJZCHENGFACMPTAG,1CMPCH,15;除法JZSJIAFJZCHUFACMPTAG,2CMPCH,11;等号时进行运算JZSJIANFJZYUNSUANCMPTAG,3CMPCH,10;此键清屏重新输入JZSCHENGFJZCLEARCMPTAG,4SHUZI:JZSCHUFINCCOUNTYEAH:MOVNEWNUM,CHCALLCHULI;将结果中零的地址16关显示CALLCOPY;将新输入的按键值送入显示缓MOVTAG,0冲区的最末位MOVNEGTI,0MOVDX,30
7、00H;将LED关显示CALLSHOWMOVAL,0FFHJMPNEXT2OUTDX,ALSJIAF:CALLDELAY2CALLJIAJMPNEXT2JMPYEAHSJIANF:POSITIVE:CALLJIANMOVAX,NUM1JMPYEAHSUBAX,NUM2SCHENGF:JCYC2CALLCHENGOV:JMPYEAHMOVRESULT,AXSCHUF:CALLTO_SHOWSHUCALLCHUJMPOVER2JMPYEAHYC2:MOVAH,4CHLEASI,BUFFINT21HMOVBYTEPTRSI,14JIAPROCNEARINCSIPUSHAXMOVCX,5PUSHCXS
8、S2:PUSHSIMOVBYTEPTRSI,16MOVAX,NUM1INCSIADDAX,NUM2LOOPSS2JCYC1;溢出OVER2:MOVRESULT,AXPOPSICALLTO_SHOWSHUPOPCXJMPOVER1POPAXYC1:RETLEASI,BUFFJIANENDPMOVBYTEPTRSI,14CHENGPROCNEARINCSIPUSHAXMOVCX,5PUSHCXSS0:PUSHSIMOVBYTEPTRSI,16MOVAX,NUM1INCSIMULNUM2LOOPSS0JCYC3OVER1:MOVRESULT,AXPOPSICALLTO_SHOWSHUPOPCXJMP
9、OVER3POPAXYC3:RETLEASI,BUFFJIAENDPMOVBYTEPTRSI,14JIANPROCNEARINCSIPUSHAXMOVCX,5PUSHCXSS3:PUSHSIMOVBYTEPTRSI,16MOVAX,NUM1INCSICMPAX,NUM2LOOPSS3JAPOSITIVEOVER3:MOVNEGTI,1;结果为负数POPSIMOVAX,NUM2POPCXSUBAX,NUM1POPAXJCYC2RETJMPOVCHENGENDPCHUPROCNEARPUSHAXPUSHCXPUSHDXPUSHSIXORDX,DXMOVAX,NUM1DIVNUM2PUSHDXMOV
10、RESULT,AXCALLTO_SHOWSHUMOVPOINT,1LEASI,BUFFADDSI,5MOVCX,5PEA:MOVAL,SI-1MOVSI,ALDECSILOOPPEAPOPDXMOVAX,10MULDXXORDX,DXDIVNUM2MOVSI,ALPOPSIPOPDXPOPCXPOPAXRETCHUENDPCHULIPROCNEARPUSHSIPUSHCXLEASI,BUFFADDSI,5XX:CMPBYTEPTRSI,0JNZNOZEROMOVBYTEPTRSI,16DECSIJMPXXNOZERO:CMPNEGTI,1JNZZHENGINCSIMOVBYTEPTRSI,17
11、ZHENG:POPCXPOPSICHULIENDPTO_DECPROCNEARPUSHSIPUSHAXPUSHBXPUSHCXLEASI,BUFFMOVAL,COUNTXORAH,AHADDSI,AXDECSIXORAX,AXXORCH,CHMOVCL,COUNTAGAIN:ADDAX,AXMOVBX,AXADDAX,AXADDAX,AXADDAX,BXMOVBH,0MOVBL,SIADDAX,BXDECSILOOPAGAINMOVNUM,AXPOPCXPOPBXPOPAXPOPSIRETTO_DECENDPTO_SHOWSHUPROCNEARPUSHSIPUSHDIPUSHAXPUSHBXPUSHCXLEADI,BUFFADDDI,5LEASI,UNIT10MOVAX,RESULTMOVBYTEPTRDI,0DECDILOP0