计算器设计.docx
《计算器设计.docx》由会员分享,可在线阅读,更多相关《计算器设计.docx(19页珍藏版)》请在冰点文库上搜索。
计算器设计
计算机与信息工程学院
《汇编语言》课程设计论文
设计题目计算器设计
专业计算机科学与技术
班级控制12-1班
学号21
姓名
指导教师
起止日期2014.06.16-2014.06.27
成绩
黑龙江科技大学
课程设计任务书
一、设计题目计算器的设计
二、设计的主要内容:
将+,-,*,/在提示信息以1,2,3,4的中显示出来,通过输入1,2,3,4中的一个字符确定运算的性质,并输入两个数,将运算后以字符串的形式输出。
3、指导教师评语:
成绩:
摘要
计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。
想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。
用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。
通过对各种指令的合理使用,设计各个功能模块。
当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。
关键词:
计算工具,汇编语言,输入输出
Abstract
Calculatorisoneofthemostsimpletools,simplecomputingdeviceshaveadd,subtract,multiplyanddividefourarithmeticfunctions.Wantstouseassemblylanguagetoachieveasimplecalculator,mustbebasedonthedatastorage,theuseofregisters,subtractingrelatedinstructions,andthecallingofmoduleassemblylanguageknowledgetouse,inordertorealizeabasicfunctionperfect,friendlyinterface,operationsimplecalculator.Inassemblylanguagetoachieveasimplecalculatoralsoinvolvesthedesignoftheinputandoutputmodule,youcanmultiply,add,subtractanddividejudgment,andoutofthedesignprocessofjudgment.Throughtherationaluseofallkindsofinstructions,eachfunctionmoduledesign.Whenimplementingtheprogrammodule,programthroughthecallfinallyrealizeasimplecalculator.
Keywords:
Computertools,assemblylanguage,inputandoutput
目录
1.背景分析及意义II
2.总体设计思想1
3.完成的主要功能2
4.软硬件环境要求2
5.程序流程图2
6.使用说明3
7.设计总结5
8.参考文献6
9.程序清单7
1.背景分析及意义
计算器是我们最常用到的工具,而学好汇编语言,会给我带来更加深刻的认识,汇编语言正以它的魅力吸引着我,通过实验我不仅仅能在学习当中,找到更多的快乐,而且还你能考验着我们的合作和分析能力,就拿计算器来说,通过两周的学习,我不仅仅你能够,用汇编语言,把这个实验做成功,而且可以用一些简单的的小转化程序,实现小的数制转化的实验,这不仅仅考验着我的耐性,而且对我以后的学习会有很大的帮助。
2.总体设计思想
(1)通过int21h的9号功能将程序的提示信息显示在屏幕上
(2)将输入的字符保存在[flag]中,用于判断做出何种运算。
(3)依次输入两个不超过两位的十进制数的字符串。
(4)通过转化程序将两个字符串转化为相应的十进制数,并分别保存在
[array],[array+2]为地址的字单元当中。
(5)将[flag]分别与‘+’,‘-’,‘*’,‘/’的ASCII码作比较,用于确定将要进行的运算。
(6)将运算后的结果保存在ax当中,通过转化将ax当中的十进制数转化为相应的字符的ASCII码,保存在[result]~[result+4]当中,并以'$'作为结束。
(7)通过int21h的9号功能将结果字符输出显示在显示器上.。
3.完成的主要功能
汇编,连接,运行成功后,会将一个提示框显示在屏幕上,输入1,
然后输入两个数,实现求和运算;输入2,输入两个数,实现求差运算,输
3,输入两个数,实现求积运算;输入4,输入两个数,实现求商运算,输入
或者其他键,都退出程
4.软硬件环境要求
(1)程序运行条件
用汇编语言编写出完整的程序,然后编译,分步运行,调试每一部分的程序,然后把代码写到记事本上,改一下文件的扩展名.asm。
然后将源程序用编译工具masm进行汇编,当显示0错误,0警告生成一个后缀为.obj,就可以进入连接环节,将源程序与目标程序连接,将生成,一个后缀为.exe的文件,接下来,就可以直接将文件名输入,然后回车,然后代码如果没有错误,就会达到预期的效果注意运行的程序和运行的工具要放在一个文件里。
(2)所需工具软件
所需要的工具有:
tddebug.exe,,link.exe,run.exe,obj.exe等工具
5.程序流程图如图1所示
是
否否
是
否
退出
图1,主程序流程图
6.使用说明
输出截图
(1)图2.运行程序后,没按按键前的界面
(2)图3.按1显示的界面
图2,运行后按键前的状态
图3,将99与09执行加法的界面
7.设计总结
通过这一次的汇编实训,我收获到了很多,对常用汇编指令有了深刻的认识并且能够合理的运用,对功能调用指令也有了认识和了解。
首先是对汇编语言性质的认识,汇编语言是低级语言,是与各种寄存器和堆栈联系紧密的机器底层语言
在我学习汇编语言之前我也学过其他的高级语言,接触汇编之后感觉这是门复杂的课程,较之高级语言,它代码量大,难懂。
经过这次课程设计之后我了解到只要认真投入地去思考机器是如何进行逻辑思考的并且熟悉指令,汇编语言的趣味性比高级语言更强。
通过这次对汇编的深刻了解,我发现汇编程序其实还是很有趣味的。
首先他指令的严谨性比之高级语言要强很多,而且他的指令简单,一条指令,最多有一个指令操作符,目的操作数和源操作数,相对高级语言的长程序还是比较简单的,至于难懂,我认为对汇编熟悉后,基本上还是很容易理解的。
这次的实训,巩固和加深课堂所学知识;同时将课本上的理论知识和实际应用有机的结合起来,培养我们分析和解决实际问题的能力;通过对汇编语言程序代码的阅读、修改、设计,理解和掌握复杂的汇编语言应用程序的编程,提高实践编程能力。
通过对汇编程序的深入的剖析,我明白了,汇编程序的魅力,它不仅仅考验着自己的耐力和解决事情的能力,而且还能带给你更多的宝贵的经验,同时对我的心理素质,和逻辑思维能力和组织你能力,表达能力,有较大的提高。
8.参考文献
[1]王成瑞,汇编语言设计,北京:
高等教育出版社,2003
[2]钱晓捷。
汇编语言程序设计(第二版),北京:
电子工业出版社,2005
[3]沈美明,温东婵,IBM-PC汇编语言程序设计(第二版)北京:
清华大学出版社,2001
[4]HydeR.汇编语言艺术,北京大学出版社,2005
[5]雷金辉,汇编语言程序设计,重庆:
重庆大学出版社,2001
9.程序清单
DATASEGMENT
INFO3DB13,10,'$'
BINFO0DB13,10,'*1.ADD*$'
BINFO1DB13,10,'*2.SUB*$'
BINFO2DB13,10,'*3.MUL*$'
BINFO3DB13,10,'*4.DIV*$'
CINFO0DB13,10,'*1.INPUTTHEFIRSTNUMBER*$'
CINFO1DB13,10,'*2.INPUTTHESECONDNUMBER*$
BUFFDB3
DB0
DB10DUP(0)
ARRAY1DB13,10,'PLEASEINPUTTHEFIRSTNUMBER:
$'
ARRAY2DB13,10,'PLEASEINPUTTHESECONDNUMBER:
$'
ARRAYDW2DUP(0)
RESULTDB10DUP(0),'$'
CRLFDB0DH,0AH,'$'
FLAGSDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;将数据段装入ds
JMPAB
EEXIT:
;实现退出功能的子程序
MOVAH,4CH
INT21H
AB:
CALLTWOMENU
MOV[FLAGS],0FFH;标志位置0ffh
MOVAH,1;从键盘输入一个字符并显示
INT21H
CMPAL,31H
JBEEXIT
CMPAL,34H
JAEEXIT;输入的字符与‘1’和‘3’作比较
MOV[FLAGS],AL;将输入的字符保存在标志位当中
MOV[ARRAY],0FFH
MOV[ARRAY+2],0FFH
A1:
MOVDX,OFFSETARRAY1
CALLINPUTNUMBER;调用子程序将array字符串显示出来,并
;输入第一个数
CMPCX,0
JZEEXIT
MOVWORDPTR[ARRAY],AX;将ax中的内容送给[array]字单元
CALLJISHUAN
JCAB
A2:
MOVDX,OFFSETARRAY2;将array2的首地址送给dx
CALLINPUTNUMBER
CMPCX,0;将输入的字符个数与cx作比较
JZEEXIT
MOVWORDPTR[ARRAY+2],AX
CALLJISHUAN
JCAB
ABCPROC
MOVCH,0
MOVBX,OFFSETBUFF
MOVCL,[BX+1];将缓冲区的第二个字节单元的数送
;给cl
CMPCX,0
JZABCD
PUSHCX
ADDBX,2
PUSHBX
L0:
SUBBYTEPTR[BX],30H;将字符转化为相对应的数字
INCBX
LOOPL0
POPBX
MOVAX,0
MOVCH,0
MOVCL,[BX-1]
L1:
MOVDL,10
MULDL
ADDAL,BYTEPTR[BX];将转化后的数保存在al中
INCBX
LOOPL1
POPCX
ABCD:
RET
ABCENDP
DEFPROC
MOVSI,OFFSETRESULT;将有效地址result送给si
ADDSI,4
MOVWORDPTR[SI+1],"$"
MOVCX,5
AG1:
MOVDX,0
MOVBX,10
DIVBX
PUSHDX
ADDDL,30H;将数字转化为相对应字符
MOV[SI],DL
DECSI
POPDX
LOOPAG1
MOVCX,4
AG3:
INCSI
MOVAL,[SI]
CMPAL,30H
JNZNOZEARO
LOOPAG3;通过循环,找出result~result+4字单
;元第一个不为零的字符
INCSI
NOZEARO:
CALLDISPCRLF
MOVDX,SI
MOVAH,9
INT21H
RET
DEFENDP
DISPCRLFPROC
MOVDX,OFFSETINFO3
DISPINFO:
MOVAH,9
INT21H
RET
DISPCRLFENDP
TWOMENUPROC;显示提示框子程序
CALLDISPCRLF
MOVDX,OFFSETBINFO0
CALLDISPINFO
MOVDX,OFFSETBINFO1
CALLDISPINFO
MOVDX,OFFSETBINFO2
CALLDISPINFO
MOVDX,OFFSETBINFO3
CALLDISPINFO
MOVDX,OFFSETBINFO4
CALLDISPINFO
CALLDISPCRLF
RET
TWOMENUENDP
INPUTNUMBERPROC;输入子程序
MOVAH,9
INT21H
MOVDX,OFFSETBUFF;将buff的地址赋值给dx用于输入数
;字
MOVAH,0AH
INT21H
CALLABC
RET
INPUTNUMBERENDP
JISHUANPROC
CMP[ARRAY],0FFH;判断是否输入数字
JZNNN
CMP[ARRAY+2],0FFH
JZNNN
CMP[FLAGS],32H
JZISADD
CMP[FLAGS],31H;与减号的ascii作比较
JZSSUB
CMP[FLAGS],33H;与乘号的ascii作比较
JZISMUL
JMPISDIV
NNN:
CLC
RET
ISADD:
;进行加法运算的子程序
MOVBX,WORDPTR[ARRAY]
MOVAX,WORDPTR[ARRAY+2]
ADDAX,BX
JMPDISP
ISSUB:
;进行减法运算的子程序
MOVAX,WORDPTR[ARRAY];将[array]字单元中的内容送ax
MOVBX,WORDPTR[ARRAY+2]
CMPAX,BX
JBSMALL
SUBAX,BX
JMPDISP;调用disp子程序将所得的差值转化为
;字符
SMALL:
SUBBX,AX
MOVAX,BX
JMPDISP;将ax与bx中的数进行无符号减法
ISMUL:
;进行乘法运算的子程序
MOVAX,WORDPTR[ARRAY]
MOVBX,WORDPTR[ARRAY+2]
MULBX
MOVDX,0
JMPDISP
ISDIV:
;进行除法运算的子程序
MOVAX,WORDPTR[ARRAY]
MOVBX,WORDPTR[ARRAY+2]
MOVDX,0
DIVBX
MOVDX,0
DISP:
CALLDEF
STC;置进位位为1
RET
JISHUANENDP
EEXIT1:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART