《微机原理实验简易计算器》由会员分享,可在线阅读,更多相关《微机原理实验简易计算器(7页珍藏版)》请在金锄头文库上搜索。
1、-【实验题目】简易计算器设计【实验目的】综合测试学生微机接口技术及应用能力,包括系统构思设计、电路设计搭建、软件调试等;结合应用实际,培养学生运用微机技术效劳应用、效劳实际的能力。【根本要求】1) 利用实验箱上的 4x4 键盘及 6 位数码管,实现两个 16 位宽的非负整数065535进展、运算,计算结果限制在围-6553565535,超过围在数码管最低位显示E;2) 16 个按键的分配可以自行指定;【扩展要求】1) 按根本要求保持输入的围不变16 位宽 ,扩展计算结果的围到用足6 位数码管,当计算结果超过-65535999999 时,显示 E;2) 增加的功能,有小数显示;【实验程序】;该程
2、序实现了根本要求及扩展要求的2DSEG SEGMENTBUFF DB 6 DUP(?)LED_7DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H,40HPOSITION DB 0DFH,0EFH,0F7H,0FBH,0FDH,0FEHUNIT10 DW 10000,1000,100,10,1NEWNUM DB 0COUNT DB 0FLAG DB 0;是否有键按下的标志NEGTI DB 0;是否为负数的标志NUM DW 0NUM1 DW 0NUM2 DW 0TAG DB 0;运算种类标志POINT DB
3、0;除法结果添加小数点标志RESULT DW 0DSEG ENDSCSEG SEGMENTASSUME DS:DSEG,CS:CSEGSTART:MOV AX,DSEGMOV DS,AXMOV DX,300CH;8255 初始化MOV AL,81HOUT DX,ALLEA SI,BUFFMOV CX,6NEXT:MOV BYTE PTRSI,16INC SILOOP NEXTCALL SHOW;将显示缓冲区中容在 LED 上一次显示出来MOV COUNT,0;记按下了几位数NEXT2:CALL SHOWCALL SCAN;判断是否有按键按下CMP FLAG,1JZ OKJMP NEXT2OK:
4、MOV FLAG,0MOV POINT,0MOV DX,3000H;判断是哪一个键被按下MOV AL,0FFHOUT DX,ALMOV CH,-1;CH 用于保存当前被扫描的列号MOV CL,07FHXL:ROL CL,1INC CHMOV DX,3000HMOV AL,CL- word.zl-OUT DX,ALMOV DX,3008HIN AL,DXAND AL,0FHCMP AL,0FHJZ XL;选中下一列被扫描CMP AL,0EHJNZ FOURMOV CL,0;CL 保存行号MOV DX,3000H;将 LED 关显示MOV AL,0FFHOUT DX,ALCALL DELAY2JM
5、P NEXT2JIAFA:MOV TAG,1;置加法标志CALL TO_DEC;将输入的数转化为十进制数保JMP FREEFOUR:CMP AL,0DHJNZ BAMOV CL,4JMP FREEBA:CMP AL,0BHJNZ SHIERMOV CL,8JMP FREESHIER:CMP AL,07HJNZ XLMOV CL,12FREE:ADD CH,CL;行列值相加为按键代表的值CMP CH,9E SHUZICMP CH,12;加法JZ JIAFACMP CH,13;减法JZ JIANFACMP CH,14;乘法JZ CHENGFACMP CH,15;除法JZ CHUFACMP CH,1
6、1;等号时进展运算JZ YUNSUANCMP CH,10;此键清屏重新输入JZ CLEARSHUZI:INC COUNTMOV NEWNUM,CHCALL COPY;将新输入的按键值送入显示缓冲区的最末位-存MOV AX,NUMMOV NUM1,AXJMP STARTJIANFA:MOV TAG,2CALL TO_DECMOV AX,NUMMOV NUM1,AXJMP STARTCHENGFA:MOV TAG,3CALL TO_DECMOV AX,NUMMOV NUM1,AXJMP STARTCHUFA:MOV TAG,4CALL TO_DECMOV AX,NUMMOV NUM1,AXJMP
7、STARTCLEAR:JMP STARTYUNSUAN:CALL TO_DEC制数保存MOV AX,NUMMOV NUM2,AXCMP TAG,1JZ SJIAFCMP TAG,2JZ SJIANFCMP TAG,3JZ SCHENGFCMP TAG,4JZ SCHUF;继续输入第二个按键数;将第二次输入的数转化为十进- word.zl-YEAH:CALL CHULI;将结果中零的位置 16 关显示MOV TAG,0MOV NEGTI,0CALL SHOWJMP NEXT2SJIAF:CALL JIAJMP YEAHSJIANF:CALL JIANJMP YEAHSCHENGF:CALL CH
8、ENGJMP YEAHSCHUF:CALL CHUJMP YEAHMOV AH,4CHINT 21HJIA PROC NEARPUSH AXPUSH CXPUSH SIMOV AX,NUM1ADD AX,NUM2JC YC1;溢出MOV RESULT,AXCALL TO_SHOWSHUJMP OVER1YC1:LEA SI,BUFFMOV BYTE PTRSI,14INC SIMOV CX,5SS0:MOV BYTE PTRSI,16INC SILOOP SS0OVER1:POP SIPOP CXPOP AX-RETJIA ENDPJIAN PROC NEARPUSH AXPUSH CXPUS
9、H SIMOV AX,NUM1CMP AX,NUM2JA POSITIVEMOV NEGTI,1;结果为负数MOV AX,NUM2SUB AX,NUM1JC YC2JMP OVPOSITIVE:MOV AX,NUM1SUB AX,NUM2JC YC2OV:MOV RESULT,AXCALL TO_SHOWSHUJMP OVER2YC2:LEA SI,BUFFMOV BYTE PTRSI,14INC SIMOV CX,5SS2:MOV BYTE PTRSI,16INC SILOOP SS2OVER2:POP SIPOP CXPOP AXRETJIAN ENDPCHENG PROC NEARPUS
10、H AXPUSH CXPUSH SIMOV AX,NUM1MUL NUM2JC YC3MOV RESULT,AX- word.zl-CALL TO_SHOWSHUJMP OVER3YC3:LEA SI,BUFFMOV BYTE PTRSI,14INC SIMOV CX,5SS3:MOV BYTE PTRSI,16INC SILOOP SS3OVER3:POP SIPOP CXPOP AXRETCHENG ENDPCHU PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIXOR DX,DXMOV AX,NUM1DIV NUM2PUSH DXMOV RESULT,AXCAL
11、L TO_SHOWSHUMOV POINT,1LEA SI,BUFFADD SI,5MOV CX,5PEA:MOV AL,SI-1MOV SI,ALDEC SILOOP PEAPOP DXMOV AX,10MUL DXXOR DX,DXDIV NUM2MOV SI,ALPOP SIPOP DXPOP CX-POP AXRETCHU ENDPCHULI PROC NEARPUSH SIPUSH CXLEA SI,BUFFADD SI,5XX:CMP BYTE PTRSI,0JNZ NOZEROMOV BYTE PTRSI,16DEC SIJMP XXNOZERO:CMP NEGTI,1JNZ Z
12、HENGINC SIMOV BYTE PTRSI,17ZHENG:POP CXPOP SICHULI ENDPTO_DEC PROC NEARPUSH SIPUSH AXPUSH BXPUSH CXLEA SI,BUFFMOV AL,COUNTXOR AH,AHADD SI,AXDEC SIXOR AX,AXXOR CH,CHMOV CL,COUNTAGAIN:ADD AX,AXMOV BX,AXADD AX,AXADD AX,AXADD AX,BXMOV BH,0MOV BL,SIADD AX,BX- word.zl-DEC SILOOP AGAINMOV NUM,AXPOP CXPOP B
13、XPOP AXPOP SIRETTO_DEC ENDPTO_SHOWSHU PROC NEARPUSH SIPUSH DIPUSH AXPUSH BXPUSH CXLEA DI,BUFFADD DI,5LEA SI,UNIT10MOV AX,RESULTMOV BYTE PTRDI,0DEC DILOP0:XOR CL,CLMOV BX,SILOP1:SUB AX,BXLOP3INC CLJMP LOP1LOP3:ADD AX,BXMOV DI,CLINC SIINC SIDEC DICMP BX,1JNZ LOP0POP CXPOP BXPOP AXPOP DIPOP SIRETTO_SHO
14、WSHU ENDP-SHOW PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DICMP POINT,1;是否需添加小数点JNZ NOPOINTMOV CH,0FFHAA3:LEA SI,BUFFLEA DI,POSITIONMOV AL,SILEA BX,LED_7XLATMOV DX,3004HOUT DX,ALMOV DX,3000HMOV AL,DIOUT DX,ALCALL DELAY;延时,使一位稳定显示INC SIINC DIMOV AL,SILEA BX,LED_7XLATOR AL,80H;填小数点MOV DX,3004HOU
15、T DX,ALMOV DX,3000HMOV AL,DIOUT DX,ALCALL DELAY;延时,使一位稳定显示INC SIINC DIMOV CL,4AA2:MOV AL,SILEA BX,LED_7XLATMOV DX,3004HOUT DX,ALMOV DX,3000HMOV AL,DIOUT DX,ALCALL DELAY;延时,使一位稳定显示- word.zl-INC SIINC DIDEC CHJZ REALSTOPDEC CLJNZ AA2JMP AA3NOPOINT:MOV CH,0FFHAA1:LEA SI,BUFFLEA DI,POSITIONMOV CL,6AA:MO
16、V AL,SILEA BX,LED_7XLATMOV DX,3004HOUT DX,ALMOV DX,3000HMOV AL,DIOUT DX,ALCALL DELAY;延时,使一位稳定显示INC SIINC DIDEC CHJZ REALSTOPDEC CLJNZ AAJMP AA1REALSTOP:POP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETSHOW ENDPDELAY PROC NEARPUSH BXPUSH CXMOV BX,3FFHDEL1:-MOV CX,0FFFHDEL2:LOOP DEL2DEC BXJNZ DEL1POP CXPOP BXRE
17、TDELAY ENDPDELAY2 PROC NEARPUSH BXPUSH CXMOV BX,3FHDEL3:MOV CX,0FFHDEL4:LOOP DEL4DEC BXJNZ DEL3POP CXPOP BXRETDELAY2 ENDPSCAN PROC NEARPUSH AXPUSH DXKS:MOV DX,3000HMOV AL,0OUT DX,ALMOV DX,3008HIN AL,DXAND AL,0FH;屏蔽高四位CMP AL,0FHJZ JIESHUMOV FLAG,1JIESHU:POP DXPOP AXRETSCAN ENDPCOPY PROC NEAR- word.zl-PUSH SIPUSH CXPUSH AXMOV CX,5LEA SI,BUFFADD SI,5NEXT1:MOV AL,SI-1MOV SI,ALDEC SILOOP NEXT1-MOV AL,NEWNUMMOV SI,ALPOP AXPOP CXPOP SIRETCOPY ENDPCSEG ENDSEND START- word.zl-