十进制加减法.docx
《十进制加减法.docx》由会员分享,可在线阅读,更多相关《十进制加减法.docx(22页珍藏版)》请在冰豆网上搜索。
十进制加减法
目录
课程设计任务书2
1问题描述3
2前期分析3
3课程设计3
3.1总体设计3
3.2模块设计4
3.2.1求和模块4
3.2.2输入十进制数模块5
3.2.3存储器清零模块6
3.2.4减法模块7
4程序源代码7
5调试与分析13
6测试结果13
7经验与体会15
评分表16
课程设计任务书
学生姓名:
毛习均专业班级:
计算机1004班
指导教师:
许毅工作单位:
计算机科学与技术学院
题目:
十进制加减计算器
初始条件:
理论:
完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧.
实践:
完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法.
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计.具体的设计任务及要求:
1)编写程序实现十进制数的加减法;
2)将计算结果在屏幕上显示;
3)程序采用子程序结构,结构清晰;
4)友好清晰的用户界面,能识别输入错误并控制错误的修改.
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书.
阅读资料:
1)《IBM—PC汇编语言程序设计实验教程》实验2.4
2)《IBM—PC汇编语言程序设计(第2版)》例6.11
时间安排:
设计安排一周:
周1、周2:
完成系统分析及设计.
周3、周4:
完成程序调试,和验收.
周5:
撰写课程设计报告.
指导教师签名:
年月日
系主任(或责任教师)签名:
年月
十进制加减法计算器
1问题描述
用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改.在此程序中采用子结构程序使结构清晰.
2前期分析
此课题是做一个带显示界面的十进制加减法计算器.首先,程序中多次用到BIOS的10号类型的显示中断功能,所以,在完成此课题之前重点深入学习例行中断程序的理论知识以及用法.其次,识别输入错误的修改功能,这就需要判断错误并及时置光标到合适的位置,以便提示并修改错误.最后,对于采用子程序结构必须清晰了解课题的大体结构,然后分析与设计子程序结构.比如输入十进制数就可以采用子程序结构.
3课题设计
3.1总体设计
概括程序的整体流程,设计有好的用户界面,总体设计流程图如下
输入0
输入1
输入
N
Y
其他键Enter
图1有好用户界面
3.2模块设计
3.2.1求和模块
如右图2,求和模块,将加数与被
加数相加然后扩展为双字,最后通过求
余把每一位数存储在HE存储单元里,
后面把结果按位输出.
图2求和
3.2.2输入十进制数模块
Y
N
N
Y
图3输入十进制数
上图3,就是输入两个十进制数,对输入的字符判断,如果是0-9之间的数,则转化为十进制数,否则提示重新输入字符.
3.2.3存储单元清零模块
为保证不发生内存访问冲突,每次重新计算的时候都要存储单元清零.如图4
N
Y
图4存储单元清零
3.2.4减法模块
减法模块主要是比较减数与被减数的大小,如果data1>data2就直接计算,打印结果.否者将data1压入堆栈,显示’-’,然后data1出栈、计算,打印结果.
减法模块如下图5
Y
N
图5减法
4.程序源代码
DATASSEGMENT
STR1DB0AH,0DH,'********************************************'
STR2DB0AH,0DH,'**'
STR3DB0AH,0DH,'**'
STR4DB0AH,0DH,'*1:
Enterrun*'
STR5DB0AH,0DH,'**'
STR6DB0AH,0DH,'*otherkeysexit*'
STR7DB0AH,0DH,'**'
STR8DB0AH,0DH,'**'
STR9DB0AH,0DH,'**'
STR10DB0AH,0DH,'********************************************'
LENGTH1EQU$-STR1;至str1的字节数
STR11DB'EnterExit,Otherkeyscontinue!
$'
STR12DB'Pleaseinputagain!
$'
ERRDB'Error!
Pleaseinputagain!
$'
STR13DB'inputdata1:
','$'
STR14DB'inputdata2:
','$'
STR15DB'addresult:
','$'
STR16DB'-','$'
STR17DB'subresult:
','$'
COUNTDW?
VALUEDW?
JIASHUDW?
BEIJIASHUDW?
HEDW?
SHOWMACROM;定义宏,显示字符串
LEADX,M
MOVAH,9
INT21H
ENDM
GUANGBIAOMACROM1,M2
MOVDH,M1;行(Y坐标)
MOVDL,M2;列(X坐标)
MOVBH,0;显示页码
MOVAH,02
INT10H;用文本坐标下,设置光标位置
ENDM
QINGPINGMACROM1,M2,M3,M4,M5
MOVAH,6;向上滚屏
MOVAL,M1;滚动行数(0-清窗口)
MOVBH,0DH;空白区域的缺省属性
MOVCH,M2;窗口的左上角位置,Y坐标
MOVCL,M3;----------------,X坐标
MOVDH,M4;窗口的右上角位置,Y坐标
MOVDL,M5;----------------,X坐标
INT10H
ENDM
DATASENDS
STACKSSEGMENT
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVAL,3;80*2516色文本
MOVAH,0;设置显示模式为80*25彩色文本模式
INT10H
MOVBP,SEGSTR1;取段地址
MOVES,BP
MOVBP,OFFSETSTR1;取偏移地址
MOVCX,LENGTH1
MOVDX,0
MOVBL,09H;属性(颜色)
MOVAL,0;光标位置不变(1改变)属性存在BL中,2和3的属性不在BL中
GUANGBIAO4,15
MOVAH,13H;在TELETYPE模式下显示字符串
INT10H
MOVAH,1;键盘输入并回显
INT21H
CMPAL,31H;输入1进入加法器,输入2结束
;JNZNEXT
;NEXT:
;JMPLOOP8
GUANGBIAO8,20;确定光标位置(字符串起始位置)
SHOWSTR13
GUANGBIAO9,20
SHOWSTR14
GUANGBIAO10,20
SHOWSTR15
GUANGBIAO11,20
SHOWSTR17
MOVSI,-2
MOVCX,5
LOOP1:
;存储器清零
ADDSI,2
MOVHE[SI],0
LOOPLOOP1
MOVBX,0
LOOP2:
;输入被加数
QINGPING1,8,30,8,50
QINGPING1,9,30,9,50
QINGPING1,10,30,10,50
QINGPING1,11,30,11,50
GUANGBIAO8,30
CALLINPUT
MOVBEIJIASHU,BX
LOOP3:
;输入加数
QINGPING1,13,18,13,51
QINGPING1,12,20,12,50
MOVBX,0
GUANGBIAO9,30
MOVBX,0
CALLINPUT
MOVJIASHU,BX
LOOP4:
GUANGBIAO10,30;相加
MOVAX,BEIJIASHU
ADDAX,JIASHU
CWD
MOVDX,0;扩展并求结果各位数值
MOVBX,10000
DIVBX
MOV[HE],AX
MOVAX,DX;余数给AX
CWD
MOVBX,1000
DIVBX
MOV[HE+2],AX
MOVAX,DX
CWD
MOVBX,100
DIVBX
MOV[HE+4],AX
MOVAX,DX
CWD
MOVBX,10
DIVBX
MOV[HE+6],AX
MOV[HE+8],DX
MOVSI,-2
MOVCX,5
LOOP5:
ADDSI,2;结果输出
MOVDX,HE[SI]
ADDDX,30H
MOVAH,02
INT21H
LOOPLOOP5;每位循环输出
LOOP_I:
;JIANFA
GUANGBIAO11,30
MOVAX,BEIJIASHU
CMPAX,JIASHU
JAEFLAG
XCHGAX,JIASHU
PUSHAX
MOVDX,OFFSETSTR16
MOVAH,09H
INT21H
POPAX
FLAG:
SUBAX,JIASHU
CALLPRINT
JMPLOOP6
LOOP6:
GUANGBIAO13,19;退出或继续
SHOWSTR11
MOVAH,01
INT21H
CMPAL,0DH;回车退出
JNELOOP7
MOVAH,4CH
INT21H
LOOP7:
QINGPING1,13,18,13,51
GUANGBIAO12,21
SHOWSTR12
JMPLOOP1
LOOP8:
MOVAH,4CH
INT21H
ERROR:
GUANGBIAO12,21
SHOWERR
JMPLOOP1
INPUTPROCNEAR;输入子程序
LP1:
MOVAH,01
INT21H
CMPAL,0dH;输入回车输入结束
JEEXIT
CMPAL,31H
JBERROR
CMPAL,39H
JAERROR;不是0~9之间则显示错误
SUBAL,30H
CBW
X