加减乘除计算器设计Word下载.docx

上传人:b****5 文档编号:16276634 上传时间:2022-11-22 格式:DOCX 页数:16 大小:43.07KB
下载 相关 举报
加减乘除计算器设计Word下载.docx_第1页
第1页 / 共16页
加减乘除计算器设计Word下载.docx_第2页
第2页 / 共16页
加减乘除计算器设计Word下载.docx_第3页
第3页 / 共16页
加减乘除计算器设计Word下载.docx_第4页
第4页 / 共16页
加减乘除计算器设计Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

加减乘除计算器设计Word下载.docx

《加减乘除计算器设计Word下载.docx》由会员分享,可在线阅读,更多相关《加减乘除计算器设计Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

加减乘除计算器设计Word下载.docx

以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号

KEYPROC

CHECK:

CALLDISP;

等待按键按下的同时进行显示

MOVAL,0F0H;

所有行输出低电平

OUT44H,AL

INAL,40H

CMPAL,0FFH;

读列值

JZCHECK;

若都为高电平则无键按下,等待

MOVCX,50

LOOP$;

延时消抖

INAL,DX;

重读列值

CMPAL,0FFH

无键按下一直等待

MOVH,0;

有键按下,先把行列号变量清0

MOVL,0

MOVBL,01H

MOVBH,0FEH;

扫描法读键值:

从第一行开始测试,即PC0输出

低电平

NEXT:

MOVAL,BH

NEXTH:

INAL,40H;

读列值,判断是第几列有键按下

TESTAL,BL;

从第一列开始判断

JZWAIT0

ROLBL,1

CMPBL,10H;

当前行状态下没有任何列有键按下,则转为对下一行的测试

JZNEXTL

INCH;

每判断一列,列号加1

JMPNEXTH;

再对下一列进行判断

NEXTL:

MOVH,0

ROLBH,1;

对下一行测试,让下一个PC口输出低电平

CMPBH,0EFH

JZEXIT

INCL

JMPNEXT

WAIT0:

若有键按下,则等该按键松开后再计算键值

JNZWAIT0

CALLKEYVALUE;

调计算键值子程序

EXIT:

RET

KEYENDP

以下为计算键值子程序,通过行列号计算键值(键值=列号*4+行号)

键值存放在DL寄存器中

KEYVALUEPROC

MOVDL,L

MOVDH,H

SHLDL,1

SHLDL,1;

列号乘4

ADDDL,DH

CMPDL,0

JZNUM_CALL;

按下的是数字键

CMPDL,1

CMPDL,2

CMPDL,4

CMPDL,5

CMPDL,6

CMPDL,8

CMPDL,9

CMPDL,10

CMPDL,13

CMPDL,3

JZCONT_CALL;

按下的是运算键

CMPDL,7

CMPDL,11

CMPDL,15

CMPDL,14

JZOUTP_CALL;

按下的是等于键

CMPDL,12

JZCLR_CALL;

按下的是清除键

NUM_CALL:

CALLNUMBER;

调数字键处理子程序

JMPEXIT1

CONT_CALL:

MOVS,DL;

存放运算键的键值

MOVE,0

CALLCOUNT;

调运算键处理子程序,计算第一个加数

OUTP_CALL:

CALLOUTP;

调等号键处理子程序

CLR_CALL:

CALLCLEAR;

调清除键处理子程序

EXIT1:

KEYVALUEENDP

以下为清除键处理子程序,按下清除键后,X变量全部清0

CLEARPROC

MOVX[3],0

MOVX[2],0

MOVX[1],0

MOVX[0],0

CALLBITP

CLEARENDP

以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量

并根据运算符号,调用相应的运算子程序

OUTPPROC

PUSHAX

PUSHDX

PUSHBX

INCE

调运算键处理子程序,计算第二个运算数据

CMPS,15

JZADD_CALL;

运算符为加号,则调用加法子程序

CMPS,11

JZSUB_CALL;

运算符为减号,则调用减法子程序

CMPS,7

JZMUL_CALL;

运算符为乘号,则调用乘法子程序

CMPS,3

CALLDIVP;

运算符为除号,则调用除法子程序

JMPSTORE1

ADD_CALL:

CALLADDP

SUB_CALL:

CALLSUBP

MUL_CALL:

CALLMULP

STORE1:

MOVAX,Y;

以下程序将各运算子程序返回的运算结果,按位分解,送入X变量

MOVDX,0

MOVBX,1000

DIVBX

MOVX[0],AL

MOVAX,DX

MOVBL,100

DIVBL

MOVX[1],AL

MOVAL,AH

MOVAH,0

MOVBL,10

MOVX[2],AL

MOVX[3],AH

POPBX

POPDX

POPAX

OUTPENDP

以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量

或者将第二个运算数据的数值计算出来并存入X2变量

将运算符的值存入S变量

COUNTPROC

CALLBITP;

测试X中的数据是多少位

CMPCC,4;

输入的数据是4位数?

JZC4

CMPCC,3;

输入的数据是3位数?

JZC3

CMPCC,2;

输入的数据是2位数?

JZC2

JMPC1;

输入的数据是1位数?

C4:

MOVAX,0

MOVAL,X[0]

MULBX

MOVDX,AX

C3:

MOVAL,X[1]

MULBL

ADDDX,AX

C2:

MOVAL,X[2]

C1:

MOVAL,X[3]

CMPE,1

JNZX1_S

MOVX2,DX;

按下的是等号,则将第二个运算数据的值存入X2变量

JMPEXIT3

X1_S:

MOVX1,DX;

按下的是运算符号,则将第一个运算数据的值存X1变量

MOVX[3],0;

清空X变量

EXIT3:

COUNTENDP

以下为数字键处理子程序

该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数

NUMBERPROC

CMPDL,8

JZK1

CMPDL,9

JZK2

CMPDL,10

JZK3

CMPDL,4

JZK4

CMPDL,5

JZK5

CMPDL,6

JZK6

CMPDL,0

JZK7

CMPDL,1

JZK8

CMPDL,2

JZK9

CMPDL,13

JZK0

K1:

MOVDL,1

JMPN1

K2:

MOVDL,2

K3:

MOVDL,3

K4:

MOVDL,4

K5:

MOVDL,5

K6:

MOVDL,6

K7:

MOVDL,7

K8:

MOVDL,8

K9:

MOVDL,9

K0:

MOVDL,0

N1:

JNZCONTINUE

CALLCLEAR

CONTINUE:

CMPCC,0;

目前数据为0位,即没有数据,则转到SSS

JZSSS

若已有数据,以下程序将X左移8位。

例如:

先输入“1”,当再输入2时,

先要将“1”从个位移到十位,然后再将“2”存放到个位

MOVAH,X[2]

MOVDL,X[1]

MOVDH,X[0]

MOVCX,8

LL:

SHLAX,1

RCLDX,1

LOOPLL

MOVX[3],AL

MOVX[2],AH

MOVX[1],DL

MOVX[0],DH

SSS:

MOV[DI],DL

INCCC;

数据位数加1

判断数据位数

JNGEXIT2

MOVCC,0;

如果数据超过4位,重新从最低位开始存放

EXIT2:

调显示子程序,显示输入的数据

NUMBERENDP

加法子程序

ADDPPROC

MOVAX,X1

ADDAX,X2

MOVY,AX

ADDPENDP

减法子程序

SUBPPROC

SUBAX,X2

SUBPENDP

乘法子程序

MULPPROC

MOVDX,X2

MULDX

MULPENDP

除法子程序

DIVPPROC

MOVBX,X2

DIVPENDP

显示子程序,将X中的数值按位显示出来

DISPPROC

MOVBH,0

LEASI,DISCODE

测试X位数

CMPCC,4

JZQIAN

CMPCC,3

JZBAI

CMPCC,2

JZSHI

CMPCC,1

JMPG

JMPNONE

QIAN:

MOVAH,11100000B;

从第4位开始显示

MOVBL,X[0]

MOVAL,[SI+BX]

OUT42H,AL

CALLDELY

MOVAL,0

BAI:

MOVAH,11010000B;

从第3位开始显示

MOVBL,X[1]

SHI:

MOVAH,10110000B;

从第2位开始显示

MOVBL,X[2]

G:

MOVAH,01110000B;

从第1位开始显示

MOVBL,X[3]

JMPEXIT4

NONE:

MOVAL,0;

X中没有数据,不显示

EXIT4:

DISPENDP

分析数据位数子程序

BITPPROC

CMPX[0],0;

如果X[0]不为0,则数据为4位数

JNZFOURBIT

CMPX[1],0;

如果X[1]不为0,则数据为3位数

JNZTHREEBIT

CMPX[2],0;

如果X[2]不为0,则数据为2位数

JNZTOWBIT

CMPX[3],0;

如果X[3]不为0,则数据为1位数

JNZONEBIT

JMPZER0BIT;

否则,没有数据

FOURBIT:

MOVCC,4

JMPEXIT5

THREEBIT:

MOVCC,3

TOWBIT:

MOVCC,2

ONEBIT:

MOVCC,1

ZER0BIT:

MOVCC,0

EXIT5:

BITPENDP

延时子程序

DELYPROC

PUSHCX

MOVCX,100

LOOP$

POPCX

DELYENDP

CODEENDS

ENDSTART

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1