个位数加减乘法自测汇编程序设计.docx
- 文档编号:17832032
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:23
- 大小:33.83KB
个位数加减乘法自测汇编程序设计.docx
《个位数加减乘法自测汇编程序设计.docx》由会员分享,可在线阅读,更多相关《个位数加减乘法自测汇编程序设计.docx(23页珍藏版)》请在冰点文库上搜索。
个位数加减乘法自测汇编程序设计
皖西学院
课程设计任务书
系别:
机电系
专业:
电子信息
学生姓名:
学号:
课程设计题目:
个位数加/减/乘法自测汇编程序设计
起迄日期:
课程设计地点:
指导教师:
下达任务书日期:
09年6月5日
课程设计任务书
1.本次课程设计应达到的目的:
通过本设计使巩固学生对所学知识的掌握,培养学生运用课程中所学到的理论知识与实践紧密结合,独立地解决实际问题的能力,培养学生运用汇编软件的编程能力和编程技巧,锻炼其运用软件的综合能力。
2.本课程设计课题任务的内容和要求(包括原始数据、技术参数、设计要求等):
1、程序能显示键入的加/减/数乘、被加/减/乘数,并能完成相应的运算,显示计算结果;
2、程序具有差错功能,若输入操作数有误能显示“ERROR”且将原题重复显示,等待新的输入;若正确则返回第一步;
3、按某一功能键自动返回DOS;
4、写具体的汇编源程序,画出流程图;
5、撰写设计报告、调试报告、设计心得体会。
摘要
此次课程设计的的任务是个位数加、减、乘自测的汇编程序设计,汇编语言也是一个很强大的语言,在指定的环境下运行的速度很快。
设计的要求涉及到的是微机原理上的相关知识。
设计程序时我们要按照设计的要求去完成任务,在规定的时间内成功的设计,查阅相关的资料以助于设计。
做科学的方案设计,做合理的流程设计,做简化的程序设计。
加大团队合作精神。
相互交流经验。
最后成功完成程序的设计。
设计方案的制定(划分设计阶段、时间安排、拟采用方法):
第一阶段:
围绕程序设计进行相关的技术讨论,查找相关文档资料
第二阶段:
画好流程图,方案设计
第三阶段:
编写源代码、完成程序设计
第四阶段:
通过MASM5编译,连接,调试(测试)
第五阶段:
完成最终程序,保存源代码及已编译的可执行程序
第六阶段:
、完成课程设计报告书,相关内容存盘
设计思想
设计流程图
开始
判断输入的第一个数是否是0—9?
是否
是否
计算结果
设计基本思路
该课题的目标是用汇编语言编写一个程序,实现加、减、乘等多功能的运算法则,按照设计任务的要求,一般的设计思路要分几个模块。
第一,设计的要求是个位数的加、减、乘运算,我们首先就要对程序设置一般定义性的要求,最好是个位数,当然能多几位是更好的。
第二,程序如何从计算机的键盘上正确的读取按键信息十个比较重要的模块,在这个方面就需要用到到微机原理上讲的一些知识了。
第三,当有几个子程序都设计好的,如加法程序、减法程序、乘法程序等等,每个程序都是分开独立的,当计算机正确的从键盘上读取操作信息时,如加法信息,计算机又要一个程序模块去判决使用哪个运算程序。
计算机不是人,它没有理性的思考,所以只有我们人为的对它进行控制才能正确的操作。
第四,我们的思路也就该到了显示部分的程序了。
一个很好的程序能运行,我们也要它能在计算机上正确的显示出来。
这个也是整个程序中的一个很重要的模块。
从整体上我们综合考虑,这个设计的主要思路就是这些,不过一些小的细节我们也不能忽视。
一个完整的程序应该是一个系统化的结构。
在设计时我们也需要查阅很多资料和请教老师们的指点。
源程序代码清单
DSEGSEGMENT
STR1DB0AH,0DH,'********************************************$'
STR2DB0AH,0DH,'****$'
STR3DB0AH,0DH,'**welcomeyou!
**$'
STR4DB0AH,0DH,'****$'
STR5DB0AH,0DH,'**thisisprogrammeofsizeyunshuan**$'
STR6db0AH,0DH,'****$'
STR7db0AH,0DH,'**rang(-32768to32767)**$'
STR8DB0AH,0DH,'**pressptoexit!
**$'
STR9DB0AH,0DH,'**maker:
fishosoul·yu**$'
TR10DB0AH,0DH,'********************************************',0AH,0DH,'$'
SIGN1DW0;判断数字是否输入完毕
SIGN2DW0;判断括号是否配对
SIGN3DW0;
NUMBDW20HDUP(0);保存输入的数值
MARKDB'A';保存输入的运算符
DB10HDUP(0);
ERRORDB'YOURINPUTAREWRONG$'
DSEGENDS
DISPMACROM
LEADX,M
MOVAH,9
INT21H
ENDM
CHOICEMACROASC1,HAO1,HH;宏定义,给运算符赋权值
CMPAL,ASC1;
JNEOTHER&HAO1;
MOVCH,HH;
JMPOTHER7;
ENDM
CSEGSEGMENT;
ASSUMECS:
CSEG,DS:
DSEG
START:
CALLCLEAR
MOVAX,DSEG;
MOVDS,AX;
LEADI,NUMB;
LEASI,MARK;
DISPSTR1
DISPSTR3
DISPSTR4
DISPSTR5
DISPSTR6
DISPSTR7
DISPSTR8
DISPSTR9
DISPSTR10
;CALLCLEAR
CALLCR
;disperror
MOVAX,0
MOVDX,0
MOVBX,0
MOVCX,0
STA1:
CALLCR
INPUT:
MOVAH,1;
INT21H;
CMPAL,'P'
JEJ_SHU0
CMPAL,'p'
JEJ_SHU0
CMPAL,'=';
JEPD;是等号,进一步判断输入括号是否配对
CMPAL,28H;
JBINPUT;
CMPAL,39H;
JAINPUT;
CMPAL,2FH;判断是数字还是符号
JBEJUD;是符号转入响应操作
INCWORDPTRSIGN1;将数字标志位加一
SUBAL,30H;将asc码转16进制
MOVAH,0;
XCHGAX,[DI];
MOVBX,10;
MULBX;
XCHGAX,[DI];
ADD[DI],AX;
JMPINPUT;
PD:
CMPWORDPTRSIGN2,0;判断配对标志位
JEJUD;
JMPBC;
JUD:
CMPWORDPTRSIGN1,0;判断数值指针是否已经下移一位
JEFUH1;
ADDDI,2;
MOVWORDPTRSIGN1,0;
FUH1:
CALLADVANCE;判定优先级,
CMPCH,5;判断输入的是否是左括号
JNEPY;不是则判断输入的是否是右括号
INCWORDPTRSIGN2;是左括号,括号标志位1
MOVWORDPTRSIGN3,1;
PY:
CMPCH,1;判断输入的是否是右括号
JNEAGAIN;
DECWORDPTRSIGN2;是右括号,括号标志位减1
AGAIN:
CMPBYTEPTR[SI],'A';判断运算符存储区是否为空
JESAVE;
CMPCH,[SI];
JASAVE;
CMPBYTEPTR[SI],'('
JNEYIDO
DECSI
JMPINPUT
YIDO:
DECSI;
MOVCL,[SI];
CALLMATCH;判断是什么运算符并进行相应的计算
;DECSI;
JMPAGAIN;
Z_Z:
JMPINPUT
J_SHU0:
JMPJ_SHU;
SAVE:
CMPCH,0;
JEOVER1;
CMPCH,1;
JEZ_Z;“)”不保存,输入下一个数
INCSI;
MOV[SI],AL;
INCSI;
CMPCH,5;
JNEGO_ON;
MOVCH,2;改变(的权值
GO_ON:
MOV[SI],CH;
JMPINPUT;
BC:
LEADX,ERROR;
MOVAH,9;
INT21H;
JMPJ_SHU;
OVER1:
JMPOVER;
MATCHPROC;子程序,进行相应的运算
PUSHAX;
XORAX,AX
XORBX,BX
CMPCL,2AH;乘法运算
JNENEXT1
SUBDI,2
XCHGBX,[DI]
SUBDI,2
XCHGAX,[DI]
IMULBX
MOV[DI],AX
ADDDI,2
JMPFINISH
NEXT1:
CMPCL,2FH;除法运算
JNENEXT2
SUBDI,2
XCHGBX,[DI]
SUBDI,2
XCHGAX,[DI]
CWD
IDIVBX
MOV[DI],AX
ADDDI,2
JMPFINISH
NEXT2:
CMPCL,2BH;加法运算
JNENEXT3
SUBDI,2
XCHGBX,[DI]
SUBDI,2
ADD[DI],BX
ADDDI,2
JMPFINISH
NEXT3:
CMPCL,2DH;减法运算
JNEFINISH
SUBDI,2
XCHGBX,[DI]
SUBDI,2
SUB[DI],BX
ADDDI,2
FINISH:
POPAX
RET
MATCHENDP
ADVANCEPROC
CHOICE28H,1,5;(
OTHER1:
CHOICE29H,2,1;)
OTHER2:
CHOICE2AH,3,4;*
OTHER3:
CHOICE2FH,4,4;/
OTHER4:
CHOICE2BH,5,3;+
OTHER5:
CHOICE2DH,6,3;-
OTHER6:
CHOICE3DH,7,0;=
OTHER7:
RET
ADVANCEENDP
;***清屏***
clearprocnear
pushax
pushbx
pushcx
pushdx
movah,06h
moval,00h
movch,0
movcl,0
movbh,0fH
movdh,18H
movdl,4FH
int10h
movbh,0
movdx,0
MOVAH,02H
;MOVDL,0
INT10H
popdx
popcx
popbx
popax
ret
clearendp
;****回车换行****
CRPROC
PUSHAX
PUSHDX
MOVah,2
MOVdl,13
INT21H
movah,2
MOVdl,10
INT21H
POPDX
POPAX
RET
CRENDP
OVER:
SUBDI,2
CMPWORDPTR[DI],0
JGEW1
NEGWORDPTR[DI]
MOVDL,'-'
MOVAH,2
INT21H
W1:
MOVBX,10000
MOVCX,5
MOVSI,0
W2:
MOVAX,[DI]
MOVDX,0
DIVBX
MOV[DI],DX
CMPAL,0
JNEW3
CMPSI,0
JNEW3
CMPCX,1
JEW3
JMPW4
W3:
MOVDL,AL
ADDDL,30H
MOVAH,2
INT21H
MOVSI,1
W4:
MOVAX,BX
MOVDX,0
MOVBX,10
DIVBX
MOVBX,AX
LOOPW2
;CALLCR
J_SHU1:
MOVWORDPTR[DI+2],0
CALLCR
LEADI,NUMB;
LEASI,MARK
JMPSTA1
J_SHU:
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
程序调试
此程序是个位数加、减、乘自测的汇编,此程序一般来说总共分为三大模块,第一部分是程序解决如何从键盘上读取信息,取得相应的符号。
第二部分是程序解决如何计算加、减、乘的运算,及选择什么样的运算。
第三部分是显示部分,就是把计算出的结果如何显示出来。
整个程序的调试是从源程序的完整设计开始,在c52的环境下运行,将源程序输入到运行环境下,先保存,然后再编译,最后在运行。
经过一段时间的调试,很快这个程序就成功的运行起来了。
能很好的进行加、减、乘等运算了,并且我们设置了P键为还原键,即返回到dos界面的。
就这样我们一会儿就成功的完成了此设计的调试。
在程序的调试过程中,我们也遇到了一些麻烦,就是一开始没有设置返回到doc界面的按键等一些小问题,后来发现了一些不妥之处我们就进行的改善。
从而完善了程序的结构。
程序在运行的过程中就更系统化了。
心得体会
经过一周的磨炼和努力,无论从工作上还是从自身角度,我们都提高的很多,发现了自己的能力和未被挖掘的潜力,认证了自身的坚强与韧力,总结出只有在强压与竞争中才会有意想不到的收获和进步。
这次汇编课程设计为我们提供了与众不同的学习方法和学习机会,让我们从传统的被动授学转变为主动求学;从死记硬背的模式中脱离出来,转变为在实践中学习,增强了领悟、创新和推断的能力。
掌握自学的方法,形成工程理论整体模式,使工作、学习、生活都步入系统化流程;思考方式成熟,逻辑性规范、明确。
这些方法的提高是终身受益的,我认为这难得的一周,让我真正懂得了生活和学习的基本规律。
鸣谢
在这次为时两周的课程设计中,我们这个团队在一起努力的完成了指导老师给我们下达的任务,并且顺利、成功的完成了每个小任务。
在设计当中,我们也遇到了不少的困难,酷热的天气,我们尊敬的张斌老师不辞辛苦的帮助我们解决我们设计过程中的种种困难,张老师每天在实验室为我们每个人认真讲解,分析。
还有些帮助过我们的一些其他老师和同学。
十分感谢你们。
你的付出,给了我们回报,在这里祝愿张斌老师身体健康、工作顺利。
也祝愿每个老师和同学事业顺利,前途似锦!
参考文献
[1]戴梅萼,史嘉权微型计算机技术及应用。
北京:
清华大学出版社,2003
[2]仇玉章32位微型计算机原理与接口技术。
北京:
清华大学出版社,2001
[3]郑学坚周斌微型计算机原理及应用。
北京清华大学出版社,1998
[4]李伯成侯伯亨微型计算机原理及应用。
西安:
电子科技大学出版社1998
[5]邓元庆贾鹏数字电路与系统设计。
西安:
电子科技大学出版社2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 个位数 加减 乘法 自测 汇编程序 设计