简易计算器程序设计剖析.docx

上传人:b****3 文档编号:10958673 上传时间:2023-05-28 格式:DOCX 页数:21 大小:91.94KB
下载 相关 举报
简易计算器程序设计剖析.docx_第1页
第1页 / 共21页
简易计算器程序设计剖析.docx_第2页
第2页 / 共21页
简易计算器程序设计剖析.docx_第3页
第3页 / 共21页
简易计算器程序设计剖析.docx_第4页
第4页 / 共21页
简易计算器程序设计剖析.docx_第5页
第5页 / 共21页
简易计算器程序设计剖析.docx_第6页
第6页 / 共21页
简易计算器程序设计剖析.docx_第7页
第7页 / 共21页
简易计算器程序设计剖析.docx_第8页
第8页 / 共21页
简易计算器程序设计剖析.docx_第9页
第9页 / 共21页
简易计算器程序设计剖析.docx_第10页
第10页 / 共21页
简易计算器程序设计剖析.docx_第11页
第11页 / 共21页
简易计算器程序设计剖析.docx_第12页
第12页 / 共21页
简易计算器程序设计剖析.docx_第13页
第13页 / 共21页
简易计算器程序设计剖析.docx_第14页
第14页 / 共21页
简易计算器程序设计剖析.docx_第15页
第15页 / 共21页
简易计算器程序设计剖析.docx_第16页
第16页 / 共21页
简易计算器程序设计剖析.docx_第17页
第17页 / 共21页
简易计算器程序设计剖析.docx_第18页
第18页 / 共21页
简易计算器程序设计剖析.docx_第19页
第19页 / 共21页
简易计算器程序设计剖析.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简易计算器程序设计剖析.docx

《简易计算器程序设计剖析.docx》由会员分享,可在线阅读,更多相关《简易计算器程序设计剖析.docx(21页珍藏版)》请在冰点文库上搜索。

简易计算器程序设计剖析.docx

简易计算器程序设计剖析

课程设计任务书

学生姓名:

于强专业班级:

电气0603

指导教师:

刘劲松工作单位:

武汉理工大学自动化学院

题目:

简易计算器程序设计

初始条件:

 用汇编语言编写程序,实现简易计算器的功能。

要求完成的主要任务:

(1)简易计算器可进行2位十进制数以内的加减法运算;

(2)使用0~9数字键,+、-、=功能键,“C”或“c”作为清除键。

如键入“11+12=”后即输出“23”,单击“C”或“c”键后清屏;

(3)可连续输入数据进行计算,直至单击“Q”或“q”键退出程序。

时间安排:

周次

具体时间

设计内容

第一周

1月4日

指导老师就课程设计内容、设计要求、设计进度安排、评分标准等作具体介绍。

强调课程设计期间纪律要求。

学生确定选题,明确设计内容及要求。

1月5日~6日

根据选题查阅资料,完成方案的初步设计,绘制程序流程草图。

1月7日

中期检查及答疑(向指导老师阐述设计思路,并解释程序流程图)。

1月8日

根据中期检查意见修改程序流程图,编写程序代码。

第二周

1月9日

程序调试、修改。

1月10日

指导老师检查程序运行效果,并就结果进行评分。

1月11~12日

学生撰写课程设计说明书。

1月13日

上交课程设计说明书,以及答辩。

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

简易计算器程序设计

1程序分析及其方案

1.1程序分析

该程序的目的是通过汇编语言,实现简单的两位十进制数内的加减运算。

程序通过数字和符号的输入,可以自动的出相应的计算结果。

例如:

在屏幕中输入:

“10+2=”,回车输入后,屏幕显示“10+2=12”。

并且该程序要求输入字母“C”或者“c”后,能清除屏幕内容。

输入字母“Q”或者“q”后可以退出程序。

经过分析我们可以知道,程序主要由三个模块组成:

1.计算模块。

该模块的总用时能判断输入的数据和判断相应的运算类型。

2.清屏模块。

该模块的作用是当键入相应的指令,可以清除屏幕内容,使屏幕处于开始状态,清楚原来显示内容。

3.退出模块。

当键入相应指令后,程序可以自动退出。

1.2设计方案

设计时应该充分考虑任务书所给的各项要求。

我在“微机原理实验平台集成开发环境”中进行程序的开发、修改和调试运行等测试。

在进行程序设计时,先进行程序的整体思路与要求,也就是设计内容的分析。

当分析好后,画出相应的流程图,以便在写代码时,能够有一个比较好的思路。

之后对所写的程序进行调试,看看所写的程序是否能满足系统要求。

如果不能,则需要进行相应的修改,知道达到相应的要求。

2程序流程图设计及说明

2.1设计说明

程序设计遵循模块化程序,这样可以大大降低重复语句,增加程序的高效性。

首先,设计处各个模块的作用。

因为程序分别涉及到退出、清屏、计算、输入功能,因此再设计程序时,将这些功能模块化。

在进行编制成功后,如果需要运行,只需要在主程序中进行相应的模块调用,就能实现相应的功能。

在设计模块时,应该把所有模块写在主程序前边或者在主程序前边有相应的定义。

之后再根据每个模块的不同要求进行模块的编写。

在写主程序时,当碰到相应的功能,此时只要通过命令调用模块,运行好,把模块计算的值返回这样可以实现模块的整体化,提高程序的高效,易修改,易查错的要求。

2.2流程方框图

图2-1程序流程方框图

3程序设计

3.1光标定位程序段

CURSMACROA,B

MOVAH,2;置光标位置

MOVBH,0;页号为0

MOVDH,A;设置光标的坐标为(A.B)

MOVDL,B

INT10H;BIOS调用

ENDM

该程序段的总用时当调用该子程序时,只需如下列方式调用,如:

CURS2,20.此时表明将光标定位到屏幕(2,20)

3.2清屏程序段

CLEARMACROCOLOR;清屏

MOVAH,6;屏幕初始化

MOVAL,0;页号

MOVCH,0;设置左上角的坐标为(0,0)

MOVCL,0

MOVDL,100;设置右上角的坐标为(100,100)

MOVDH,100

MOVBH,COLOR;卷入行属性

INT10H;BIOS调用

ENDM

该程序段的总用时是清除屏幕显示内容,调用方式:

CLEAR1EH

3.3输入程序段

CURS2,20;设置光标为(2.20)

DISPMSGMSG0;显示用户界面

CURS8,41;设置光标为(8,41),第一行

MOVBX,0

MOVCX,2

NEWCHAR1:

MOVAH,1;键盘输入并回显

INT21H;DOS调用

CMPAL,30H;检查输入的字符是不是数字

JAEJ1;如果不是,则转移至J1

JMPD2;是,转移到D2执行

J1:

CMPAL,39H;与9的ASCII侣氡

JBEJ2;如果输入的字符是0-9,则转移至J2

JMPD2;如果不是数字,则转移至D2

J2:

SUBAL,30H

CBW;AL的内容符号扩展到AH

XCHGAX,BX

MOVDI,10

MULDI

XCHGAX,BX

ADDBX,AX

LOOPNEWCHAR1

MOVDATA1,BX

CURS11,41;设置光标位为(11,40),第二行

MOVBX,0

MOVCX,2

NEWCHAR2:

MOVAH,1;键盘输入并回显

INT21H;DOS调用

CMPAL,30H;与0的ASCII码比较

JAEJ3;如果输入数字大于等于0则跳转至J3

JMPD2

J3:

CMPAL,39H;与9比较

JBEJ4;如果小于或等于9则跳转

JMPD2;如果输入不是数字则跳转

J4:

SUBAL,30H;如果输入不是0-9,则转化成相应的字符

CBW;将AL符号扩展到AH

XCHGAX,BX

MOVDI,10

MULDI

XCHGAX,BX

ADDBX,AX

LOOPNEWCHAR2

MOVDATA2,BX

MOVAX,DATA1

MOVBX,DATA2

PUSHAX

PUSHBX

该程序段是输入数据,能使输入的数据相应的进行储存,并且之后可以调用,同时判断是否输入错误。

3.4判断计算类型,并计算

INT21H;DOS调用

CMPAL,'+'

JEADDI;如果运算符为+,则计算两数之和

CMPAL,'-'

JESUBT;如果运算符为-,则计算两数之差

CMPAL,'*'

JEMULT;如果运算符为*,则计算两数之积

CMPAL,'/'

JEDIVI;如果运算符为/,则计算两数之商

判断类型,并且调用相应的程序段或命令进行计算

4程序调试

1.通过编译系统编译调试连接后,启动程序,如4-1显示:

图4-1程序启动后显示内容

 

2.随意输入两个2位十进制内数字,如下图4-2

图4-2输入两个有运算关系的数字

3.此时,按照选择上的choose进行需要进行的运算类型的选择比如上图我们选择加法,得出结果如下下图4-3所示

图4-3输入后显示的结果,并且程序从新开始

4.此时按照屏幕上所示,但按下‘Q’或者‘q’后,程序退出,当拿下其他任意键,屏幕清屏,然后可继续进行运算。

如下图4-4

图4-4清屏

5心得体会

通过本次实验,能初步理论联系实际,应用汇编语言,能简单设计出软件,并且能通自己的调试进行修改。

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,计算机已经成为当今社会生活工作中空前活跃的领域,在生活中可以说得是无处不在。

回顾起此次微机原理与接口技术课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说如何对程序的初始进行变成,如何利用流程方块图……通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多思路,编程问题,最后在刘劲松老师的辛勤指导下,和同学的帮助下,终于游逆而解。

同时,在刘劲松老师的身上我学得到很多实用的知识,在次我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

6参考文献

[1]《微机原理与接口技术》主编:

周佩玲彭虎傅忠谦出版社:

电子工业出版社2007

[2]《微机原理与接口技术学习指导》主编:

周佩玲彭虎傅忠谦出版社:

电子工业出版社2007

[3]《计算机高级应用》主编:

章工荣出版社:

高等教育2004

[4]《计算机程序设计基础》主编:

李文成出版社:

科学出版社2007

[5]《C语言高级程序设计及其讲解》主编:

张锦程出版社:

机械工业出版社2000

 

7程序附录

CURSMACROA,B

MOVAH,2;置光标位置

MOVBH,0;页号为0

MOVDH,A;设置光标的坐标为(A.B)

MOVDL,B

INT10H;BIOS调用

ENDM

;-------------------------------

DISPMSGMACROMESSAGE

LEADX,MESSAGE;传递MESSAGE的偏移地址

MOVAH,9;显示字符串

INT21H;DOS调用

ENDM

;----------------------------------

CLEARMACROCOLOR;清屏

MOVAH,6;屏幕初始化

MOVAL,0;页号

MOVCH,0;设置左上角的坐标为(0,0)

MOVCL,0

MOVDL,100;设置右上角的坐标为(100,100)

MOVDH,100

MOVBH,COLOR;卷入行属性

INT10H;BIOS调用

ENDM

.MODELSMALL

.STACK

.DATA;数据段定义

MSG0DB'********************',0DH,0AH;,0dh,0ah,0dh,0ah

DB'**',0DH,0AH

;db'**',0dh,0ah

;db'**',0dh,0ah

DB'*--------COUNTER--------*',0DH,0AH;,0dh,0ah,0dh,0ah

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'*DATA1:

'

DB'_______________*',0DH,0AH;,0dh,0ah,0dh,0ah,0dh

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH

DB'*DATA2:

'

DB'_______________*',0DH,0AH;,0dh,0ah,0dh,0ah,0dh

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH

DB'*RESULT:

'

DB'_______________*',0DH,0AH,0DH;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'**',0DH,0AH

DB'********************','$'

MSG1DB'choose+,-,*,/','$'

MSG2DB'youchoosewrong','$',0AH,0DH

MSG3DB'PressESCtoExit!

',0DH,0AH,'$'

MSG4DB'Pressanykeytocontinue!

',0DH,0AH,'$'

MSG5DB'-','$'

MSG6DB'.','$'

MSG7DB'errorinput!

','$'

MSG8DB'data2iswrong!

','$'

DATA1DW?

DATA2DW?

.CODE;代码段从这里开始

;--------------------------------------------

DEC_DIVPROCNEAR

CWD;将字转换为双字,AX内容符号扩展到DX

DIVCX

PUSHDX

MOVDL,AL

ADDDL,30H;将不是数字的字符转换为数字

MOVAH,2;显示输出

INT21H;DOS调用

POPDX

MOVAX,DX

RET

DEC_DIVENDP

;------------------------------------------

CHANGEPROCNEAR;该子程序的功能:

将AX中存储的十六进制数转换为十进制数

CMPAX,1000

JAEC1;AX≥1000则转移

CMPAX,100

JAEC2;AX≥100则转移

CMPAX,10

JAEC3;AX≥10则转移

JMPC4;AX<10

C1:

MOVCX,1000D

CALLDEC_DIV

C2:

MOVCX,100D

CALLDEC_DIV

C3:

MOVCX,10D

CALLDEC_DIV

C4:

MOVCX,1D

CALLDEC_DIV

RET

CHANGEENDP

;-------------------------------

BEGINPROCNEAR

BACK:

CLEAR1EH

CURS2,20;设置光标为(2.20)

DISPMSGMSG0;显示用户界面

CURS8,41;设置光标为(8,41),第一行

MOVBX,0

MOVCX,2

NEWCHAR1:

MOVAH,1;键盘输入并回显

INT21H;DOS调用

CMPAL,30H;检查输入的字符是不是数字

JAEJ1;如果不是,则转移至J1

JMPD2;是,转移到D2执行

J1:

CMPAL,39H;与9的ASCII侣氡

JBEJ2;如果输入的字符是0-9,则转移至J2

JMPD2;如果不是数字,则转移至D2

J2:

SUBAL,30H

CBW;AL的内容符号扩展到AH

XCHGAX,BX

MOVDI,10

MULDI

XCHGAX,BX

ADDBX,AX

LOOPNEWCHAR1

MOVDATA1,BX

CURS11,41;设置光标位为(11,40),第二行

MOVBX,0

MOVCX,2

NEWCHAR2:

MOVAH,1;键盘输入并回显

INT21H;DOS调用

CMPAL,30H;与0的ASCII码比较

JAEJ3;如果输入数字大于等于0则跳转至J3

JMPD2

J3:

CMPAL,39H;与9比较

JBEJ4;如果小于或等于9则跳转

JMPD2;如果输入不是数字则跳转

J4:

SUBAL,30H;如果输入不是0-9,则转化成相应的字符

CBW;将AL符号扩展到AH

XCHGAX,BX

MOVDI,10

MULDI

XCHGAX,BX

ADDBX,AX

LOOPNEWCHAR2

MOVDATA2,BX

MOVAX,DATA1

MOVBX,DATA2

PUSHAX

PUSHBX

CURS15,33;设置光标的位置为(15.33),第三行

DISPMSGMSG1;显示提示信息

MOVAH,1;接受键盘输入并回显

INT21H;DOS调用

CMPAL,'+'

JEADDI;如果运算符为+,则计算两数之和

CMPAL,'-'

JESUBT;如果运算符为-,则计算两数之差

CMPAL,'*'

JEMULT;如果运算符为*,则计算两数之积

CMPAL,'/'

JEDIVI;如果运算符为/,则计算两数之商

CURS16,25;设置光标为(16,25)

DISPMSGMSG2;在屏幕上输出提示信息

JMPD1

;----------------------------------------

;ADDTHETWODATAS

ADDI:

POPBX

POPAX

ADDAX,BX;计算两数字之和

PUSHAX

CURS14,41;设置光标位置为(14,41)

POPAX

CALLCHANGE;将结果转换为十进制数

JMPD1

;---------------------------------------

;SUBTRACTTHETWODATAS

SUBT:

POPBX

POPAX

CMPAX,BX;比较两数大小

JAED0;如果AX>=BX则跳转

XCHGAX,BX

PUSHAX

PUSHBX

CURS14,40;设置光标位置为(14,40)

DISPMSGMSG5;在屏幕上显示负号

POPBX

POPAX

D0:

SUBAX,BX;计算两数之差

PUSHAX

CURS14,41;设置光标位置为(14,41)

POPAX

CALLCHANGE;将结果转换为十进制数

JMPD1

;---------------------------------------

;MULTIPLYTHETWODATAS

MULT:

POPBX

POPAX

MULBX;计算两数之积

PUSHAX

CURS14,41;设置光标位置为(14,41)

POPAX

CALLCHANGE;将结果转换为十进制数

JMPD1

;---------------------------------------

;DIVIDETHETWODATAS

DIVI:

POPBX

POPAX

CMPBX,0;判断除数是否为0

JEERROR;如果是0则跳转

CWD

DIVBX;计算两数之商

PUSHDX

PUSHAX

CURS14,41;设置光标位置为(14,41)

POPAX

CALLCHANGE;将十六进制数转换为十进制数

POPDX

CMPDX,0

JNELOP;如果DX不等于0则跳转

JMPD1

LOP:

MOVCX,4;设置精确度为小数点后4位

PUSHDX

DISPMSGMSG6;输出小数点

POPDX

CON:

PUSHBX

MOVAX,DX

MOVBX,10

MULBX

POPBX

CWD;将AX的内容符号扩展到双字

DIVBX;计算小数点后每一位的数字

PUSHDX

PUSHCX

CALLCHANGE;将十六进制数转化为十进制数

POPCX

POPDX

CMPDX,0;判断是否已经计算到小数点后第六位

JED1;如果是,则跳转

LOOPCON;如果不是,就继续计算

ERROR:

CURS15,33;设置光标位置为(15,33)

DISPMSGMSG8;提示出错

D1:

RET

D2:

PUSHAX

PUSHBX

CURS15,33;设置光标位置为(15,33)

DISPMSGMSG7;提示输入出错

POPBX

POPAX

RET

BEGINENDP

;----------------------------------------

MAINPROCNEAR

MOVAX,@DATA

MOVDS,AX

MOVES,AX

PUSHDS

XORAX,AX

PUSHAX

MOVDATA2,0;将缓冲区清空

MOVDATA1,0

AGAIN:

CALLBEGIN

CURS16,23;设置光标位置为(16.23)

DISPMSGMSG3;在屏幕上输出提示信息,提示退出的方法

CURS17,23;设置光标位置为(17.23)

DISPMSGMSG4;在屏幕上输出提示信息,提示继续的方法

MOVAH,7;键盘输入,无回显

INT21H;DOS调用

CMPAL,27;判断输入的是否为ESC

JNEAGAIN;如果不是就继续执行以上运算

EXIT:

MOVAX,4C00H;如果是就退出系统

INT21H;DOS调用

MAINENDP

ENDMAIN

 

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

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2