简易计算器程序设计剖析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书
学生姓名:于强专业班级:电气0603
指导教师:刘劲松工作单位:武汉理工大学自动化学院
题目: 简易计算器程序设计
初始条件:
用汇编语言编写程序,实现简易计算器的功能。
要求完成的主要任务:
(1)简易计算器可进行2位十进制数以内的加减法运算;
(2)使用0~9数字键,+、-、=功能键,“C”或“c”作为清除键。如键入“11+12=”后即输出“23”,单击“C”或“c”键后清屏;
(3)可连续输入数据进行计算,直至单击“Q”或“q”键退出程序。
时间安排:
指导教师签名:年月日
系主任(或责任教师)签名:年月日
简易计算器程序设计
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光标定位程序段
CURS MACRO A,B
MOV AH,2 ;置光标位置
MOV BH,0 ;页号为0
MOV DH,A ;设置光标的坐标为(A.B)
MOV DL,B
INT 10H ;BIOS调用
ENDM
该程序段的总用时当调用该子程序时,只需如下列方式调用,如:CURS 2,20.此时表明将光标定位到屏幕(2,20)
3.2清屏程序段
CLEAR MACRO COLOR ;清屏
MOV AH,6 ;屏幕初始化
MOV AL,0 ;页号
MOV CH,0 ;设置左上角的坐标为(0,0)
MOV CL,0
MOV DL,100 ;设置右上角的坐标为(100,100)
MOV DH,100
MOV BH,COLOR ;卷入行属性
INT 10H ;BIOS调用
ENDM
该程序段的总用时是清除屏幕显示内容,调用方式:CLEAR 1EH
3.3输入程序段
CURS 2,20 ;设置光标为(2.20)DISPMSG MSG0 ;显示用户界面
CURS 8,41 ;设置光标为(8,41),第一行
MOV BX,0
MOV CX,2
NEWCHAR1:
MOV AH,1 ;键盘输入并回显
INT 21H ;DOS调用
CMP AL,30H ;检查输入的字符是不是数字JAE J1 ;如果不是,则转移至J1
JMP D2 ;是,转移到D2执行
J1: CMP AL,39H ; 与9的ASCII侣氡
JBE J2 ;如果输入的字符是0-9,则转移至J2
JMP D2 ;如果不是数字,则转移至D2
J2: SUB AL,30H CBW ;AL的内容符号扩展到AH
XCHG AX,BX
MOV DI,10
MUL DI
XCHG AX,BX
ADD BX,AX
LOOP NEWCHAR1
MOV DATA1,BX
CURS 11,41 ;设置光标位为(11,40),第二行
MOV BX,0
MOV CX,2
NEWCHAR2:
MOV AH,1 ;键盘输入并回显
INT 21H ;DOS调用
CMP AL,30H ;与0的ASCII码比较
JAE J3 ;如果输入数字大于等于0则跳转至
J3
JMP D2
J3: CMP AL,39H ;与9比较
JBE J4 ;如果小于或等于9则跳转
JMP D2 ;如果输入不是数字则跳转
J4: SUB AL,30H ;如果输入不是0-9,则转化成相应的字符
CBW ;将AL符号扩展到AH
XCHG AX,BX
MOV DI,10 MUL DI
XCHG AX,BX ADD BX,AX LOOP NEWCHAR2 MOV DATA2,BX MOV AX,DATA1 MOV BX,DATA2 PUSH AX PUSH BX
该程序段是输入数据,能使输入的数据相应的进行储存,并且之后可以调用,同时判断是否输入错误。
3.4判断计算类型,并计算
INT 21H ;DOS调用
CMP AL,'+'
JE ADDI ;如果运算符为+,则计算两数之和
CMP AL,'-'
JE SUBT ;如果运算符为-,则计算两数之差
CMP AL,'*'
JE MULT ;如果运算符为*,则计算两数之积
CMP AL,'/'
JE DIVI ;如果运算符为/,则计算两数之商
判断类型,并且调用相应的程序段或命令进行计算
4程序调试
1.通过编译系统编译调试连接后,启动程序,如4-1显示:
图4-1 程序启动后显示内容