ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:158.17KB ,
资源ID:6268573      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6268573.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(求15000之间的素数课程设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

求15000之间的素数课程设计.docx

1、求15000之间的素数课程设计学 号: 0120810340621汇编课程设计题 目求15000之间的素数学 院计算机科学与技术学院专 业计算机科学与技术专业班 级计算机科学与技术0902班姓 名庞竞强指导教师刘伟2011年12月30日课程设计任务书学生姓名: 庞竞强 专业班级: 计算机0902班 指导教师: 刘伟 工作单位:计算机科学与技术学院 题目: 求15000之间的素数初始条件:理论:完成了汇编语言程序设计课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。实践:完成了汇编语言程序设计的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言

2、程序的调试方法。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。具体的设计任务及要求:1) 熟悉汇编语言循环结构;2) 打印出15000之间的素数;3) 程序采用子程序结构,结构清晰;4) 友好清晰的用户界面,能识别输入错误并控制错误的修改。在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。阅读资料:1)IBMPC汇编语言程序设计实验教程实验2.42)IBMPC汇编语言程序设计(第2版)例6.11时间安排:设计安排一周:周1、周2:完成系统分

3、析及设计。周3、周4:完成程序调试,和验收。周5:撰写课程设计报告。指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日1. 设计题目 1. 1 题目:求15000之间的所有素数 1. 2 初始条件及参数: 1.2.1 初始条件理论:学完汇编课程,掌握汇编语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。1.2.2 参数 所求素数范围应为15000,而且是在此范围内的所有素数。2. 设计要求 本次课程设计着重于运用设计,同时培养动手能力。要求运用自己所学知识进行设计实现,体现自己的知识掌握水平,严禁抄袭(发现后抄袭者和被抄袭者一律不及格)。所作

4、设计需进行论证,一方面是从理论上进行推理验证,另一方面是实验论证。具体如下:21 运用自己所学知识进行设计实现22 熟悉开发工具MASM23 进一步理解汇编语言的应用,巩固所学的知识24了解及初步学会汇编程序的调试、测试25 能够成功地完成设计要求,通过适当的算法查找到15000之间的素数并能正确输出,其格式如下:XXXX XXXX XXXX .3. 设计思路 31设计总体思路与分析 题目只要求输出15000之间的素数,然而由于屏幕的大小限制,不可能使得15000之内的素数都同时显示给用户,所以应该分批地显示,让用户输入要查找的素数的范围,例如用户可以输入1000,2000等等的数值范围,程序

5、在屏幕上打印出数值范围内的素数,这样的话既灵活,又能够达到题目的要求,还扩展了程序的功能。程序总体分析如下: 3.1.1 模块的层次设计程序由三个模块组成,分别是主程序模块main,接受数值并转化运算模块check和查找素数模块,他们的模块框图如下所示: 3.1.2 各功能模块的设计说明 3.1.2.1 模块名:main 为总控制模块 输入:从键盘输入一个数字0或1,分别代表退出和进入查找。 输出:屏幕上提示用户选择相应的选项。 功能:总体控制界面显示,提示用户选择是否进入查找,如果用户选择查找则:调用模块check完成接受用户输入的查找范围并完成ASCII码到数字的转换的功能。调用模块 ou

6、tputNumList完成查找输入范围内的素数的查找并在屏幕上显示的功能。如果用户选择查找则退出程序。 3.1.2.2 模块名:check 输入:用户从键盘输入一个10000以内的数字字符串,保存在缓冲区buf内。 输出:将转换得到的查找范围放在BX内,并置是否含有非数字字符的标志just。功能:将用户输入的数值字符串转换为数字,同时检查是否输入了非数字字符,其算法如下:依次从buf内取出输入的各个字符,检查它是否为数字字符,如果是的话根据其位置乘以相应的权值,加到BX,继续取下一个;如果为否的话,则置just为0退出模块。如果输入没有非数字字符的话则置just为1,转化成功,退出模块3.1.

7、2.3 模块名:outputNumList输入:check模块中转换得到的查找范围BX的内容输出:屏幕上打印用户要求的查找范围内的所有素数。功能:根据check模块中转换得到的查找范围,从2开始检查,从小到大依次让查找范围内的所有数除以比它小而大于等于2的所有数,如果不能除尽的话则是素数,在屏幕上打印。3. 2算法设计根据设计总体思路与分析,对程序的全貌有了基本的了解之后,对各模块所对应的程序框图设计如下:3.2.1主程序main 的程序框图如下:3.2.2子程序check 的程序框图如下:3.2.3子程序outputNumList 的程序框图如下:4. 程序清单;-;数据段定义:datare

8、a segment;定义缓冲区接收用户输入的查找范围字符串buf db 10 db ? db 10 dup(?);定义输入是否有非数字字符标志just db 1 ;用以权值的增加或减少 factor dw 10;输入数字的每一位的权值 mulfactor dw 1 str db 13,10,Please input a number between 110000:,13,10,$str_alarm db 13,10,Please select an item ! 0:exit, 1:start,13,10,$str_err db 13,10,Please input number charat

9、ers !,13,10,$str_enter db 13,10,$str_allN db 13,10,All of the prime numbers needed are:,13,10,$ datarea ends;-code segment;-assume cs:code,ds:datareastart:;-push dspush ax;-;把数据段首地址赋予ds mov ax,datarea mov ds,ax ;-;主程序mainmain proc far p1: ;要求用户选择进入查找还是推出 lea dx,str_alarm mov ah,9 int 21h ;接收用户的选择 mo

10、v ah,01 int 21h ;判断用户是否输入正确的选项 cmp al,0 je p3 cmp al,1 jne p1 ;调用check子程序,将用户输入字符串转化为数字 call check ;判断用户的输入是否都是数字字符 cmp just,0 je p2 ;调用outputNumList子程序,查找并输出相应的素数列表 call outputNumList jmp p1 ;输出提示输入数字字符p2: lea dx,str_err mov ah,09h int 21h jmp p1p3: ret pop ax pop ds mov ax,004ch int 21hmain endp;-

11、;子程序checkcheck proc ;初始化 mov bx,0 mov mulfactor,1 mov factor,0ah ;输出提示用户输入要查询素数的范围 lea dx,str mov ah,09h int 21h ;接收用户的输入,保存于缓冲区 lea dx,buf mov ah,0ah int 21h;- ;将输入的字符的个数保存于si,用于计数 mov al,buf1 cbw mov si,axSum: ;取第si+1个字符,判断它是否为数字字符 mov al,bufsi+1 cmp al,0 jb g1 cmp al,9 ja g1 and ax,000fh ;将此位数字乘以

12、相应的权值并加到bx mul mulfactor add bx,ax ;将权值乘以10 mov ax,mulfactor mul factor mov mulfactor,ax dec si jnz Sum ;置是否包含字符标志位 mov just,1 jmp g2 g1: mov just,0g2: retcheck endp ;-;子程序outputNumListoutputNumList proc lea dx,str_enter mov ah,09h int 21h lea dx,str_allN mov ah,09h int 21h ;把mulfactor初始化为输入数值的最高位权值

13、 ;因在check子程序中,mulfactor多乘了一次10 mov ax,mulfactor cwd div factor mov mulfactor,ax ;CX输入的数值 mov cx,bx mov si,1h ;恢复ax的值recoverAx:mov ax,si ;检查下一个数值next: inc ax cmp ax,cx ja Exit ;除数应该从2开始 mov bx,2h ;判断一个数是否能被比它小的数整除 text: cmp bx,ax jnb continue mov si,ax cwd div bx cmp dx,0000H je recoverAx inc bx mov

14、ax,si jmp text ;打印当前素数continue: mov bx,ax and dx,0h mov di,mulfactorl1: div di add ax,30h mov si,dx ;save remain mov dl,al mov ah,2h int 21h mov ax,di cwd div factor mov di,ax mov ax,si cwd cmp di,0h jne l1 ;输出一个空格 mov dl,20h mov ah,2h int 21h mov ax,bx cmp ax,cx jb next Exit: retoutputNumList endp

15、;- code ends end start5. 运行结果5.1 运行各个阶段的结果经过调试并改正错误后,题目的要求的输出已经实现,具体的运行结果如下:5.1.1 进入程序界面5.1.2 求得的12010之间的素数5.1.3 求得的20115000之间的素数5.1.4 退出时的界面 5. 2 运行结果分析 从程序的设计过程及结果可以知道,本程序其实算法比较简单,主要是界面的设计及输出时需要技巧,程序能够正确地输出所要求地结果,至于不能够一次性地显示5000以内地所有素数,主要原因在于“命令提示符”环境的最大尺寸本身有限制。各个功能模块都能够正确地执行,并且所有选项都正确有效。6. 心得体会通过

16、本次课程设计,我进一步了解了MASM运行环境,巩固了自己的汇编语言理论知识,提高了自己的动手的能力。在本次设计过程中我运用了过程化设计方法,进行程序总体分析与设计, 规划出程序的总体机构,每个功能的分布情况,形成了程序的框架设计,并成功地运用IBM-PC汇编语言完成了程序的编写。经过调试和测试程序成功的输出了15000之间的所有素数,完成了题目的要求,下面是我对自己在本次设计过程中的表现的自我评价:6. 1比较好的几方面:6.1.1 汇编语言知识掌握得比较扎实,基本上不用参考什么资料就能够成功得设计和编写出程序,完成题目要求的功能。6.1.2 在设计过程中能够总体把握,逐层深入地设计程序,总体

17、与局部地配合比较合理。6.1.3 程序的界面设计得友好,让用户进行关键步骤地选择。6.1.4 适当地扩展了要求,既实现了预期目标又增加了程序地灵活性。6. 2 不足之处 6.2.1 在执行check子程序时,如果用户输入的字符串含有非数字字符,则会退回到主程序,让用户从头开始选择,虽然有提示信息,但不免会让用户感到繁琐,更好的方法是在用户输入非数字字符时,提示用户再次正确输入数字字符而不跳出。其改正方法是在check子程序检查到用户输入含有非数字字符时提示用户输入数字字符,然后跳到本子程序前面部分的接收用户输入语句,而不应该退出check子程序;因为用户既然已经选择了进行素数查询就表示他/她一

18、般不会想退出。 6.2.2 本次课程设计涉及的专业知识面相对要窄一些,对自己的知识的巩固作用也相应地较小,所以对自己的知识掌握程度也没有达到足够的了解,老师课堂上未讲的内容也没有主动地去学习。6. 3 在程序地编写、编译和调试过程中,遇到的一些问题6.3.1 编程的过程中出现了一些逻辑上的错误从而得不到正确的结果,特别是在跳转发生是寄存器内容的变化方面需要进行细致的处理,稍有不留心就会出现错误,这样的错误通常不是语法的错误,而是逻辑的错误以及自己的主观臆断而导致的错误,这要经过自己的耐心调试,才能够发现其中的错误。6.3.2 输出的时候刚开始由于没有把相应得数字转换位ASCII码而出现在屏幕上

19、打印乱码的情况,而输出提示时会在其前面出现乱码的情况,后来才发现原来自己忘了在程序开始之时把数据段首地址赋予DS段寄存器。6.3.3开发中期则出现除法溢出,后来才发现原来是因为只用了8位的寄存器存储商,而不是16位的,出现溢出,不能得到所有的素数。6.3.4 求得的素数范围比输入的范围大一点等问题,经过调试才发现原来问题出在程序先判断一个数是否是素数然后输出再判断是否越界。但是正所谓凡事都有应该一分为二地看,虽然这些问题不免在编程的过程中让人感到有些受挫,但是经过自己严密的分析和仔细反复的调试都得到了很好的解决,让自己学到了很多编写和调试程序的知识,丰富了自己的编程经验,提高了自身编程技巧。总

20、之通过这次试验让我更进一步的体会到汇编语言与高级语言之间的巨大差异,也让我了解到计算机底层控制的繁琐以及实现控制所需要的技巧,我一定会更进一步学习汇编知识以使自己的实力更上一层楼。参考文献:【1】沈美明,温冬婵,2001,IBM-PC汇编语言程序设计(第二版),清华大学出版社,201【2】沈美明,温冬婵,2001,IBM-PC汇编语言程序设计实验教程,清华大学出版社,88本科生课程设计成绩评定表班级:计算机0902班 姓名:庞竞强 学号:0120810340621序号评分项目满分实得分1学习态度认真、遵守纪律102设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规范性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格指导教师签名:201 年月日

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1