武汉理工微机原理数字累加求和课设报告DOC.docx
- 文档编号:25774314
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:20
- 大小:125.01KB
武汉理工微机原理数字累加求和课设报告DOC.docx
《武汉理工微机原理数字累加求和课设报告DOC.docx》由会员分享,可在线阅读,更多相关《武汉理工微机原理数字累加求和课设报告DOC.docx(20页珍藏版)》请在冰豆网上搜索。
武汉理工微机原理数字累加求和课设报告DOC
摘要
最近几十年,随着电子计算机的诞生和高速发展,社会和科技提到了前所未有的高度。
计算机技术的发展所带来的信息技术的飞速发展,给人类社会带来了进步,给人们的生活生产发生了巨大深刻的变化。
微机技术,在计算机发展过程中发挥了重要的作用。
计算机在保持速度和性能的基础上,使得机器更加小巧。
典型代表是PC机普及到各行各业的各个领域。
而在工程领域,在微机基础上使用汇编语言程序可以基本地实现计算机控制工程的运行状况。
同时可以实现自动的检验计算机从系统中采集的信息以判断系统是否处于稳定的工作状态并发出命令进行调试。
从而实现采集信息,辨别信息,执行命令一体化,形成多功能的控制终端。
作为电气工程自动化的学生,微机原理是我们的专业课,学好和灵活应用微机技术对我们来说有着十分重要的意义。
学习了微机原理和接口技术,对微机有了初步的了解。
学习结束后,为提高和巩固专业知识,我们进行了微机原理课程设计,程序设计是指为计算机编写能够接受并执行、且具有实际意义的语句序列。
汇编语言程序设计就是运用汇编语言进行程序设计。
汇编语言程序设计有以下几种结构形式,有顺序结构,分支结构,循环结构,子程序调用个,系统功能调用等。
根据结果要就需进行合理的选择才能建立正确的程序,子并且画出流程图进而完成题目任务。
关键词:
微机汇编程序流程图
1实验任务
1.1实验题目
数字求和汇编语言程序设计
1.2要求:
(1)屏幕提示输入一个数字N(2位数);
(2)计算S=1+2+3+„+N的和并输出求和结果S;
(3)可连续输入数字进行计算,直至单击“Q”或“q”键退出程序。
2题目分析及方案选择
本次课设是在键盘中输入一个1到99的数,然后求出其累加之和,并显示出来。
显然,在设计汇编程序过程中,程序代码要包括输入提示语句、求数字累加之和、将结果输出三个部分。
考虑到我们用到的是16为汇编语言,而且寄存器有限,本题在编程序过程中会比较麻烦。
在进行课设之前,思路如下:
图1思路流程图
所以,开始编程序前做出了两个方案。
方案一:
由于本题要求是输入一个数,然后算出累加结果,我们可以先输入的值n后,通过累加算出从1加到n的值。
此种方案程序计算量大,但程序简单。
方案二:
在启动程序后,先将1到99的累加之和算出来,此处设为值A1,存在一定的位置,当得到输入n的之后,通过计算算出n到99的累加之和,此处设为值A2再通过A1减去A2得出加之和。
此种方案计算量小,但程序复杂。
两种方案都可行,经过思考,由于我们需要重复进行输入输出操作,程序可重复利用,让程序简单易懂且程序小运行快,我们选择第一种方案。
3方案流程图
3.1方案分析
1、由于我们所选的方案是要将1到n的阶数之和给求出来,所以,我们需要先在汇编程序代码中实现可输入功能,即人机交互模式。
这要求程序代码中有输入提示部分的程序。
2、由于n是介于1到99之间的数,那么我们程序必须可以判断输入的n是否超出了计算范围,这就要求我们的程序中有一部分可以判断n是否处于计算范围内,且在超出范围时输入界面提醒用户输入错误。
3、由于题目要求可连续输入,那么程序必须可以做到键入退出按键才能实现退出功能,否则视为继续输入计算。
这就需要程序中设定退出功能以及可重复工作功能,实现用户使用时简单且方便。
而在设置错误判断部分我们又有两种方案:
1、通过累加求和后判断结果是否大于4050或者小于55.因为10加到n(10<n<99)的结果为55到4050之间,如果结果结果大于4050或者小于55那么则说明n的输入范围错误。
②、通过直接判定n是否处于10到99之间判定错误。
而第一种方案需要占用的内存较大,且可使用的程序指令复杂,较少,不灵活。
造成整体程序的设计工作量大,容易出现逻辑错误。
而使用第二种方案主要原理为采用变量偏移地址内存进行比较判定是否出错。
我们采用第二种方案。
3.2流程图
根据所设计好的方案和计划,设计出流程图。
输入流程图如下:
开始
显示字符串请输入一个数字
键盘读入数据N
判断是否为q或者QY结束
N
判断是都在10~99中N报错
Y
计算1~N的累加之和
数制转化并显示
图2输出流程图
要求能够连续的输入数据进行计算,在此循环跳转。
对输入数据进行了判断,符合要就在10~99内则进行计算,并在屏幕上显示出计算结果,不在此范围内的输入报错,若为Q或q则直接退出程序,结束任务。
计算部分流程图如图
将ax中内容赋值给cx
bx加上ax存于ax中
N
Y
将最后一个字节赋值给$,以便将字符串输出
N
将ax与ax相与是否得0
Y
结束
图3主程序流程图
输出流程图如下:
图4输出流程图
设计好流程图后,成功将程序的过程理清楚,给程序设计和调试带来了方便。
4.程序设计及分析
4.1输入程序
根据报告要求和设计的方案需要,设计了输入10到99的累加和程序段,并且判断是否出错的程序段,程序如下如下:
leadx,message;输入提示语句
movah,09h
int21h
movah,07h
int21h
cmpal,'Q';判定是否为Q
jeexit;若是Q执行跳转
cmpal,'q';判定是否为q
jeexit;若是q执行跳转
leadx,input
movah,09h
int21h
movbl,0ffh
movibuf+5,bl;将ibuf里第三位数置为0ffh
leadx,ibuf
movah,0ah
int21h
movsi,dx
movbl,[si+5]
cmpbl,0ffh;与第三位进行比较判断是否有三位存在
jneerror;判定是否出错
movbl,[si+2];判定输入是否为小于10的数
cmpbl,30h;十位跟零比较
jnaerror;小于等于0就跳到错误
cmpbl,3ah;大于9就会错误
jnberror
movbl,[si+3];个位跟零比较
cmpbl,2fh;小于0就错误
jnaerror
cmpbl,3ah
jnberror
jmpcorrect
error:
leadx,ERROR_MESS;出错提示
movah,09h
int21h
jmpstart
exit:
movah,4ch
int21h
此段程序主要是将输入的数字移动到ibuf这个变量里然后进行判断输入的数字是否在允许计算范围内。
si+5表示第三位,si+2表示第一位,si+3表示第二位,分别与这三位进行比较判定是否错误。
4.2求数字累加之和程序
为求累加求和,设计了一下代码段:
correct:
movcl,ibuf+1
xorch,ch
movsi,offsetibuf+2
movax,0;循环运算前的初始化
again:
;(((0*10*a0)*10+a1)*10+a2)
movdx,10
muldx;在做乘法的过程中不用考虑dx,因为输入的数为0~99,所以dx总是为0
movbl,byteptr[si];取出该字符的ASCLL码
subbl,30h;将其减去30H得到数值
addal,bl
adcah,0;在做加法是要考虑是否有进位
incsi
loopagain
movcx,ax
movax,0
movbx,1
loop2:
addax,bx
incbx
looploop2;这个循环就实现了sum=1+2+...+n的操作了
movbx,offsetobuf+7
movbyteptr[bx],'$';将最后一个字节赋值为'$'以便将数字字符串输出出来。
movcx,10
jmploop1
loop1:
movdx,0
divcx;(ax<-ax/10)ax中存放的是商,汇编中16进制就可以当做10进制来运算
adddl,30h;dl中存放的是余数
decbx;将指针前移一个字节
mov[bx],dl;将余数放在字符串的末尾
orax,ax;当ax为0时结束
jnzloop1;当ZF==0时跳转,jumpnotzero
decbx
movbyteptr[bx],0dh
decbx
movbyteptr[bx],0ah;在字符串的前面加上回车换行。
此部分主要为计算1加到n的算法程序,而程序解释已写入代码中。
4.3输出程序
根据题目的要求,设计一下输出程序,程序段如下:
leadx,output;输出提示
movah,09h
int21h
movdx,bx
movah,09h
int21h;显示字符串bx
jmpstart
而为了进行可连续重复计算所以最后加入jmpstart指令。
5.运行结果及分析
将设计好的程序放在MFPCI98中运行,得到结果,满足任务书上的要求。
图3运行结果
在运行程序后,在屏幕输出提示符'ifyouwanttoquit,pleasepressQorq!
'和'pressotherkeytocontinue',当输入Q或者q时则视为退出程序,当输入一个小于10或者大于99的数时则视为输入错误,屏幕上会输出’INPUTERROR,PLERASEINPUTAGAIN’,当输入一个大于10小于9的数,在屏幕上输出一个’result=’,其后所出现一个数,这个数就是计算结果。
6心得体会
《微机原理与接口技术》是一门应用性,综合性,实践性较强的课程,通过有针对性的课程设计,使学生学会系统地运用所学的理论知识,提高学生在程序设计方面的开发与调试本领,系统地掌握微机原理的相应知识。
此次课程设计,即《霓虹灯显示程序设计》要求在屏幕上显示文字或图像,并让这些文字或图像按照一定规律动态变化。
从整个课程设计的角度上,我也遇到了很多问题,如怎样让文字显示的坐标代码显示出更美观的字体、怎样将图像转化为坐标代码以及以后编译过程出现得种种错误等等,但是通过网上查阅资料,查询相关书籍,请教同学,最终都得以解决。
我想这就是课程设计的目的,它让我们学会学习,怎样查阅资料,怎样利用自己的已有知识,去获得自己未知的东西;让我们在实际的操作中学会排错、纠正的的方法。
是我们工科学生必不可少的一门教学课程。
总之,通过本次课程设计,我有机会将课堂上所学到的理论知识运用到了实际当中。
并通过对知识的综合利用,进行了必要的分析,比较,提高了自己分析问题的能力,同时通过对编译软件和取模软件的使用,进一步增强了自己的动手能力。
总之,这次课设让我受益匪浅,希望在今后的学习中自己能够做的更好。
7参考文献
[1]彭虎等编著.微机原理与接口技术(第三版).北京:
电子工业出版社,2008
[2]沈美明,温东禅.IBM-PC汇编语句程序设计(第2版).北京:
清华大学出版社,2001
[3]任向明,卢惠林.汇编语言程序设计实用教程.北京:
清华大学出版社,2009
[4]马力妮.80x86汇编语言程序设计.北京:
机械工业出版社,2004
附录
datasegment
inputdb0ah,0dh,"pleaseinputanumber(1~99):
$"
obufdb10dup(?
)
ibufdb7,0,6dup(?
)
outputdb0ah,0dh,'result=$'
messageDB0ah,0dh,'ifyouwanttoquit,pleasepressQ/q!
'
DB0ah,0dh,'pressotherkeytocontinue',0ah,0dh,'$'
ERROR_MESSDB'INPUTERROR,PLEASEINPUTAGAIN',0AH,0DH,'$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leadx,message;输入提示语句
movah,09h
int21h
movah,07h
int21h
cmpal,'Q';判定是否为Q
jeexit;若是Q执行跳转
cmpal,'q';判定是否为q
jeexit;若是q执行跳转
leadx,input
movah,09h
int21h
movbl,0ffh
movibuf+5,bl;将ibuf里第三位数置为0ffh
leadx,ibuf
movah,0ah
int21h
movsi,dx
movbl,[si+5]
cmpbl,0ffh;与第三位进行比较判断是否有三位存在
jneerror;判定是否出错
movbl,[si+2];判定输入是否为小于10的数
cmpbl,30h;十位跟零比较
jnaerror;小于等于0就跳到错误
cmpbl,3ah;大于9就会错误
jnberror
movbl,[si+3];个位跟零比较
cmpbl,2fh;小于0就错误
jnaerror
cmpbl,3ah
jnberror
jmpcorrect
error:
leadx,ERROR_MESS;出错提示
movah,09h
int21h
jmpstart
exit:
movah,4ch
int21h
correct:
movcl,ibuf+1
xorch,ch
movsi,offsetibuf+2
movax,0;循环运算前的初始化
again:
;(((0*10*a0)*10+a1)*10+a2)
movdx,10
muldx;在做乘法的过程中不用考虑dx,因为输入的数为0~99,所以dx总是为0
movbl,byteptr[si];取出该字符的ASCLL码
subbl,30h;将其减去30H得到数值
addal,bl
adcah,0;在做加法是要考虑是否有进位
incsi
loopagain
movcx,ax
movax,0
movbx,1
loop2:
addax,bx
incbx
looploop2;这个循环就实现了sum=1+2+...+n的操作了
movbx,offsetobuf+7
movbyteptr[bx],'$';将最后一个字节赋值为'$'以便将数字字符串输出出来。
movcx,10
jmploop1
loop1:
movdx,0
divcx;(ax<-ax/10)ax中存放的是商,汇编中16进制就可以当做10进制来运算
adddl,30h;dl中存放的是余数
decbx;将指针前移一个字节
mov[bx],dl;将余数放在字符串的末尾
orax,ax;当ax为0时结束
jnzloop1;当ZF==0时跳转,jumpnotzero
decbx
movbyteptr[bx],0dh
decbx
movbyteptr[bx],0ah;在字符串的前面加上回车换行。
leadx,output;输出提示
movah,09h
int21h
movdx,bx
movah,09h
int21h;显示字符串bx
jstart
codeends
endstart
本科生课程设计成绩评定表
姓名
性别
专业、班级
课程设计题目:
课程设计答辩或质疑记录:
成绩评定依据:
最终评定成绩(以优、良、中、及格、不及格评定)
指导教师签字:
年月日
成绩评分表
项目
评分标准
得分
课
程
设
计
说
明
书
撰
写
60分
方案
论证
10分
能正确分析设计内容,算法选择合理,并有详细的说明、论证。
10≥X≥8
能分析设计内容,算法选择满足设计要求,有简单说明
7≥X≥4
设计方案不太满足设计内容及要求,无说明
3≥X≥0
流程图
设计
10分
流程设计正确,并有详细的说明,流程图绘制规范
10≥X≥8
流程设计符合设计内容及要求,并有一定说明,流程图绘制正确
7≥X≥4
流程设计不太满足设计内容及要求,且无说明,流程图绘制不太正确
3≥X≥0
软件
设计
说明
10分
程序设计关键问题或段落有详细说明,程序代码正确
10≥X≥8
程序设计关键问题或段落有说明,程序代码基本正确
7≥X≥4
程序设计关键问题或段落基本无说明,程序代码不完整或不太满足设计要求
3≥X≥0
结果
分析
10分
能正确记录调试结果,并能分析结果,给出合理的建议
10≥X≥8
能记录调试结果,并加以分析
7≥X≥4
记录调试结果,但无分析
3≥X≥0
心得
体会
10分
基本上真实、客观地反映了本人课程设计的收获、心得
10≥X≥6
无感而发,空洞,套话。
5≥X≥0
报告
规范
10分
完全按照报告格式要求,内容充实、详细,完全符合规范
10≥X≥8
基本按报告格式要求,内容完整,基本符合规范
7≥X≥4
未按报告格式要求,不太符合规范
3≥X≥0
程序调试
10分
程序上机调试运行结果完全正确
10≥X≥8
程序上机调试运行结果基本满足设计要求
7≥X≥4
程序上机调试运行结果不太满足设计要求
3≥X≥0
设计答辩
10分
能详细完整地表述设计内容,并能正确回答问题
10≥X≥8
能完整地表述设计内容,并能回答相关问题
7≥X≥4
基本表述设计内容,但不能回答相关问题
3≥X≥0
难度分值
10分
一~十四题:
7分十五~十七题:
10分
纪律及考勤
10分
按照课程设计进度安排完成课程设计任务,按时参加中期检查及答疑、程序演示及答辩环节。
缺席一次扣5分。
总评分数
优秀(100~90)
良好(89~80)
中等(79~70)
及格(69~60)
不及格(60以下)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉理工 微机 原理 数字 累加 求和 报告 DOC