您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 简单计算器8086汇编代码
【课题5】模拟十进制计算器(加,减)(一)设计要求1.通过小键盘输入,做十进制的加、减运算,允许五位数以内的不同数位的2个数相加或相减,连加与/或连减。七段数码管显示器的高位作为符号位,其他5位作为输入数据和计算结果的显示。2.数字用小键盘0~9;功能键为:A,B,C,D。C———开始运算(包括取消没有完成的运算),六位七段数码管全部显示‘0’。A———‘+’,加法操作。B———‘-’,减法操作。D———‘=’,计算并显示结果。3.运算规则(按照一般计算器的功能要求):a.输入第一个数据,显示器跟随显示。b.按‘+’或‘-’,显示器内容不变。c.再输入第二个数据,显示器跟随显示。d.按‘=’,显示器显示计算结果,当超出能显示的最大值时,显示“F”(溢出)。e.按‘C’,清除显示,重新开始运算。(二)提示1.七段数码管显示和键盘可参考软件实验9、10,LED显示实验,以及可参阅教材第9章有关章节。2.显示是动态的、要不断刷新,建议把键盘输入与运算作为主程序,动态显示作为子程序,在主程序中调用显示子程序。(三)要完成的工作1.设计出完整的汇编语言程序。2.上机调试,在实验系统中通过验收。3.写出课程设计报告,内容包括:设计思想、功能流程图、结果讨论和完整的源程序。;(1)通过小键盘做十进制的加、减运算,允许不同数位的5个数相加或相减。七段数码管显示器作输入数据和结果数据的显示。;(2)数字用小键盘0~9,A、B、C、D作功能键。;C———开始运算(包括撤销运算),显示‘0’。;A———‘+’。;B———‘-’。;D———‘=’。;E———退出,返回DOS。;(3)运算顺序:;①输入一原始数据,显示器跟随显示。;②按‘+’或‘-’,显示器内容不变。;③再输入一数据,显示器跟随显示。;④按‘=’,显示器显示结果数据,当超出能显示的最大值时,显示“FFFFF”(溢出)。;⑤按‘C’,重新开始运算。;⑥按‘E’,结束退出。;******************************************;8086系列微机接口实验系统软件实验项目;键盘扫描显示实验;******************************************INITMACRONAMEmovNAME+0,0ffhmovNAME+1,0c0hmovNAME+2,0ffhmovNAME+3,0ffhmovNAME+4,0ffhmovNAME+5,0ffhENDMcodesegmentassumecs:codeOUTSEGequ0ffdch;段控制口OUTBITequ0ffddh;位控制口/键扫口IN_KEYequ0ffdeh;键盘读入口LedBufdb10dup(?);显示缓冲Storedb10dup(?);存放显示第一组数据numdb10dup(?)Store1db10dup(?);用于存放第一组数据num1db10dup(?);用于存放第二组数据flagdb0;作为标记位,若为1代表加为0代表减tempdb0jinweidb0jieweidb0in_flagdb0Key_Buffdb30dup(?);用于键盘输入的存储org1000hStart:INITStoreINITnumINITLedBufmovsi,-1;设置数组的下标movStore1+0,0movStore1+1,0movStore1+2,0movStore1+3,0movStore1+4,0movnum1+0,0movnum1+1,0movnum1+2,0movnum1+3,0movnum1+4,0MLoop:callDisp;显示callGetKey;扫描键盘并读取键值cmpal,20hjeLLjmpLL1LL:movtemp,0jmpMLoopLL1:pushdxmovdl,tempmovtemp,1cmpal,09hjatransmitcmpKey_Buff[si],aljzinkey_flagjmpLL2inkey_flag:cmptemp,dlpopdxjzMLoopjmpLL2;!!注意要加这一句transmit:jmpSPECIAL;特殊字符特殊处理LL2:incsimovKey_Buff[si],al;将键盘输入的键盘码放到Key_Buff中cmpsi,5jaeabcpushdxmovdl,Store1+1movStore1+0,dlmovdl,Store1+2movStore1+1,dlmovdl,Store1+3movStore1+2,dlmovdl,Store1+4movStore1+3,dlmovStore1+4,alpopdxjmpbcdabc:movdi,sisubdi,5pushdxmovdl,num1+1movnum1+0,dlmovdl,num1+2movnum1+1,dlmovdl,num1+3movnum1+2,dlmovdl,num1+4movnum1+3,dlmovnum1+4,alpopdxjmpbcdbcd:andal,0fh;显示键码movah,0movbx,offsetLEDMAPaddbx,axmoval,[bx]cmpsi,5jaenext1movStore[si+1],aljmpback1next1:movdi,sisubdi,5movnum[di+1],aljmpstart1back1:pushdx;将Store里的数据放到Led中,方便以后显示movdl,Store+1movLedBuf+1,dlmovdl,Store+2movLedBuf+2,dlmovdl,Store+3movLedBuf+3,dlmovdl,Store+4movLedBuf+4,dlmovdl,Store+5movLedBuf+5,dlpopdxjmpMLoopstart1:INITLedBufcallDisp;jmpMLoopback2:pushdxmovdl,num+1movLedBuf+1,dlmovdl,num+2movLedBuf+2,dlmovdl,num+3movLedBuf+3,dlmovdl,num+4movLedBuf+4,dlmovdl,num+5movLedBuf+5,dlpopdxjmpMLoopback3:pushdxmovdl,Store+0movLedBuf+0,dlmovdl,Store+1movLedBuf+1,dlmovdl,Store+2movLedBuf+2,dlmovdl,Store+3movLedBuf+3,dlmovdl,Store+4movLedBuf+4,dlmovdl,Store+5movLedBuf+5,dlpopdxjmpMLoopSPECIAL:cmpal,0ahjnedecremovflag,1movsi,4jmpMLoopdecre:cmpal,0bhjneRestartmovflag,0movsi,4jmpMLoopRestart:cmpal,0chjneExitmovflag,0jmpStartExit:cmpal,0ehjneDisplaymovStore+0,0Ch;显示PmovStore+1,0ffhjmpback1Display:cmpal,0dhjeprintjmpback3print:cmpflag,0jesubbjmpaddasubb:movcl,num1+0;比较两数大小,如果用小数减大数则交换数据movbl,Store1+0cmpbl,cljbjiaohmovcl,num1+1movbl,Store1+1cmpbl,cljbjiaohmovcl,num1+2movbl,Store1+2cmpbl,cljbjiaohmovcl,num1+3movbl,Store1+3cmpbl,cljbjiaohmovcl,num1+4movbl,Store1+4cmpbl,cljbjiaohjmpjianfajiaoh:pushdx;交换两个数组中的数值movdh,num1+0movdl,Store1+0movnum1+0,dlmovStore1+0,dhmovdh,num1+1movdl,Store1+1movnum1+1,dlmovStore1+1,dhmovdh,num1+2movdl,Store1+2movnum1+2,dlmovStore1+2,dhmovdh,num1+3movdl,Store1+3movnum1+3,dlmovStore1+3,dhmovdh,num1+4movdl,Store1+4movnum1+4,dlmovStore1+4,dhmovStore[0],0BFh;最高位显示“-”popdxjianfa:movcl,num1+4;最低位相减movbl,Store1+4cmpbl,cljaeH1movjiewei,1movbh,0ahsubbh,claddbl,bhmovcl,bljmpF1H1:subbl,clmovcl,bljmpF1F1:moval,clandal,0fh;显示键码movah,0movbx,offsetLEDMAPaddbx,axmoval,[bx]movStore[5],almovcl,num1+3;第二位相减movbl,Store1+3subbl,jieweicmpbl,0Fh;考虑0被借位变成FjzN1jmpM1N1:movbl,09hjmpM1M1:movjiewei,0cmpbl,cljaeH2movjiewei,1movbh,0ahsubbh,claddbl,bhmovcl,bljmpF2H2:subbl,clmovcl,bljmpF2F2:moval,clandal,0fh;显示键码movah,0movbx,offsetLEDMAPaddbx,axmoval,[bx]movStore[4],almovcl,num1+2;第三位相减movbl,Store1+2subbl,jieweicmpbl,0Fh;考虑0被借位变成FjzN2jmpM2N2:movbl,09hjmpM2M2:movjiewei,0cmpbl,cljaeH3movjiewei,1movbh,0ahsubbh,claddbl,bhmovcl,bljmpF3H3:subbl,clmovcl,bljmpF3F3:moval,clandal,0fh;显示键码movah,0movbx,offsetLEDMAPaddbx,axmoval,[bx]movStore[3],almovcl,num1+1;第四位相减movbl,Store1+1subbl,jieweicmpbl,0Fh;考虑0被借位变成FjzN3jmpM3N3:movbl,09hjmpM3M3:movjiewei,0cmpbl,cljaeH4movjiewei,1movbh,0ahsubbh,claddbl,bhmovcl,bljmpF4H4:subbl,clmovcl,bljmpF4F4:moval,clandal,0fh;显示键码movah,0movbx,offsetLEDMAPaddbx,axmoval,[bx]movStore[2],almovcl,num1+0;最高位相减movbl,Store1+0subbl,jieweimovjiewei,0cmpbl,cljaeH5movjiewei,1subcl,bljmpF5H5:subbl,clmovcl,bljmpF5F5:moval,clandal,0fh;显示键码movah,0movbx,offsetLEDMAPaddbx,axmoval,[bx]movStore[1],aljmpback3ADDa:movcl,num1+4;最低位执行加法movbl,Store1+4addcl,blcmpcl,0ahjbHsubcl,0ahincjinweiH:moval,clandal,0fh;显示键码movah,0movbx,offsetLEDMAPaddbx,axmoval,[bx]movStore[5],almovcl,num1+3;第二
本文标题:简单计算器8086汇编代码
链接地址:https://www.777doc.com/doc-2292911 .html