当前位置:文档之家› 微型计算机系统程序设计实验报告

微型计算机系统程序设计实验报告

目录Part1.程序设计目求Part2.程序设计要求Part3.系统整体设计思路Part4.程序框图设计Part5.硬件电路设计Part6.课程设计体会Part7.程序设计的参考文献Part8.程序设计代码附录(总共三题)Part1:程序设计的目的:1.巩固和掌握对“微机原理”课程内容的认识和理解,提高应用水平.2.掌握汇编语言程序的编制方法.3.熟悉键盘控制和七段码管及74LS138芯片的使用.Part2:程序设计要求:本课程设计内容包括两个方面A.硬件设计:显示器用6个八段数码段显示.键盘采用4*4矩阵形式.由8255控制B.软件编程(上机编程内容)题目一※显示器工作于查询方式.键盘工作于中断方式※16个按键定位的键值为:0~f,按任意键在显示器上现实对应的键值.lED显示器显示数值从右到左逐位显示题目二※定义键盘按键:10个数字键(0~9);6个功能键:+(加),-(减),*(乘),/(除),=(等于),CLEAR(清零)※实现五位八进制数加法运算.可连续做加法.直接按"=号结束,显示结果※实现五位八进制数乘法运算.可连续做乘法运算Part3:程序设计的整体设计思路:A.物理构想思路:1)微型计算机由微处理器,存储器,接口电路以及连接在这些部件上的总线组成.微处理器,存储器和所有I\O设备之间的信息交换都通过总线进行.总线包括地址总线,数据总线和控制总线,他们始于CPU或终于CPU,现代微机大部分都是这种以总线为中心的结构.2)微型计算机及外围设备组成微型计算机系统的硬件,外围设备必须通过接口电路才能与系统总线相连,因此构建一个基于8255A的简单微型计算机系统,就是通过编译程序和物理连接让单片机拥有简单的计算器运算功能,因此系统总线上挂上一定规模的存储器和接口电路,然后在把合适的外围设备连接到接口电路上.解决物理连线方面的构想思路.就轮到程序设置的构想思路:B.软件构想思路:1)首先.是建立一个蕴含所有段码的数据表(在程序中的体现是TABLE),作用是存储段码,为程序的相应调用提供对应的段码.避免在程序中实现调用显示功能的时候造成过多的赘余.因为这次实验套装的LED管是共阳极管.所以只有列出对应的16个(0~F)适用于共阳极管的段码,才能满足显示的要求2)其次.是建立选通信号的输出存储.也就是.在数据部分建立一个表格,里面能够告诉CPU 的输出端要输出低电平的时候对应的代码指令:为什么是输出低电平?因为本次选用的LED 管是共阳极管.所以要在CPU的输出端与显示器的输入端对应借口接入CPU输出的低电平.从而告诉是哪一个显示器被选中.对应要输出怎么样的段码(信息).方能准确进行数据的显示3)在DATA设置完以后.就是功能键的自定义设计.这部分将会在物理连线框图里面提出(Part5)4)进行主程序的编写思路部分,首先是对应4*4的键盘程序.在按下对应的键位以后.为了能在显示器中正确显示出对应的数值.必须进行扫描,首先是判断是否有按键.如果按得是数字键.那么就要在LED显示管上面对应的位数以及对应的数值进行显示.并且判断数字键之前是否已经按了运算的功能键.从而判断是否要进行运算.如果确认在数字键之前按了运算的功能键.则应该进行运算功能,并且将运算结果存储在内存单元里面.等待下一步的指令.并且重复检测.等到有在物理键上面检测到有等号.则将最终的结果释放在LED管子上进行显示5)在运算结束后要实行放键功能,并且自动将所有的存储器(这里指的是RAM)上面的数据复位.等待实行重新的运算Part4:程序框图的设计:硬件电路设置:Part6.课程设计体会:一个星期的微机课程设计,在这个星期之中通过不断找资料解决问题,回顾了上学期所学的内容,给了我们很好一个机会将所学内容综合应用实践,温故而知新,对未来的学习也有很大帮助.但在课程设计之中也还发现一些不足的地方,我发现我能通过设计找出不足,更好的学习.并且给将来的学习提供一个好的解决榜样.所以通过这次程序设计的学习.我觉得我并不仅仅只学习到如何的运用汇编程序按照要求解答问题.而更是学习到了要怎么去思考.怎么去解决问题的方法.并且希望能够将这个所得应用在日后的学习之中.我觉得这才是本次课程设计的核心内容参考文献:微型计算机系统原理--(教材)微型计算机系统程序设计指导书--(实验题目)微型计算机系统程序设计例题A--(实验例题)Part8:实验程序:※设计代码※part1:※显示器工作于查询方式,键盘工作于中断方式※16个按键定义的键值:0-F,安任意键在显示器上现实对应的键值,LED显示器现实数值从右到左逐位现实STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDA TA SEGMENTV A1 DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEH ;A端口的6根控制线(控制6个LED显示屏) VB2 DB 3FH,3FH,3FH,3FH,3FH,3FHVB3 DB 00H,00H,00H,00H,00H,00HVB4 DB 00H,00H,00H,00H,00H,00HTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;0~F的显示段码DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV DX,0606HMOV AL,88HOUT DX,AL :8255初始化MOV BX,0000H :BX清零STT: :键盘测试MOV AL,00HMOV DX,0600HOUT DX,ALMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ KEYABCCALL DISP :调用显示程序JMP STTKEYABC:CALL TIME :延时去抖动MOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ KEYJMP STTKEY: :键盘扫描识别MOV DX,0600HMOV AL,0FEHOUT DX,ALMOV DX,0604HIN AL,DXKEY_3:TEST AL,10HJNZ KEY_7CALL KEY3JMP STTKKEY_7:TEST AL,20HJNZ KEY_BCALL KEY7JMP STTKKEY_B:TEST AL,40HJNZ KEY_FCALL KEYBJMP STTKKEY_F:TEST AL,80HJNZ KEY_2CALL KEYFJMP STTKMOV DX,0600H MOV AL,0FDH OUT DX,AL MOV DX,0604H IN AL,DX TEST AL,10H JNZ KEY_6 CALL KEY2 JMP STTKKEY_6:TEST AL,20H JNZ KEY_A CALL KEY6 JMP STTKKEY_A:TEST AL,40H JNZ KEY_E CALL KEYA JMP STTKKEY_E:TEST AL,80H JNZ KEY_1 CALL KEYE JMP STTKKEY_1:MOV DX,0600H MOV AL,0FBH OUT DX,AL MOV DX,0604H IN AL,DX TEST AL,10H JNZ KEY_5 CALL KEY1 JMP STTKKEY_5:TEST AL,20H JNZ KEY_9 CALL KEY5KEY_9:TEST AL,40H JNZ KEY_D CALL KEY9 JMP STTKKEY_D:TEST AL,80H JNZ KEY_0 CALL KEYD JMP STTKKEY_0:MOV DX,0600H MOV AL,0F7H OUT DX,AL MOV DX,0604H IN AL,DX TEST AL,10H JNZ KEY_4 CALL KEY0 CALL STTKKEY_4:TEST AL,20H JNZ KEY_8 CALL KEY4 JMP STTKKEY_8:TEST AL,40H JNZ KEY_C CALL KEY8 JMP STTKKEY_C:TEST AL,80H JNZ KEY_G CALL KEYCKEY_G:JMP STTKKEY0:CALL LP1 MOV AL,3FH MOV [SI+5],AL MOV AL,00H MOV [DI+5],AL CALL DISP RETKEY1:CALL LP1 MOV AL,06H MOV [SI+5],AL MOV AL,01H MOV [DI+5],AL CALL DISP RETKEY2:CALL LP1 MOV AL,5BH MOV [SI+5],AL MOV AL,02H MOV [DI+5],AL CALL DISP RETKEY3:CALL LP1 MOV AL,4FH MOV [SI+5],AL MOV AL,03H MOV [DI+5],AL CALL DISP RETKEY4:CALL LP1 MOV AL,66H MOV [SI+5],AL MOV AL,04H MOV [DI+5],AL CALL DISPRETKEY5:CALL LP1 MOV AL,6DH MOV [SI+5],AL MOV AL,05H MOV [DI+5],AL CALL DISP RETKEY6:CALL LP1 MOV AL,7DH MOV [SI+5],AL MOV AL,06H MOV [DI+5],AL CALL DISP RETKEY7:CALL LP1 MOV AL,07H MOV [SI+5],AL MOV AL,07H MOV [DI+5],AL CALL DISP RETKEY8:CALL LP1 MOV AL,7FH MOV [SI+5],AL MOV AL,08H MOV [DI+5],AL CALL DISP RETKEY9:CALL LP1 MOV AL,6FH MOV [SI+5],AL MOV AL,09H MOV [DI+5],ALCALL DISP RETKEYA:CALL LP1 MOV AL,77H MOV [SI+5],AL MOV AL,0AH MOV [DI+5],AL CALL DISP RETKEYB:CALL LP1 MOV AL,7CH MOV [SI+5],AL MOV AL,0BH MOV [DI+5],AL CALL DISP RETKEYC:CALL LP1 MOV AL,39H MOV [SI+5],AL MOV AL,0CH MOV [DI+5],AL CALL DISP RETKEYD:CALL LP1 MOV AL,5EH MOV [SI+5],AL MOV AL,0DH MOV [DI+5],AL CALL DISP RETKEYE:CALL LP1 MOV AL,79H MOV [SI+5],AL MOV AL,0EHMOV [DI+5],ALCALL DISPRETKEYF:CALL LP1MOV AL,71HMOV [SI+5],ALMOV AL,0FHMOV [DI+5],ALCALL DISPRET;上面是键盘键位的设置以及对应子程序的编写LP1: (数据段以为保存子程序,前移6位) MOV SI,0FFSET VA2MOV DI,OFFSET V A3MOV CX,0005HLP2:MOV AL,[SI+4]MOV [SI+5],ALMOV AL,[DI+4]MOV [DI+5],ALDEC SIDEC DILOOP LP2RETDISP: (6位显示程序)MOV SI,OFFSET V A1MOV DI,OFFSET V A2MOV DL,[DI+5]CMP DL,3FHJNZ DIR5MOV DL,[DI+4]CMP DL,3FHJNZ DIR4MOV DL,[DI+3]CMP DL,3FHJNZ DIR3MOV DL,[DI+2]CMP DL,3FHJNZ DIR2MOV DL,[DI+1]CMP DL,3FHJNZ DIR1JMP DIR0DIR5:MOV CX,0006HJMP DIRDIR4:MOV CX,0005HJMP DIRDIR3:MOV CX,0004HJMP DIRDIR2:MOV CX,0003HJMP DIRDIR1:MOV CX,0002HJMP DIRDIR0:MOV CX,0001HDIR:MOV DX,0600HMOV AL,[SI]OUT DX,ALMOV DX,0602HMOV AL,[DI]OUT DX,ALCALL TIMEINC SIINC DILOOP DIRRETTIME: (延时程序) PUSH AXPUSH CXMOV CX,0005HTIME1:MOV AX,00F0HTIME2:DEC AXJNZ TIME2LOOP TIME1POP CXPOP AXRETSTTK: (按键测试程序)CALL DISPMOV AL,00HMOV DX,0600HOUT DX,ALMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ STTKJMP STTCODE ENDSEND STARTPart2:※显示器工作于查询方式,键盘工作于中断方式※定义键盘按键:10个数字键(0~9);6个功能键:+(加),-(减),*(乘),/(除),=(等于),CLEAR(清零)※实现五位八进制数加法运算.可连续做加法.直接按"=号结束,显示结果STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDA TA SEGMENTV A1 DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEHV A2 DB 3FH,3FH,3FH,3FH,3FH,3FHV A3 DB 00H,00H,00H,00H,00H,00HV A4 DB 00H,00H,00H,00H,00H,00HSUM DB 00H,00H,00H,00H,00H,00HTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,0606HMOV AL,88HOUT DX,ALMOV BX,0000HSTT: MOV AL,00HMOV DX,0600HOUT DX,ALMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ KEYABCCALL DISPJMP STTKEYABC:CALL DELAYMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ KEYJMP STTKEY: MOV DX,0600HMOV AL,0FEHOUT DX,ALMOV DX,0604HIN AL,DXKEY_0: TEST AL,10HJNZ KEY_1CALL KEY0JMP STTKKEY_1: TEST AL,20HJNZ KEY_4CALL KEY1JMP STTKKEY_4: TEST AL,40HJNZ KEY_7CALL KEY4JMP STTKKEY_7: TEST AL,80HJNZ KEY2CCALL KEY7JMP STTKKEY2C: MOV DX,0600HMOV AL,0FDHOUT DX,ALMOV DX,0604HIN AL,DXKEY_CLEAR:TEST AL,10HJNZ KEY_2CALL KEYCLEARJMP STTKKEY_2: TEST AL,20HJNZ KEY_5CALL KEY2JMP STTKKEY_5: TEST AL,40HJNZ KEY_8CALL KEY5JMP STTKKEY_8: TEST AL,80HJNZ KEY3CCALL KEY8JMP STTKKEY3C: MOV DX,0600HMOV AL,0FBHOUT DX,ALMOV DX,0604HIN AL,DXKEY_QUAL: TEST AL,10HJNZ KEY_3CALL KEYEQUALJMP STTKKEY_3: TEST AL,20HJNZ KEY_6CALL KEY3JMP STTKKEY_6: TEST AL,40HJNZ KEY_9CALL KEY6JMP STTKKEY_9: TEST AL,80HJNZ KEY4CCALL KEY9JMP STTKKEY4C: MOV DX,0600HMOV AL,0F7HOUT DX,ALMOV DX,0604HIN AL,DXKEY_PLUS: TEST AL,10HJNZ KEY_MINUSCALL KEYPLUSJMP STTKKEY_MINUS: TEST AL,20HJNZ KEY_MULJMP STTKKEY_MUL: TEST AL,40HJNZ KEY_DIVJMP STTKKEY_DIV: TEST AL,80HKEY_G: JMP STTK;结束按键扫描,下面是按键处理函数(与第一个程序不同的地方是功能键的设置问题)KEY0: CMP BH,00HJZ KEY0_1CALL CLEARKEY0_1: CALL LP1MOV AL,3FHMOV [SI+4],ALMOV AL,00HMOV [DI+4],ALCALL DISPRETKEY1: CMP BH,00HJZ KEY1_1CALL CLEAR KEY1_1: CALL LP1MOV AL,06HMOV [SI+4],ALMOV AL,01HMOV [DI+4],ALCALL DISPRETKEY2: CMP BH,00HJZ KEY2_1CALL CLEAR KEY2_1: CALL LP1MOV AL,5BHMOV [SI+4],ALMOV AL,02HMOV [DI+4],ALCALL DISPRETKEY3: CMP BH,00HJZ KEY3_1CALL CLEAR KEY3_1: CALL LP1MOV AL,4FHMOV [SI+4],ALMOV AL,03HMOV [DI+4],ALCALL DISPRETKEY4: CMP BH,00HJZ KEY4_1CALL CLEAR KEY4_1:CALL LP1MOV AL,66HMOV [SI+4],ALMOV AL,04HMOV [DI+4],ALRETKEY5: CMP BH,00HJZ KEY5_1CALL CLEAR KEY5_1: CALL LP1MOV AL,6DHMOV [SI+4],ALMOV AL,05HMOV [DI+4],ALCALL DISPRETKEY6: CMP BH,00HJZ KEY6_1CALL CLEAR KEY6_1: CALL LP1MOV AL,7DHMOV [SI+4],ALMOV AL,06HMOV [DI+4],ALCALL DISPRETKEY7: CMP BH,00HJZ KEY7_1CALL CLEAR KEY7_1: CALL LP1MOV AL,07HMOV [SI+4],ALMOV AL,07HMOV [DI+4],ALCALL DISPRETKEY8: CMP BH,00HJZ KEY8_1CALL CLEAR KEY8_1: CALL LP1MOV AL,7FHMOV [SI+4],ALMOV AL,08HMOV [DI+4],ALRETKEY9: CMP BH,00HJZ KEY9_1CALL CLEARKEY9_1: CALL LP1MOV AL,6FHMOV [SI+4],ALMOV AL,09HMOV [DI+4],ALCALL DISPRETKEYPLUS: CMP BH,00H ;设置加法的标志位以及程序的跳转判定JNZ KEYPLUS_1MOV BX,0101HCALL ADD1KEYPLUS_1: MOV BX,0101HRETKEYEQUAL: MOV BH,01H ;设置等号的标志位以及程序的跳转判定CMP BL,00HJZ EQUALFCMP BL,01HJZ ADDFCMP BL,02HSTTE: RETEQUALF: CALL EQUAL1JMP STTEADDF: CALL ADDSUMJMP STTEKEYCLEAR:CALL CLEAR2 ;按键CLEAR的功能调用RETCLEAR: MOV SI,OFFSET V A2 ;CLEAR系列的程序(作用是全部复位) MOV DI,OFFSET V A3MOV CX,0006HCLEAR1:MOV AL,3FHMOV [SI],ALMOV AL,00HMOV [DI],ALINC SIINC DILOOP CLEAR1MOV BH,00HRETCLEARPLUS: MOV DI,OFFSET V A3 ;加法专用的清零程序,实现连加的重要部分MOV CX,0006HCLEARPLUS1: MOV AL,00HMOV [DI],ALINC SIINC DILOOP CLEARPLUS1MOV BH,00HRETCLEAR2: MOV SI,OFFSET V A2MOV DI,OFFSET V A3MOV CX,0006HCLEAR3: MOV AL,3FHMOV [SI],ALMOV AL,00HMOV [DI],ALINC SIINC DILOOP CLEAR3CLEAR4: MOV SI,OFFSET SUMMOV CX,0006HCLEAR5: MOV AL,00HMOV [SI],ALINC SILOOP CLEAR5MOV BX,00HRETADD1: PUSH BX ;加法的子程序实现MOV SI,OFFSET V A3MOV DI,OFFSET SUMCLCXOR AH,AHMOV CX,0005HMOV BL,08HADD1_1: MOV AL,[DI]ADD AL,[SI]ADD AL,AHCBWDIV BLMOV [DI],AHMOV AH,ALINC SIINC DILOOP ADD1_1MOV [DI],AHCALL CLEARPLUSPOP BXRETEQUAL1: MOV SI,OFFSET V A3MOV DI,OFFSET SUMMOV CX,00006H EQUAL1_1: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP EQUAL1_1CALL CHANGECALL DISPRETADDSUM: CALL ADD1CALL CHANGECALL DISPRETLP1: MOV SI,OFFSET V A2MOV DI,OFFSET V A3MOV CX,0004HLP2: MOV AL,[SI+3]MOV [SI+4],ALMOV AL,[DI+3]MOV [DI+4],ALDEC SIDEC DILOOP LP2RETLP3: MOV CX,0006HMOV SI,OFFSET V A3MOV DI,OFFSET SUMLP4: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP LP4RETCHANGE: PUSH BX ;意思是转码,将SUM存储器里面的东西调到V A2中MOV SI,OFFSET V A2MOV DI,OFFSET SUMMOV BX,OFFSET TABLEMOV CX,0006HCOMP0: MOV AL,[DI]XLATMOV [SI],ALINC SIINC DILOOP COMP0POP BXRETDISP: MOV SI,OFFSET V A1MOV DI,OFFSET V A2MOV DL,[DI+5]CMP DL,3FHJNZ DIR5MOV DL,[DI+4]CMP DL,3FHJNZ DIR4MOV DL,[DI+3]CMP DL,3FHJNZ DIR3MOV DL,[DI+2]CMP DL,3FHJNZ DIR2MOV DL,[DI+1]CMP DL,3FHJNZ DIR1JMP DIR0DIR5: MOV CX,0006HJMP DIRDIR4: MOV CX,0005HJMP DIRDIR3: MOV CX,0004HJMP DIRDIR2: MOV CX,0003HJMP DIRDIR1: MOV CX,0002HJMP DIRDIR0: MOV CX,0001HJMP DIR DIR: MOV DX,0600HMOV AL,[SI]OUT DX,ALMOV DX,0602HMOV AL,[DI]OUT DX,ALCALL DELAYINC SIINC DILOOP DIRRET DELAY: PUSH AXPUSH CXMOV CX,0005H DELAY1: MOV AX,00F0H DELAY2: DEC AXJNZ DELAY2LOOP DELAY1POP CXPOP AXRETSTTK: CALL DISPMOV AL,00HMOV DX,0600HOUT DX,ALMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ STTKJMP STT CODE ENDSEND STARTPart3: ※定义键盘按键:10个数字键(0~9);6个功能键:+(加),-(减),*(乘),/(除),=(等于),CLEAR(清零)※实现五位八进制数乘法运算.可连续做乘法运算STACK SEGMENT STACKDW 64 DUP(?)STACK ENDSDA TA SEGMENTV A1 DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEHV A2 DB 3FH,3FH,3FH,3FH,3FH,3FHV A3 DB 00H,00H,00H,00H,00H,00HV A4 DB 00H,00H,00H,00H,00H,00HV A5 DB 00H,00H,00H,00H,00H,00HSUM DB 00H,00H,00H,00H,00H,00HMULSUM DB 00H,00H,00H,00H,00H,00HTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV DX,0606HMOV AL,88HOUT DX,ALMOV BX,0000HSTT: MOV AL,00HMOV DX,0600HOUT DX,ALMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ KEYABCCALL DISPJMP STTKEYABC:CALL DELAYMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ KEY1CJMP STTKEY1C: MOV DX,0600HMOV AL,0FEHOUT DX,ALMOV DX,0604HIN AL,DXKEY_0: TEST AL,10HJNZ KEY_1CALL KEY0JMP STTKKEY_1: TEST AL,20HJNZ KEY_4CALL KEY1JMP STTKKEY_4: TEST AL,40HJNZ KEY_7CALL KEY4JMP STTKKEY_7: TEST AL,80HJNZ KEY2CCALL KEY7JMP STTKKEY2C: MOV DX,0600HMOV AL,0FDHOUT DX,ALMOV DX,0604HIN AL,DXKEY_C: TEST AL,10HJNZ KEY_2CALL KEYCLEARJMP STTKKEY_2: TEST AL,20HJNZ KEY_5CALL KEY2JMP STTKKEY_5: TEST AL,40HJNZ KEY_8CALL KEY5JMP STTKKEY_8: TEST AL,80HJNZ KEY3CCALL KEY8JMP STTKKEY3C: MOV DX,0600HMOV AL,0FBHOUT DX,ALMOV DX,0604HIN AL,DXKEY_E: TEST AL,10HJNZ KEY_3CALL KEYEQUALJMP STTKKEY_3: TEST AL,20HJNZ KEY_6CALL KEY3JMP STTKKEY_6: TEST AL,40HJNZ KEY_9CALL KEY6JMP STTKKEY_9: TEST AL,80HJNZ KEY4CCALL KEY9JMP STTKKEY4C: MOV DX,0600HMOV AL,0F7HOUT DX,ALMOV DX,0604HIN AL,DXKEY_P: TEST AL,10HJNZ KEY_MINUSJMP STTKKEY_MINUS:TEST AL,20HJNZ KEY_MULJMP STTKKEY_MUL: TEST AL,40HJNZ KEY_DIVCALL KEYMULJMP STTKKEY_DIV: TEST AL,80HKEY_G: JMP STTK;结束按键扫描,下面是按键处理函数(这里只有乘法功能的定义)KEY0: CMP BH,00HJZ KEY0_1CALL CLEAR KEY0_1: CALL LP1MOV AL,3FHMOV [SI+4],ALMOV AL,00HMOV [DI+4],ALCALL DISPRETKEY1: CMP BH,00HJZ KEY1_1CALL CLEAR KEY1_1: CALL LP1MOV AL,06HMOV [SI+4],ALMOV AL,01HMOV [DI+4],ALCALL DISPRETKEY2: CMP BH,00HJZ KEY2_1CALL CLEAR KEY2_1: CALL LP1MOV AL,5BHMOV [SI+4],ALMOV AL,02HMOV [DI+4],ALCALL DISPRETKEY3: CMP BH,00HJZ KEY3_1CALL CLEAR KEY3_1: CALL LP1MOV AL,4FHMOV [SI+4],ALMOV AL,03HMOV [DI+4],ALCALL DISPRETKEY4: CMP BH,00HJZ KEY4_1CALL CLEARKEY4_1:CALL LP1MOV AL,66HMOV [SI+4],ALMOV AL,04HMOV [DI+4],ALCALL DISPRETKEY5: CMP BH,00HJZ KEY5_1CALL CLEAR KEY5_1: CALL LP1MOV AL,6DHMOV [SI+4],ALMOV AL,05HMOV [DI+4],ALCALL DISPRETKEY6: CMP BH,00HJZ KEY6_1CALL CLEAR KEY6_1: CALL LP1MOV AL,7DHMOV [SI+4],ALMOV AL,06HMOV [DI+4],ALCALL DISPRETKEY7: CMP BH,00HJZ KEY7_1CALL CLEAR KEY7_1: CALL LP1MOV AL,07HMOV [SI+4],ALMOV AL,07HMOV [DI+4],ALCALL DISPRETKEY8: CMP BH,00HJZ KEY8_1CALL CLEAR KEY8_1: CALL LP1MOV AL,7FHMOV [SI+4],ALMOV AL,08HMOV [DI+4],ALCALL DISPRETKEY9: CMP BH,00HJZ KEY9_1CALL CLEARKEY9_1: CALL LP1MOV AL,6FHMOV [SI+4],ALMOV AL,09HMOV [DI+4],ALCALL DISPRETKEYMUL: CMP BH,00HJNZ KEYMUL_1MOV BX,0103HCALL MUL1 KEYMUL_1: MOV BX,0103HRETKEYEQUAL: MOV BH,01HCMP BL,00HJZ EQUALFCMP BL,03HJZ MULFSTTE: RETEQUALF: CALL EQUAL1JMP STTE MULF: CALL MULSUM1JMP STTEKEYCLEAR: CALL CLEAR2RETCLEAR: MOV SI,OFFSET V A2MOV DI,OFFSET V A3MOV CX,0006H CLEAR1: MOV AL,3FHMOV [SI],ALMOV AL,00HMOV [DI],ALINC SIINC DILOOP CLEAR1MOV BH,00HRETCLEARPLUS: MOV DI,OFFSET V A3PUSH CXMOV CX,0006H CLEARPLUS1: MOV AL,00HMOV [DI],ALINC DILOOP CLEARPLUS1POP CXMOV BH,00HRETCLEAR2: MOV SI,OFFSET V A2MOV DI,OFFSET V A3MOV CX,0006HCLEAR3: MOV AL,3FHMOV [SI],ALMOV AL,00HMOV [DI],ALINC SIINC DILOOP CLEAR3CLEAR4: MOV DI,OFFSET MULSUMMOV AL,01HMOV [DI],ALMOV AL,00HMOV [DI+1],ALMOV [DI+2],ALMOV [DI+3],ALMOV [DI+4],ALMOV [DI+5],ALMOV SI,OFFSET SUMMOV DI,OFFSET V A4MOV CX,0006HCLEAR5: MOV AL,00HMOV [SI],ALMOV [DI],ALINC SIINC DILOOP CLEAR5MOV BX,0000HRETCLEARV A4: PUSH CXMOV SI,OFFSET V A4MOV CX,0006HCLEARV A41: MOV AL,00HMOV [SI],ALINC SILOOP CLEARV A41POP CXRETMUL1: PUSH BX (相乘子程序) MOV SI,OFFSET V A3XOR CX,CXXOR AX,AXMOV BX,1000HMOV AL,[SI+4]CMP AL,00HJZ MULNEXT1MUL BXADD CX,AXXOR AX,AXMULNEXT1: MOV BX,0200HMOV AL,[SI+3]CMP AL,00HJZ MULNEXT2MUL BXADD CX,AXXOR AX,AXMULNEXT2: MOV BX,0040HMOV AL,[SI+2]CMP AL,00HJZ MULNEXT3MUL BXADD CX,AXXOR AX,AXMULNEXT3: MOV BX,0008HMOV AL,[SI+1]CMP AL,00HJZ MULNEXT4MUL BXADD CX,AXXOR AX,AXMULNEXT4: MOV AL,[SI]ADD CX,AXXOR AX,AXMOV SI,OFFSET MULSUM (开始运行相乘)MOV AL,00HCMP [SI],ALJNZ MUL1_1CMP [SI+1],ALJNZ MUL1_1CMP [SI+2],ALJNZ MUL1_1CMP [SI+3],ALJNZ MUL1_1CMP [SI+4],ALJNZ MUL1_1CMP [SI+5],ALJNZ MUL1_1PUSH CXMOV CX,0006HMOV SI,OFFSET V A3MOV DI,OFFSET MULSUMLPJ2: MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP LPJ2POP CXJMP STTKMUL1_1: MOV SI,OFFSET MULSUMMOV DI,OFFSET V A4XOR AX,AXMOV BL,08HPUSH CXMOV CX,0005HMUL1_2: MOV AL,[DI]ADD AL,[SI]ADD AL,AHCBWDIV BLMOV [DI],AHMOV AH,ALINC SIINC DILOOP MUL1_2MOV [DI],AHPOP CXLOOP MUL1_1CALL CLEARPLUSPOP BXCALL LP3CALL CLEARV A4RETMULSUM1: CALL MUL1CALL CHANGEMULCALL CLEARV A4CALL DISPRETLP1: M OV SI,OFFSET V A2MOV DI,OFFSET VA3MOV CX,0004HLP2: M OV AL,[SI+3]MOV [SI+4],ALMOV AL,[DI+3]MOV [DI+4],ALDEC SIDEC DILOOP LP2RETLP3: MOV CX,0006HMOV SI,OFFSET V A4MOV DI,OFFSET MULSUMLP4: M OV AL,[SI]MOV [DI],ALINC SIINC DILOOP LP4RETCHANGEMUL: PUSH BXMOV SI,OFFSET V A2MOV DI,OFFSET MULSUMMOV BX,OFFSET TABLEMOV CX,0006H COMPMUL0: MOV AL,[DI]XLATMOV [SI],ALINC SIINC DILOOP COMPMUL0POP BXRETDISP: MOV SI,OFFSET V A1MOV DI,OFFSET V A2MOV DL,[DI+5]CMP DL,3FHJNZ DIR5MOV DL,[DI+4]CMP DL,3FHJNZ DIR4MOV DL,[DI+3]CMP DL,3FHJNZ DIR3MOV DL,[DI+2]CMP DL,3FHJNZ DIR2MOV DL,[DI+1]CMP DL,3FHJNZ DIR1JMP DIR0DIR5: MOV CX,0006HJMP DIRDIR4: MOV CX,0005HJMP DIRDIR3: MOV CX,0004HJMP DIRDIR2: MOV CX,0003HJMP DIRDIR1: MOV CX,0002HJMP DIRDIR0: MOV CX,0001HJMP DIRDIR: MOV DX,0600HMOV AL,[SI]OUT DX,ALMOV DX,0602HMOV AL,[DI]OUT DX,ALCALL DELAYINC SIINC DILOOP DIRRETDELAY: PUSH AXPUSH CXMOV CX,0005H DELAY1: MOV AX,00F0H DELAY2: DEC AXJNZ DELAY2LOOP DELAY1POP CXPOP AXRETSTTK: CALL DISPMOV AL,00HMOV DX,0600HOUT DX,ALMOV DX,0604HIN AL,DXAND AL,0F0HCMP AL,0F0HJNZ STTKJMP STTCODE ENDSEND START。

相关主题