《微机原理课程设计报告》由会员分享,可在线阅读,更多相关《微机原理课程设计报告(9页珍藏版)》请在金锄头文库上搜索。
1、微 机 原 理课程设计名 称: 统 分 系 统 设 计 组 长:组 员:辅导老师:日 期:一、题目1、从键盘上输入 7 名裁判的评分(输入范围是 09) ;2、将 7 个评分由高到低进行排序,并在显示器上显示出来;3、扣除一个最高分,一个最低分,计算出其他 5 项评分的平均值(保留一位小数)在显示器上输出, 即要显示出有整数部分、小数部分以及小数点;4、 (1)在屏幕上的
2、每次输入或输出都有清晰的英文提示,说明显示数据的含义,人机对话界面清晰 整洁; (2)当裁判输入的评分不在 09 范围内,能够提示输入错误,要求重新输入评分。二、设计思想输入和输出可以调用 DOS 相关命令。对输入的提示信息,先存放在数据区里面,再用 DOS 字符串输出 命令,在需要的地方输出就可以。为了在输入数据时,区分另个数据,在输入时用空格将它们分开。在 处理时,先判断输入的是否为空格,是就直接跳过。考虑到后面要输出,就将数据按照字符存储。排序可以借鉴教材上的实验 8.6 的思路完成。在排好序的中数据中,两端的两个数就是最大值和最小值。为求得去掉一个最大值和一个最小值后的 平均分,可以求
3、出中间五个数的和,然后除以 5,就可以完成求平均分。用 DIV 指令求出的余数(存放在 AH 中)跟小数的关系:小数=(AH)/5 *10=AH*2。所以,只要将除 法运算后,将 AH 用 SHL 指令,就可以完成转换。再转换为对应的字符,就可以输出小数部分了。为了输出时,表明整个是小数,可以在输出整数部分后,输出一个小数点,再输出小数部分。在考虑到实际中,都会入几个人的成绩,求他们的平均分,设置了一个大循环。输出提示信息,然后 接收一个字符,如果为 Y 或者 y 呢,就返回到开始,直接输入执行程序。三、程序流程图开始接收一个字符空格(20H)小于0(30H)大于 9(39H)存储 BX 自增
4、 自减,调用排序程序CX 不为零输出提示信息输出提示信息输出排序后的数据调用求平均数程序输出提示信息,整数,小 数点,小数。接收字符输出程序结束提示等于 Y|y结束压栈操作,6DX=CX,SI=0AL=NUMSIAL >= NUMSI+1AL 与 NUMSI+1交换NUMSI = ALSI 自增,DX 自减DX = 0CXCX-1 = 0出栈操作,返回CX=4,SI=1AL = NUMSI30HAH = NUMSI+130HAL = AL+AHSI + +CXCX-1=0AH=0, BL=5,DIV ,AH 左移一位YYYYNNNNYNNYNYNYYN求平均数程序排序程序返回
5、主程序四、程序源代码DATA SEGMENT ME1 DB 0AH,0DH,'Please input seven numbers separated by a space: ','$' ERROR DB 0AH,0DH,'Input error!Please input the number again: ','$' ME2 DB 0AH,0DH,'After sorting the numbers, the result is: &
6、#39;,'$' ME3 DB 0AH,0DH,'Delet a max number and a min number,the average score is ','$' ME4 DB 0AH,0DH,'Do you want to continue? Y/N :','$' ME5 DB 0AH,0DH,'End the program!Thanks for your useing!','$' NUM DB 7 DUP(?)
7、 DATA ENDS STACK SEGMENT STACKDB 50 DUP(?) STACK ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXFIRST:MOV DX,OFFSET ME1MOV AH,9INT 21H ;输入提示信息 XOR BX,BXMOV CL,7 AGAIN:MOV AH,1INT 21HCMP AL,20H ;判断为空格 &nb
8、sp;JZ AGAINCMP AL,30H ;判断小于 0JB ERORCMP AL,39H ;判断大于 9JA EROR MOV NUMBX,AL ;存入INC BLDEC CLJNZ AGAINJMP NEXT EROR: MOV DX,OFFSET ERROR ;错误提 示MOV AH,9INT 21HJMP AGAIN ;返回从新输 入NEXT: CALL SORT1 &nbs
9、p; ;调用排序MOV DX,OFFSET ME2MOV AH,9INT 21H ;提示信息XOR SI,SIMOV CX,7 OUTD: MOV DL,NUMSI ;输出排序MOV AH,2 ;后的数据INT 21HMOV DL,20H ;数据间用空格隔 开MOV AH,2INT 21HINC SILOOP OUTDCAL
10、L AVER ;调用求平均数MOV DX,OFFSET ME3MOV BX,AXMOV AH,9INT 21H ;提示信息OR BL,30H MOV DL,BLMOV AH,2 ;输出整数INT 21HMOV DL,2EH MOV AH,2INT 21H &
11、nbsp; ;输出小数 点OR BH,30HMOV DL,BHMOV AH,2INT 21H ;输出小数MOV DX,OFFSET ME4MOV AH,9INT 21HMOV AH,1INT 21H ;接收判断字符CMP AL,59H JZ FIRST ;为 YCMP AL,79HJZ FIRST ;为 yMOV DX,OFFSET ME5MOV AH,9INT 2
12、1H ;输出程序结束提 示MOV AH,4CHINT 21HSORT1 PROC PUSH SI ;压栈操作PUSH AXMOV CX,6 ROUND:MOV DX,CX XOR SI,SI CMPER:MOV AL,NUMSICMP AL,NUMSI+1JAE NCHG ;前面数>后面 数XCHG NUMSI+1,AL ;交换MOV NUMSI,AL ;存储交换后的 值NCHG: INC SIDEC DXJNZ CMPER
13、 ;内循环 DX 控制LOOP ROUND ;外循环 CX 控制POP AXPOP SIRET SORT1 ENDPAVER PROC MOV CX,4MOV SI,1MOV AL,NUMSI ;求中间五个数的和AND AL,0FH ROD: MOV AH,NUMSI+1AND AH,0FHADD AL,AHINC SILOOP RODMOV AH,0MOV BL,5 &nbs
14、p; ;BLDIV BLSHL AH,1 ;求小数部分的值RETAVER ENDP CODE ENDS ;程序结束END START五、调试过程和结果第一步 汇编 连接第二部 调试(用)运行后内存变化第三步 程序运行结果第四 、程序汇编及调试中出现的错误在寻址方式中,用到寄存器相对寻址时,我写了这样一条命令:MOV NUMBL,AL 在汇 编的过程中报错了。检查程序,不知道怎么回事,感觉都是对的。
15、但通过报错的提示,找 到相应的行后,发现,一个十六位的数加上一个八位的数是不合法的。于是将这条指令改 为 MOV NUMBX,AL 调试通过了。在用伪指令定义的数据段中,定义的字符串,由于太长了,就在中途换行了。在汇编 的过程中,报错了。将两行的字符串变成一行后,汇编通过。在做除法操作时,用到 DIV 指令,我写了这样一条:DIV AX,5 在汇编的过程中,报错 了。有提示信息,找到对应的行后,发现犯了一个很不该的错,DIV 指令默认目的操作数 就是 AX 或者 DX AX 。于是将这条指令改为:DIV 5 。但是,在汇编的过程中还是报错了, DIV 指令的源操作数不能为立即数。之
16、后,将这条指令给改用寄存器来完成了。一些标号,在汇编的过程中报错了。比如定义的一个标号 SORT ,不知道错在哪里, 将它改为 SORT1 后,汇编通过了。后来想到,SORT 可能是汇编语言的一个保留字,是不能 随便用的,导致了汇编时出错。六、心得体会通过这几个月的学习,我对汇编有了比较深的了解与学习。在实际的学习后,改变了 我之前的汇编程序设计很难的认识。从一开始,我就听高年级的学长说,汇编很难。于是, 在开始的学习中,我就很用心,投入了很多精力,认真学习基础的知识,同时还借了一本 关于汇编的书,更详细得学习汇编基础知识吗,看一些例题程序。这个过程,对后面学习 汇编语言程序设计打下了较好的基
17、础。当然也有很多基础的知识没有记住的,在这次的课 程设计中,就一一的暴露了出来,这样也对基础知识的巩固起到了很大的作用。通过这次的课程设计,我对汇编语言的指令有了更好的学习和利用,同时对系统的掌 握汇编语言的常用寻址方式、指令系统及程序设计方法,有更大的意义。这样就把零散的 知识,连接起来了,构成系统的知识。同时,我觉得,学习汇编语言的过程中,有 C 语言程序设计的基础,对学习汇编有很 大的帮助,很多难懂的概念都可以通过 C 语言的知识来理解,他们之间有很多知识都是相 通的,特别是在程序设计思想上。比如,本课程设计中的排序,就采用了冒泡排序法的思 想来解决。我想,有了汇编基础知识后,对以后学习单片机或更好的学习单片机,会有很 大的帮助,学习起来也会更容易。 七、参考文献微机原理与接口技术 清华大学出版社出版