资源预览内容
第1页 / 共22页
第2页 / 共22页
第3页 / 共22页
第4页 / 共22页
第5页 / 共22页
第6页 / 共22页
第7页 / 共22页
第8页 / 共22页
第9页 / 共22页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
学 号: 课 程 设 计题 目求100 以内的素数学 院自动化学院专 业自动化班 级姓 名指导教师张素文2014年1月15日课程设计任务书学生姓名: 专业班级: 指导教师: 张素文 工作单位: 自动化学院 题 目: 求100 以内的素数 初始条件:(1)用筛法求出这些素数。(2)在屏幕上显示出求素数的动态过程(在屏幕上先显示出100 以内的所有数,再动态地删去不符合要求的数,删除的过程要明显)。(3)计算这些素数的平均值(取整,四舍五入),以十进制形式输出,并让该值以红色显示。(4)数据的输入和结果的输出都要有必要的提示,且提示独占一行。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月6日1月7日:收集资料,方案选择1月8日1月13日:整体流程,程序细节1月14日1月15日:调试程序,报告撰写1月161月17日::交设计报告,程序演示,答辩指导教师签名: 2014 年 1 月 6 日系主任(或责任教师)签名: 年 月 日目录摘要1求100 以内的素数21、程序的功能21.1 初始条件21.2 要求完成的主要任务22、程序的设计思想与流程32.1 屏幕显示1至99模块32.2 删除合数保留素数并显示42.3 求和程序62.4 求平均值并显示73、调试过程83.1 汇编报错及解决方案83.2 程序调试运行过程84、心得体会12参考资料13附录14摘要在数学的学习中,我们会经常接触到素数这个概念。素数又称质数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数。因为合数是由若干个质数相乘而得来的,所以,没有质数就没有合数,由此可见素数在数论中有着很重要的地位。比1大但不是素数的数称为合数。1和0既非素数也非合数。质数是与合数相对立的两个概念,二者构成了数论当中最基础的定义之一。基于质数定义的基础之上而建立的问题有很多世界级的难题,如哥德巴赫猜想等。这个学期我们刚好学了微机原理与接口技术这门课,并且初步的了解了汇编语言知识,并且可以编写简单的代码。因此,我们可以运用汇编语言来编写程序,求取100以内的素数,动态的删除合数,并且以红色的字输出素数的平均值。本文将会从程序的架构、编写、调试等步骤来展示如何求取100以内是素数并将其及其平均值显示在屏幕上。关键词:素数、汇编语言、动态删除、显示求100 以内的素数1、程序的功能1.1 初始条件(1) 用筛法求出这些素数。(2) 在屏幕上显示出求素数的动态过程(在屏幕上先显示出100 以内的所有数,再动态地删去不符合要求的数,删除的过程要明显)。(3) 计算这些素数的平均值(取整,四舍五入),以十进制形式输出,并让该值以红色显示。(4) 数据的输入和结果的输出都要有必要的提示,且提示独占一行。1.2 要求完成的主要任务:(1) 设计任务及要求分析(2) 方案比较及认证说明(3) 系统原理阐述(4) 硬件设计课题需要说明:硬件原理,电路图,采用器件的功能说明(5) 软件设计课题需要说明:软件思想,流程图,源程序及程序注释(6) 调试记录及结果分析(7) 总结(8) 参考资料(9) 附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图2、程序的设计思想与流程在分析了程序所需要完成的任务后,我认为是可以不需要调用子程序而只需要把程序分成四个模块来完成,分别将程序分为屏幕显示1至99显示、删除合数保留素数并显示、求和程序、求平均值并显示。2.1 屏幕显示1至99模块由于DOS的9号调用输出的是ASC码,因此我们在输出到屏幕的时候一定要将其先转换为ASC码再使用9号调用输出。考虑到ASC码转化为数字较为麻烦,因此可以定义两个组数据buf、buf1,其中buf用于存放199,buf1用于存放199的ASC码。这段程序的流程图如图2-1。这段程序运用的两次loop循环分别实现把099送到buf、将099的ASC码送到buf1。在循环完毕后,采用dos的9号调用将buf1的数据输出到屏幕上,即199输出到屏幕上。完成这段程序后,跳到下一个模块,即删除合数保留素数并显示模块。开始初始化显示input1al=q?或al=Q?否lea bx,bufax清零al1cx99,控制循环次数bx alinc alinc bxcxcx-1cx=0?否是cx99lea si,buf1lea bx,bufax清零albxdl10div dlalal+30hahah+30hsi alsi+1 ahsisi+3cx=0?cxcx-1否是将buf1的内容显示到屏幕下一个模块结束图2-1屏幕显示1至99模块的流程图2.2 删除合数保留素数并显示这段代码用了很多跳转的语句,编程时在这里花掉了很大的精力和时间。在判断这个数是不是素数时,考虑到1、2、3容易判断是素数,我首先将buf的首地址送到bx中,然后从bx+3即4开始判断。判断方法是从2开始除这个数,若有余数为0, 否是是下一个模块dl=0?dlbx+3bxbx+1sisi+3显示buf1在屏幕上否mov si+9,0mov si+10,0将buf1的内容清零是ah=0?div dlalal+1否al=dl?dldl+1alal-1albxand al,0dl1lea bx,buf;lea si,buf1cx0上一个模块图2-2 删除合数保留素数并显示模块的流程图则表明这个数是合数,就要删除,否则用3除。一直到比这个数小1时还不能除尽,则将这个数保留,计数加1。具体的流程图如图2-2。2.3 求和程序否是是否上一个模块cx99si0lea bx,buf1albxah0dhbx+1al=0?dhdh-30halal-30hdl10mul dlalal+ahsiai+axbxbx+3cx=0?下一个模块图2-3 求和程序模块的流程图在这里,我采用了一个loop循环,由于之前的模块没有把buf里的合数删除,而buf1的合数的ASC码已经被删除,因此选用buf1,所以在使用buf1前,要先将ASC码转换为数字。程序的流程图如图2-3。2.4 求平均值并显示axsibzdiand bx,00ffhdiv blalal+1and ax,00ffhbx10and bx,00ffhdiv blalal+30hahah+30h将平均值转化为ASC码lea bx,buf2输出buf2结束上一个模块图2-4 求平均值并显示模块的流程图这个模块采用顺序结构,比较容易,特别要注意数字与其ASC码转换的问题。3、调试过程3.1 汇编报错及解决方案在程序的运行过程中,会出现一些错误,这时就需要我们进行调试来查找出错误所在。我遇到的一些错误总结如下:(1)Symbol already defined elsewhere报错如图3-1,意思为符号已经定义过了,当用伪指令将同一个符号连续定义了两次,就会报错。解决办法,双击错误信息,仔细检查程序,将符号改正或删除。图3-1报错截图1(2)Undefined Symbol报错如图3-2,意思为符号没有定义过。解决办法,双击错误信息,仔细检查,找出没有定义的符号。图3-2 报错截图2(3)Relative jump out of range by 0002h bytes报错如图3-3,意思是jmp跳转超出了范围。解决方法是把它跳转的程序接到jmp跳转范围之内即靠近jmp。图3-3 报错截图33.2 程序调试运行过程在菜单栏中的“编译”中选择“编译&连接&运行”,或者直接点击菜单栏上的,这样就可以运行程序,此时会在屏幕上出现如图3-4的界面,按下“Q”或者“q”都会退出程序。按下其他任意键,则会继续运行,将199显示在对话框中,即如图3-5的界面。按下任意键则继续运行程序,出现如图3-6的界面,按下“Q”或者“q”会退出程序,否则继续,每按一次键,就会将素数保留,将合数删除,过程如图3-7。将这段程序运行完后,出现如图3-8所示的对话框,按下“Q”或者“q”会退出程序,否则继续求出素数的平均值并以红色字显示,再按任意键则退出程序,如图3-9。图3-4 初始界面图3-5 显示199图3-6 选择是否继续求素数图3-7 动态删除合数保留素数图3-8 选择是否求平均值图3-9 将素数平均值以红色字输出到屏幕4、心得体会在接手这个课程设计之前,我就对汇编语言产生了浓厚的兴趣,并且非常期待这次的课程设计,觉得有十足的信心去做好这次课设。然而,当自己真正上手去做的时候,却发现困难重重。首先,课本上的知识还远远不够,需要我借鉴别人的程序来提升自己对汇编语言的认识以及了解。其次,在编写的过程中,总会有各种各样的问题出现,这就需要我们的耐心仔细去慢慢的调试并且发现错误在哪里。第三,我们对于汇编语言的认识还远远不够,dos调用、bios调用我们接触的非常非常少。总之,费了九牛二虎之力,总算是解决这次的课程设计。这次课程设计给我带来的收获很多。第一,它让我更进一步的了解了汇编语言,并用其来做一些实践性的东西。第二,我在编写和调试程序的时候,也锻炼了我的耐心和细心。第三,这次课程设计也锻炼了我查阅资料的能力。参考资料 1 彭虎,周佩玲,傅忠谦.微机原理与接口技术(第2版). 北京:电子工业出版社,2010年2 李敬兆.8086/8088和arm核汇编语言程序设计.合肥:中国科技大学出版社.2000年3 沈美明,温冬婵.IBMPC汇编语言程序设计(第二版).北京:清华大学出版社出版.2003年4 沈美明,温冬婵,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号