BCD码相乘-课程设计模板
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书
学生姓名:专业班级:
指导教师:工作单位:
题目:BCD码相乘
初始条件:计算机和汇编开发环境
要求完成的主要任务:
1、技术要求
(1)提出总体方案的设计思想和原理,绘制程序流程图和描述程序的功能,要求从键盘输入两个2位十进制数,完成乘法运算后输出计算结果。
(2)界面友好,应尽量给用户一些提示语句,如:“请输入第一个数:”。
(3)编程代码,完成整体设计。
(4)调试程序,达到所要求的功能。
2、主要任务
(1)查阅资料,根据设计任务进行功能分析;
(2)根据要求设计程序流程图;
(3)熟悉编程环境,查阅资料完成程序代码编写;
(4)调试并完善程序,综合测试完成的系统;
(5)撰写设计说明书,进行答辩。
3、撰写课程设计说明书
封面:设计题目,指导老师,班级,设计者姓名,设计者学号,日期
任务书
目录
正文:1、基本功能描述;2、设计思路;3、软件设计;4、结论与心得体会;5、参考文献;6、思考题
附录:1、调试报告;2、测试结果;3、关键源代码
成绩评定表
时间安排:
第1周:明确任务,查阅资料,编写代码;
第2周:按要求的功能不断调试并完善程序,测试系统。
按照要求撰写课程设计说明书。
指导教师签名:年月日
系主任(或责任教师)签名:年月日
目录
1 基本功能描述 (1)
2 程序设计思路 (1)
2.1 方案一 (1)
2.1.1 方案一基本原理 (1)
2.1.2方案一程序流程图 (2)
2.2 方案二 (3)
2.2.1 方案二的基本原理 (3)
2.2.2 方案一程序流程图 (3)
2.3 方案比较 (4)
2.4 友好界面 (4)
2.5 DOS的功能调用 (4)
3 软件设计 (6)
3.1 方案一软件设计 (6)
3.2 方案二软件设计 (7)
4 结论与心得体会 (8)
4.1 结论 (8)
4.2 心得体会 (8)
6 程序改进方向 (9)
7 参考文献 (9)
BCD码相乘
1 基本功能描述
计算机内部没有组合BCD码乘法指令,功能描述编写两个单字节组合BCD数的乘法程序,在屏幕上显示两个乘数及计算结果。
在友好界面的提示下,输入两个两位的十进制数,由程序完成乘法之后再将结果转化为十进制的进行输出。
对于输入的两个乘数不符合要求的将提示错误信息并要求重新输入,结果将以四位十进制数显示出来。
2 程序设计思路
2.1 方案一
2.1.1 方案一基本原理
从键盘输入的两位十进制的数字,在计算机中中以ASCII值进行存储[1],因此要将其转化为相应的数值,从ASCII的编码规则可以知道,数字1~9的ASCII码值为十进制的数值加上30H。
利用存储的数值的二进制和十进制之间的差别,给十进制的各个位赋予权重。
在这个分析的基础上面,只要将每一位十进制数的ASCII码值减去30H[2]就得到了十进制真值。
利用十进制数的规则,每一位再乘上该位的权重并且相加就得到了该十进制的结果,并且将结果保存到AL中去。
两位十进制的数字相乘,得到的结果范围值在100~10000之间,所以设计了以下算法:得到了两位十进制数的值之后,再直接相乘,得到了结果的十六进制表示形式[3]。
要将结果转化为十进制并进行输出。
将十进制转化为十六进制则考虑到MOD的取余运算,将结果的十六进制数字分四步[4]进行:
①:结果对1000(3E8H)进行除法运算,商作为十进制的千位输出,余数作为结果。
②:结果对100(96H)进行除法运算,商作为十进制的百位输出,余数作为结果。
③:结果对10(0AH)进行除法运算,商作为十进制的百位输出,余数作为结果
④:过作为十进制的个位输出。
2.1.2方案一程序流程图
2.2 方案二
2.2.1 方案二的基本原理
A、B两数相乘(设A、B都为两位数),将B的低位和A的低位相乘得到的数的低位存到X中,这个数的高位存到X+1中,再用B的低位和A的高位相乘,得到一个数[5],这个数的低位和X+1中的数相加,它的高位存在X+2中。
然后,再用B的高位和A的地位相乘结果低位和刚才的高位相加存X+2[6]中,高位存X+3。
最后判断结果然后转化输出.
2.2.2 方案一程序流程图
图2 方案二程序设计流程图
2.3 方案比较
方案一充分的利用了BCD码和各种进制码之间的关系,从数学上利用了转换过程,从而从根本上了解了计算机内部的存储情况和转化结构,方案一得可拓展性能好[7],对于程序的改进有着明显的优势,只需要考虑到不同位数的数字之间的各位的权重之间的差别,即可拓展到多位的乘法。
方案二则避开了进制间的转化,巧妙地利用了乘法的数学意义,即将乘法转化为加法,这样可以节省系统资源,对于大型的程序有着很好的启发作用,而且程序简单,算法容易理解。
在最后的十六进制转化为十进制输出两个程序的做法是一样的,都设置了界面提示话语。
都体现了有好的交互界面。
2.4 友好界面
在程序的开始出设置了两条提示话语,提示用户输入数据
input the first number: 回车换行
input the second number: 回车换行
在用户输入的数据不符合要求的时候,提示用户重新输入:
the number is not between 10~99'
在输出十进制结果的时候设置了the result is:的显示信息
对于输出,给出了结果的位数,显示了结果的所在范围。
2.5 DOS的功能调用
在DOS软中断指令中最常用的是系统功能调用(INT 21H),主要完成文件管理,输入/输出设备控制,系统参数操作等等。
它本身包含80多个子程序,每个字程序对应一个功能号,其编号为0~62H。
此次课程设计用到的几个常用DOS系统功能调用。
1)带显示的键盘输入(01H号功能)。
此功能程序将等待键盘就输入,直到按下一个键(输入一个字符),把字符的ASCⅡ码送入AL,并在屏幕上显示该字符。
如果按下的键是Ctrl-C组合键,则停止程序运行。
若按下Tab制表键,屏幕上光标自动扩展到紧接着的
8个字符位置后面。
本调用不需要入口参数,出口参数在AL中。
2)在屏幕显示一个字符(02H号功能)。
该功能要求的入口参数为:将欲显示字符的ASCⅡ码存入DL,功能号存入AH。
再执行INT 21H时,会把DL寄存器中的ASCⅡ码字符送到屏幕显示。
02H号功能可显示任意字符,如果DL中存放退格键编号(08H),在屏幕上便向左移一个字符位置,并使该位置成为空格。
09H号功能不能显示‘﹩’符号,所以02H号功能可作为09H号功能的补充。
3)字符串显示(09H号功能)。
09H号功能子程序能在屏幕上显示多于一个的字符串。
要现实的字符串必须事先存放在内存数据区中,且字符串以‘﹩’作为结束标志,除此之外,还需要把存放待显示字符串的内存首地址分别存入DS和DX中。
也可以将非显示字符(如:回车,换行)的ASCⅡ码(如:0AH,0DH)插入字符串中。
4)返回操作系统(4CH号功能)。
这个功能子程序没有入口参数,执行结果是结束当前正在执行的程序,并返回操作系统。
屏幕显示操作系统提示符。
表1 DOS的功能调用
代码功能描述
MOV AH , 01H INT 21H 01H号功能,输入数据后使得AL=键入的ASCⅡ码
MOV DL,要显示字符的ASCⅡ码MOV AH,2
INT 21H 02H号功能,对于DL中存在的数据,直接进行输出,输出一个字符。
STRINGIN DB 'Please input a string',
DB 0AH,0DH,‘﹩’
MOV DS,SEG STRINGIN MOV AH,9
INT 21H 09H号功能,从键盘输入一个字符串,并且存放在偏移量的首地址为DS的内存单元中,存放的形势为一个一个字符的ASCII值。
MOV AH,4C H INT 21H 4CH号功能,执行结果是结束当前正在执行的程序,并返回操作系统。
3 软件设计
3.1 方案一软件设计
表2 程序1的部分关键代码
3.2 方案二软件设计
表3程序2的部分关键代码
4 结论与心得体会
4.1 结论
两种方案都可以得到程序要求的结果,并且两种程序都设置了和用户的友好交互界面。
其中方案一则更加的侧重于内部的代码的运行机制,而方案二则体现了汇编相对于机器代码的一定优势,利用了程序的函数以增加了程序的可读性和简介度。
4.2 心得体会
认真研读课程设计的任务书之后,明确了该课程设计的主要任务以及最终所要实现的功能后,在查阅相关资料,学习汇编语言,熟悉所使用的汇编过程中,感觉是最新鲜的,终于不是纸上谈兵。
熟悉的过程,将汇编软件自带的简单例子看完后,还实现了一些书上的例题。
通过多次的汇编程序操练,使得自己掌握了汇编程序的相关函数和程序结构以及语法格式,这些再后来的自己的编写的汇编程序的过程中体现出了很多的优势,遇到的问题很快就能解决。
查阅资料和网上搜索答案都是很好的解决办法。
本课程设计主要目的是要学习BCD码的乘法运算,并学习输入输出的使用。
在复习与设计相关的微处理器原理方面的内容,特别是对DOS系统的调用的学习过程中,觉得这是汇编很关键的地方,大大减轻用户的编程负担,使用这些系统功能子程序编写的程序简
单,清晰,可读性好,而且代码紧凑,调试方便。
利用DOS系统功能调用实现显示提示语句,使得界面友好,提高人机交互。
这些功能调用在上课时并没有详细讲解,主要因为这部分内容要通过自己上机实践才能知道好处。
在设计总体软件的流程图的过程中,两个方案设计思路都比较清晰,流程图制作起来也很快捷方便。
所以在设计方案时就应该往实现流程简洁清晰上面靠,发现实现流程越来越复杂时应该理智放弃,重新思考,找出错误。
好的流程图就是高校的灰白能代码的关键,完成流程图的设计也是设计汇编程序的必要要求。
在编写软件源代码的过程中,刚开始就是考虑到用汇编的相关优势,直接利用乘法的特点即可得到想要的程序,后来想了觉得可以进行内部的代码的转换,就直接考虑了更底层的设计,结果也可以做出来,说明更加的让我了解了计算机的内部运行机制,使得我对计算机的了解又上了一个台阶。
收获颇多。
6 程序改进方向
改程序的设计只是按照要求设计了两位数的乘法运算,对于多位的乘法运算又可以拓展的地方,加上一个判断的子程序,判断输入的为几位数,然后调用相同的转换子函数再乘上相应位的权重就可以得到最终的十进制的真值,利用同样的方法就可以进行多位的拓展,进行多位数之间的运算。
改程序还可以增加其他的运算功能,可以做成一个简单的计算器。
7 参考文献
[1] 余春暄.80X86/Pentium微机原理及接口技术.机械工业出版社,2008.9
[2] 戴梅萼,微型计算机技术及应用,北京,清华大学出版社,2005
[3] 顾滨,8086微型计算机组成、原理及接口,北京,机械工业出版社,2001
[4] 吕淑萍等,微型计算机原理及应用,哈尔滨,哈尔滨工程大学出版社,2004年
[5] 仇玉章.32位微型计算机原理与接口技术.清华大学出版社,2003
[6] 陆红伟,微机原理实验与课程设计指导书, 北京,中国电力出版社,2006
[7] 李春香,刘红梅,赵润林.汇编课程设计案例精编.第1版.北京:中国水利水电出版社,2004
附录程序一的运行结果:
程序二的运行结果:
本科生课程设计成绩评定表
指导教师签字:
年月日。