[工学]微机原理 课程设计 软件范例

上传人:无*** 文档编号:143249260 上传时间:2022-08-25 格式:DOC 页数:11 大小:102.50KB
收藏 版权申诉 举报 下载
[工学]微机原理 课程设计 软件范例_第1页
第1页 / 共11页
[工学]微机原理 课程设计 软件范例_第2页
第2页 / 共11页
[工学]微机原理 课程设计 软件范例_第3页
第3页 / 共11页
资源描述:

《[工学]微机原理 课程设计 软件范例》由会员分享,可在线阅读,更多相关《[工学]微机原理 课程设计 软件范例(11页珍藏版)》请在装配图网上搜索。

1、课程设计报告( 2011- 2012 年度第 一 学期)课 程: 微机原理及应用 题 目:冒泡法排序与筛选法求素数院 系: 自动化系 班 级: 自动化0904 学 号: 200902020423 学生姓名: 阎立恒 指导教师: 马永光 设计周数: 一周 成 绩: 日期:2012年 1 月 12 日微机原理及应用课程设计任 务 书一、 目的与要求1 通过对微机系统分析和具体设计,使学生加深对所学课程的理解。2 掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。3 培养学生分析问题、解决问题的能力。4 培养学生对微型计算机应用系统的基本设计能力。5 提高学生的实践动手能力和创新能力。二、

2、 主要内容1 根据个人情况选择课程设计参考题目,或者依照个人兴趣自拟题目。2 针对所选择的设计题目进行硬件设计,合理选用所需元器件,绘制系统结构框图、硬件接线图,并在实验系统上完成电路的连接和调试。3 根据所选题目的要求对微机系统进行程序设计,绘制程序总体流程图并编写源程序上机调试。4 写出课程设计报告,对整个设计过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识和收获。 三、 进度计划序号设计内容完成时间备注1选择课程设计题目,查阅相关资料2进行软硬件设计3上机调试4撰写设计报告5演示及答辩四、 设计成果要求1 系统硬件设计合理,软

3、件编程达到设计要求。2 系统硬件结构图和软件流程图绘制清楚规范。3 设计报告完整规范。五、 考核方式根据设计任务的完成情况、课程设计报告撰写情况及演示答辩情况采用五级记分制评定成绩。 学生姓名:指导教师: 一、课程设计目的与要求1 通过对微机系统分析和具体设计,使学生加深对所学课程的理解。2 掌握汇编语言程序设计的基本方法和典型接口电路的基本设计方法。3 培养学生分析问题、解决问题的能力。4 培养学生对微型计算机应用系统的基本设计能力。5 提高学生的实践动手能力和创新能力二、课程设计正文1 设计题目1) 排序程序设计。要求:从键盘输入10位学生的考试成绩,由高到低排序后显示排序结果。2) 筛选

4、法求素数。要求:编写程序,求出2254之间的所有素数,并显示在屏幕上(数与数之间用逗号分开)。(提示:从n2开始,将所有n的倍数做上记号;再对n后面的数进行同样的操作;重复这个过程直到找出所有的素数。最后结束时,凡是未标记号的数就是素数。)2 设计思想(总体设计方案、系统的主要功能、作用)1) 成绩排序程序输入数字:建立存储区域IBF,调用DOS系统功能0AH从键盘输入字符串。则IBF1里存储的为实际输入的字符数。如果IBF1为3,因为输入的是学生的成绩,所以默认输入的数为100。如果IBF1为2,则先将IBF2,IBF3的ASCII码减去30转为数字,再把IBF2乘以10加上IBF3,即可还

5、原成数字。如果IBF1为1,则直接将IBF2减去30即可还原成数字。冒泡排序:依次比较相邻的两个数,将大数放在前面,小数放在后面。即在第一趟:首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后。至此第一趟结束,将最小的数放到了最后。在第二趟:仍从第一对数开始比较,将大数放前,小数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最小的),第二趟结束,在倒数第二的位置上得到第二小的数。如此下去,重复以上过程,直至最终完成排序。输出数字:先判断数字是否为0,若为0则直接输出0,不为零则除以10,将其

6、余数压入堆栈,将其商代替原被除数,递归调用,直至除以10的余数和商都为零。递归出口为将堆栈中的数字弹出,转换成ASCII码,调用DOS系统功能02H输出字符。即完成一个数字的输出。之后输出一个空格再进行下一个数字的输出。2) 筛选法求素数 建立两个存储区域分别存放除数n和被除数m,范围均为0254。 取除数n,初始值为2,n的范围是2253。 取被除数m,初始值为2+1=3,m的范围是(n+1)254。 计算m/n,若除不尽则不进行操作,若可以除尽则将存放m的存储空间的第一位置1。 将m增大1重复,直至m为254 将n增大1重复,直至n为253 此时被除数若为质数则其存储空间首位为0,若为和数

7、则其存储空间首位为1。据此判断并输出。输出原理同冒泡法排序的输出原理3 系统工作原理介绍此课程设计不涉及硬件,故无接口设计和系统框图.4 系统程序设计(程序流程图、源程序及注释)1) 排序程序开始输入10个数字两数比较前者大?Y后移一位N交换是否最后数?NY次数足够?NY输出结束DATA SEGMENT IBF DB 3 DB ? DB 4 DUP(?) BUF DW 10 DUP(?) MSG1 DB INPUT 10 NUMBERS,0AH,0DH,$ MSG2 DB RESULT:,0AH,0DH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA

8、START: MOV AX,DATA MOV DS,AX ;定义数据段基址 MOV DX,OFFSET MSG1 ;取MSG1偏移地址 MOV AH,09H INT 21H ;输出MSG1 MOV CX,10 ;规定输入次数为10 MOV BX,0 MOV DX,OFFSET IBF ;取IBF偏移地址 存储输入的字符串INPUT: MOV AH,0AH INT 21H ;调用键盘输入字符串 PUSH DX PUSH BX ;保护DX和BX CALL CTN ;调用CTN将字符串变为数字 POP BX ;弹出BX MOV BUFBX,DX ;将转换完的数字放入BUF中 POP DX ;弹出DX

9、 ADD BX,2 ;指向下一个存储空间 LOOP INPUT ;输入10个数 MOV CX,10 DEC CX ;规定排序次数LOOP1: MOV DI,CX ;保护排序次数 将CX空出留给内圈循环使用 MOV BX,0 ;从第一个数开始比较LOOP2: MOV AX,BUFBX CMP AX,BUFBX+2 ;取两个数比较 JGE NEXT ;前者大则不交换 XCHG AX,BUFBX+2 MOV BUFBX,AX ;前者小则两数交换NEXT: ADD BX,2 ;将比较的位置后移 LOOP LOOP2 ;循环 再次比较 共循环DI次比较 即完成1次排序 MOV CX,DI ;将外圈循环的

10、次数放回CX LOOP LOOP1 ;循环 再次排序 共进行10次排序 MOV DX,OFFSET MSG2 ;取MSG2偏移地址 MOV AH,09H INT 21H ;以下为输出程序 先输出MSG2 MOV CX,10 ;输出数字10次 MOV BX,0OUTPUT: PUSH BX ;输出BUF的内容 先保护BX PUSH CX ;保护CX MOV AX,BUFBX ;取BX所指的数放入AX OR AX,AX JNZ NOTZ ;判断数字是否为0 为0则直接输出 不为0则调用输出程序 MOV DL,30H MOV AH,02H INT 21H JMP OTPSPCNOTZ: CALL D

11、ISPLAY ;将非0数按十进制输出OTPSPC: MOV DX,20H MOV AL,02H INT 21H ;输出空格 POP CX ;弹出CX POP BX ;弹出BX ADD BX,2 ;将BX指向下一个数 LOOP OUTPUT JMP $CTN PROC NEAR MOV AH,0 ;将AH清零 CMP IBF1,3 ;判断输入的是否为3位数 JZ NXTC ;若是则跳转到NXTC CMP IBF1,2 ;判断输入的是否为2位数 JZ NXCT2 ;若是则跳转到NXCT2 MOV DL,IBF2 ;否则为1位数 直接存入DL SUB DL,30H ;变为数字 JMP EXTCNXT

12、C: MOV DX,100D ;若为3位数默认为100 JMP EXTCNXCT2: MOV BX,10D ;若为2位数 MOV AL,IBF2 ;取十位数ASCII码放在AL中 SUB AX,30H ;变为数字 MUL BX ;乘以10 MOV DX,AX ;放入DX ADD DL,IBF3 ;与个位数ASCII码相加 SUB DX,30H ;-30 JMP EXTCEXTC: RETCTN ENDPDISPLAY PROC NEARLOOPD: MOV DX,0 ;DX清零 MOV CL,10 DIV CX ;将AX除以10 MOV CL,AL ;取商 OR CX,DX JZ EXIT ;

13、若商和余数均为0则结束递归 PUSH DX ;压入余数 CALL DISPLAY ;递归调用 POP DX ;弹出余数 ADD DL,30H ;变为ASCII码 JMP PRT ;跳转到输出字符PRT: MOV AH,02H INT 21H ;输出DX中的字符EXIT: RETDISPLAY ENDPCODE ENDS END START2) 筛选法求素数开始n=2m=n+1m/nN整除?Yn=n+1m=m+1m存储空间首位置1NNNm=254?Yn=253?Y存储空间首位是否为1Y输出结束DATA SEGMENT DTBS DW 255 DUP(?) DIVD DW 255 DUP(?)DA

14、TA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV BX,0 MOV AX,0 MOV CL,255 ;AX,BX清零 设置循环次数LOOPI: MOV DTBSBX,AX ;将0-254输入到DTBS和DIVD中 MOV DIVDBX,AX ADD BX,2 INC AX LOOP LOOPI MOV CL,253 ;设置外圈循环次数为253 即需要对2-254这253个数进行素数判断 MOV BX,4 ;从2开始判断LOOP1: MOV DI,CX ;保护CX 将CX空出留给内圈循环使用 MO

15、V DX,DIVDBX ;取一个除数 PUSH BX ;保护BX ADD BX,2 ;被除数从(除数+1)开始取LOOP2: MOV AX,DTBSBX ;取被除数 MOV AH,0 ;高位置零 DIV DL ;将被除数除以除数 OR AH,AH ;判断余数是否为零 JNZ PN ;不为零则不操作直接跳转 OR DTBSBX,1000H ;为零则将此数存储空间第一位置1PN: ADD BX,2 ;指针指向一个被除数 LOOP LOOP2 ;再次进行判断 POP BX ;还原除数的指针 ADD BX,2 ;指针指向下一个除数 MOV CX,DI ;还原外圈循环控制数 LOOP LOOP1 ;进行

16、下一轮判断 MOV CL,253 ;此下开始为输出程序 先设置输出次数为253 MOV BX,4 ;从2开始输出OUTPUT: PUSH BX ;输出素数 先保护BX PUSH CX ;保护CX MOV AX,DTBSBX ;取BX所指的数放入AX OR AH,AH JNZ NOTZ ;判断是否有标记 MOV AH,0 CALL DISPLAY ;按十进制输出 MOV DX,2CH MOV AL,02H INT 21H ;输出逗号NOTZ: POP CX ;弹出CX POP BX ;弹出BX ADD BX,2 ;将BX指向下一个数 LOOP OUTPUT JMP $DISPLAY PROC N

17、EARLOOPD: MOV DX,0 ;DX清零 MOV CL,10 DIV CX ;将AX除以10 MOV CL,AL ;取商 OR CX,DX JZ EXIT ;若商和余数均为0则结束递归 PUSH DX ;压入余数 CALL DISPLAY ;递归调用 POP DX ;弹出余数 ADD DL,30H ;变为ASCII码 JMP PRT ;跳转到输出字符PRT: MOV AH,02H INT 21H ;输出DX中的数EXIT: RETDISPLAY ENDPCODE ENDS END START5 系统调试结果1) 排序程序可按照要求对10个由键盘输入的2100的数进行排序并输出在屏幕上。

18、2) 筛选法求素数可求出2254之间所有的素数并输出在屏幕上。三、课程设计总结通过本次课程设计过程中对微机系统分析和具体设计,我加深对所学课程的理解,掌握汇编语言程序设计的基本方法,培养了我分析问题、解决问题的能力,培养了我对微型计算机应用系统的基本设计能力,提高了我的实践动手能力和创新能力。因为我曾在小学的时候学过BASIC语言,初中的时候学过Pascal语言,进入大学之后又学习了C+语言,所以对编写各种软件程序有一定的基础,因此我选择了两道比较具有代表性的题,第一道是冒泡法排序,第二道是筛选法求素数。做第一道题时,我的思路是很清晰的,整个程序分为3部分:输入、排序、输出。排序部分由于是考试

19、内容所以非常熟悉,不费力气就可以编写出来。但是输入输出部分的编写调试所费时间精力超出了我的预期。最开始的时候输入部分和输出部分我都是按照之前所学的高级语言的方式来写,结果大错特错。输入时一个数字的每位数都占一个存储空间,而且是按照ASCII码来存储,根本不能直接拿来用,还需要先还原成数字存储起来。输出则是和输入相反的一个过程。编程中还遇到了一个问题,就是寄存器数量十分有限。在编写程序的时候要十分小心会不会把还需要用到的一个存放在寄存器里的数据不小心覆盖掉了,因此要时时刻刻注意保护寄存器中的数据,尤其是调用过程的时候。通过这些曲折,我对汇编语言的特点和其与高级语言的区别有了更加深刻的理解。有了做

20、第一道题时的经验教训,我在做第二道题时十分顺利。之前我曾用其他语言写过求素数的程序,虽然不是筛选法。以上经验使我在做这道题的求素数部分时毫不费力,而输出部分则直接又第一道题里的输出部分稍作修改而来。两个程序虽然都已经符合了题目要求,但是优化的空间很大,例如:1、 第二道题求素数时,除数只需循环到最大数的一半即可。2、 第二道题程序可扩展成由键盘输入n(n7FFFH),求得小于n的全部素数。3、第一道题输入3位数时默认为100,可优化为输入数大于100时提示输入错误并要求重新输入。4、第一道题可扩展为输入任意正数(FFFFH)进行排序,此时输入部分最好改为递归算法。5、第一道题可扩展到负数,但这样的话输入输出部分将复杂很多。四、参考文献1 马平 姚万业 王炳谦 微机原理及应用 中国电力出版社 第一版 2003年

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!