微机原理课程设计报告 学生成绩排序名次

合集下载

微机原理课程设计报告 学生成绩排序名次

微机原理课程设计报告 学生成绩排序名次

姓名:XX 班级: XXXXX 学号: XXXXXXXXXX课程设计微WEI 机JI 原YUAN 理LI2011 年 7 月 8 日目的:结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。

学会使用屏幕编辑程序——EDIT,弄懂汇编程序的上级过程以及如何运用DEBUG软件进行汇编程序的调试。

内容与要求:字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NO MATCH”。

从键盘输入数据并显示的设计为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。

响铃设计为掌握响铃的使用方法,编写程序,从键盘接受输入字符,如是数字N则响铃N 此,如不是数字则不响。

将键盘输入的小写字母转换成大写字母的设计为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换,编写程序,接受键盘字符,并将其中的小写字母转变为大写字母,然后显示在屏幕上。

学生成绩名次表设计为进一步熟悉排序方法,编写程序,将100以内的30个成绩存入首址为1000H 的存储区中。

1000H+i表示学号为i的学生成绩。

编写程序使得在2000H开始的区域排出名次表,2000H+i为学号i的学生的名次。

下面着重介绍程序5——学生成绩名次表设计:流程图:主程序流程图SCAN子函数程序流程图程序代码及注释:CRLF MACRO ;宏定义,回车换行MOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTSTUNUM EQU 30 ;学生数MESS1 DB 'Please input 30 score',0DH,0AH,'$' ;提示信息ERROR DB 'Input error,try again',0DH,0AH,'$' ;报错信息MESS2 DB 'The order is:',0DH,0AH,'$'EMARK DB ;报错标志ORG 1000H ;存放成绩地址SCORE DB 30 DUP() ;成绩表ORG 2000H ;存放名次地址SEQU DB 30 DUP() ;名次表DATA ENDSSTACK SEGMENTSTA DW 32 DUP()TOP DWSTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPMOV AH,09H ;显示提示信息MOV DX,OFFSET MESS1INT 21HMOV SI,OFFSET SCORE ;成绩表首址MOV CX,STUNUMMOV EMARK,0 ;报错标志清0UUU: CALL GETNUM ;调用子函数读取成绩CMP EMARK,01H ;判断是否出错JE START ;出错则重新开始MOV [SI],DL ;没出错则存入成绩INC SI ;指向下一个成绩单元地址LOOP UUU ;判断30个成绩是否读取完MOV CX,STUNUMMOV DI,OFFSET SEQU ;名次表首址VVV: CALL SCAN ;调用扫描子程序MOV AL,STUNUM ;学生总数SUB AL,CL ;计算名次INC ALMOV BX,DX ;学号PUSH AX ;将名次转换成压缩BCD码方便显示PUSH BXPUSH CXXOR AH,AHMOV BH,0AHDIV BHMOV CL,4SHL AL,CLADD AL,AHMOV DH,ALPOP CXPOP BXPOP AXMOV [DI+BX],DH ;存入名次LOOP VVV ;判断是否存完MOV AH,09H ;显示名次提示信息LEA DX,MESS2INT 21HMOV CX,STUNUMMOV SI,OFFSET SEQUWWW: MOV AL,[SI]CALL DISPI ;调用子函数显示名次PUSH DXPUSH AXMOV AH,02 ;显示空格MOV DL,20HINT 21HPOP AXPOP DXINC SI ;指向名次表的下一个地址LOOP WWW ;判断是否输出所有名次MOV AH,4CH ;返回DOSINT 21HSCAN PROC NEAR ;扫面子函数,没调用一遍,找出成绩表;中最高成绩,记录其学号,并将此成绩;清0PUSH CXMOV CX,STUNUMMOV AL,00HMOV BX,OFFSET SCOREMOV SI,BXCCC: CMP AL,[SI]JAE JJJMOV AL,[SI]MOV DX,SISUB DX,BXJJJ: INC SILOOP CCCADD BX,DXMOV BYTE PTR [BX],00HPOP CXRETSCAN ENDPDISPI PROC NEAR ;显示子程序PUSH CXMOV BL,AL ;显示高4位MOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPLMOV DL,BL ;显示低4位AND DL,0FHCALL DISPLPOP CXRETDISPI ENDPDISPL PROC NEAR ;将名次转换成对应的ASCII码值并显示ADD DL,30HMOV AH,02HINT 21HRETDISPL ENDPGETNUM PROC NEAR ;读取成绩子函数PUSH CXXOR DX,DX ;清0,用于存放成绩GGG: MOV AH,01HINT 21H ;键盘字符输入CMP AL,0DHJZ RRR ;如果是回车则结束SUB AL,30HJB ERR ;小于0则报错CMP AL,09HJBE GETS ;如果在0—9之间则存成绩至DXJMP ERR ;否则报错GETS: MOV CL,04SHL DX,CL ;将DX中已有数值左移四位XOR AH,AHADD DX,AX ;紧接着将数据存在DX中低四位JMP GGG ;跳转继续读取数据ERR: MOV AH,09H ;显示报错信息MOV DX,OFFSET ERRORINT 21HMOV EMARK,01H ;报错标志置1RRR: PUSH DXCRLF ;回车换行POP DXPOP CXRETGETNUM ENDPCODE ENDSEND START心得体会:在为期一周的微机原理课程设计中,通过查阅书籍,上网收集资料以及向老师和同学请教,我完成了老师定下的任务。

微机原理软件实验

微机原理软件实验

班级:班内序号:学号:学生姓名:实验二分支,循环程序设计实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用.实验内容:1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.预习题:1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?将二进制数0~9分别加上30H,就可以得到它们的ASCII码,将其显示出来。

2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:1.用CMP命令和0比较,然后用JA、JB、JZ等命令进行判断;2.先0相比是否相等,然后用该数(假设为8位)和10000000相与,结果为0则为正数,不为0则为负数。

选作题:统计出正奇数,正偶数,负奇数,负偶数以及零的个数.实验结果数据区内容:1,-2,0-3,4,-5,0,6,0,7,8,9实验三代码转换程序设计实验目的:1.掌握几种最基本的代码转换方法;2.运用子程序进行程序设计.实验内容:1.从键盘上输入若干两位十进制数,寻找其中的最小值,然后在屏幕上显示出来.2.两个十进制数之间的分隔符,输入结束标志自定,但要在报告中说明.3.对输入要有检错措施,以防止非法字符输入,并有适当的提示.4.将整个程序分解为若干模块,分别用子程序实现.在报告中要给出模块层次图.预习题:1.如何将输入的两个字符(0 -- 9)变为十进制或二进制数?答:输入的字符0~9是ASCII码表示的,对应于30H~39H,通过减去30H,可以转换为相应的计算机数。

2.如何将选出的最小值(二进制或十进制)变为ASCII 码再进行显示?答:0~9的ASCII码是30H~39H,加上30H,就能得到数字的ASCII码。

3.你觉得采用二进制运算还是十进制运算更适合于这个实验?答:采用二进制或者十进制都需要进行ASCII码到数字的转换和其反向转换。

微机原理与接口技术课程设计题目

微机原理与接口技术课程设计题目

题目一:键盘输入并显示(第一组)目的:掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为AS CⅡ码的原理,并在程序中设置错误出口。

要求:编写程序,将键盘接收到的4位十六进制数转换为等值的二进制数,再显示在屏幕上。

若输入的不是0~F间的数字,则显示出错信息,并要求重新输入。

题目二:数据排序(第二组)目的:熟悉和掌握冒泡法排序的编程方法。

要求:将内存中的一组十进制数据用冒泡法按递增规律排序,并分别显示排序前后的数组。

题目三:表格查找(第三组)目的:了解并掌握查找表格的基本方法。

要求:从键盘接受表格编号,然后在屏幕上显示出相应编号的表格内容。

题目四:学生成绩名次排名(第四组)目的:熟悉和掌握排序编程方法。

要求:根据提示将0~100之间的10个成绩存入首地址为1000H的单元,1000H+i表示学号为i的学生的成绩,编写程序实现在2000H开始的区域排出名次表,2000H+i表示学号为i 的学生的名次,并将其显示在屏幕上。

题目五:汇编语言中断程序设计(第五组)目的:1.掌握汇编中断程序设计的基本方法。

2.掌握与中断有关的寄存器操作。

3.了解PC机扬声器的操作。

要求:编写一个8086汇编语言程序,使程序运行后屏幕显示器成为一台电子钟。

首先在屏幕上显示提示符,要求通过键盘输入当前时间,然后每隔1秒使显示的秒钟值加1,达到60秒使分钟值加1,秒钟值清0;达到60分钟使小时值加1,分钟值清0;达到24小时,则小时值清0。

上述过程一直进行下去,当键入Ctrl+C键时退出“电子钟”状态,返回DOS。

题目六:十进制数组求和(第六组)目的:1.掌握循环结构汇编程序设计的基本方法。

2.掌握子程序设计的基本方法及参数的传递和返回。

3.进一步了解键盘I/O系统调用与显示系统调用。

要求:通过堆栈传递参数,实现十进制数组求和,要求对不在同一个代码段中的主程序和过程进行段间调用。

题目七:存储器读写与显示(第七组)目的:1.掌握单片机内存扩充方法和外围接口方法。

微机原理课程设计人名排序

微机原理课程设计人名排序

微机原理课程设计人名排序第一篇:微机原理课程设计人名排序人名排序的程序实现;***********************************************************.MODEL SMALL.STACK 40H;***********************************************************.D ATANAMEPAR LABEL BYTE MAXLEN DB 21NAMELEN DB ?NAMEFLD DB 21 DUP(?)CRLF DB 13,10,'$';定义DATA数据段;名字长度,未设初值;定义NAMEFLD为21字节长,未设置初值ENDADDR DW ?;定义ENDADDR类型为字,初值未设定 MESSG1 DB 'Name?','$' ;定义MESSG1为字符串Name? MESSG2 DB 'Sorted name:',13,10,'$';定义MESSG2为字符串Sorted name: NAMECTR DB 0;名字计数器,初始设为0 NAMETAB DB 30 DUP(20 DUP(' '));长度30,每个可存储20字节的字符串NAMESAV DB 20 DUP(?),13,10,'$';这个变量用来暂存名字 SWAPPED DB 0;***********************************************************.CODE;-----------------------------;定义代码段BEGIN PROC FAR;主程序开始MOV AX,@DATA;将DATA地址传给AXMOV DS,AX;将AX值传给DS和ESMOV ES,AXCLD;DF设为0LEA DI,NAMETAB;将NAMETAB的有效地址传给DIA20LOOP:CALL B10READ;调用B10READ子程序,用来接收输入的人名CMP NAMELEN,0;两数比较JZ A30;等于0时,转到A30CMP NAMECTR,30;再将NAMECTR和30进行比较JE A30;若等于30则转移到A30CALL D10STOR;调用子程序D10STOR,存储名字到NAMETAB中JMP A20LOOP;转移到A20LOOP循环,读入名字,直到不输入或计数器到了30为止 A30:CMP NAMECTR,1JBE A40CALL G10SORTCALL K10DISPA40: MOV AX,4C00HINT 21HBEGIN ENDP;-----------------B10READ PROC NEARMOV AH,09LEA DX,MESSG1INT 21HMOV AH,0AHLEA DX,NAMEPARINT 21HMOV AH,09LEA DX,CRLFINT 21HMOV BH,0MOV BL,NAMELENMOV CX,21SUB CX,BXB20: MOV NAMEFLD[BX],20H INC BXLOOP B20RETB10READ ENDP;-----------------D10STOR PROC NEARINC NAMECTRCLDLEA SI,NAMEFLD器SIMOV CX,10;比较;小于或者等于1,转移到A40;调用G10SORT,人名排序;调用K10DISP,显示人名;将值4C00赋值给AX;主程序结束;子程序B10READ;将MESSG1的有效地址传送给DX;显示MESSG1:Name?;将NAMEPAR的有效地址传送给DX;将CRLF的有效地址传送给DX;显示CRLF中的内容(换行);将NAMELET传送给BL;21(16进制里的15);CX-BX并将值返回给CX;BX加1??;循环执行B20;子程序返回;退出;子程序D10STOR;计数器加1;方向标志DF设置为0;将NAMEFLD的有效地址传送给源地址寄存REP MOVSWRETD10STOR ENDP;-----------------G10SORT PROC NEARSUB DI,40MOV ENDADDR,DIG20:MOV SWAPPED,0LEA SI,NAMETABG30 : MOV CX,20MOV DI,SIADD DI,20MOV AX,DIMOV BX,SIREPE CMPSBJBE G40CALL H10XCHGG40:MOV SI,AXCMP SI,ENDADDRJBE G30CMP SWAPPED,0JNZ G20RETG10SORT ENDP;-----------------H10XCHG PROC NEARMOV CX,10LEA DI,NAMESAVMOV SI,BXREP MOVSWMOV CX,10MOV DI,BXREP MOVSWMOV CX,10LEA SI,NAMESAVREP MOVSWMOV SWAPPED,1;重复执行字传送10次串操作MOVSW;子程序返回;退出;子程序G10SORT:冒泡排序的实现;DI减40(16进制里的28);将NAMETAB的有效地址传送给SI;DI加20(即16进制的14);如果CF或ZF等于1则转移到G40??;调用子程序H10XCHG(交换名字);比较SI和ENDADDR;小于或等于时,转移到G30;比较SWAPPED和0;若不等于转移到G20;子程序返回;退出;子程序H10XCHG(交换两个名字);10(即A传给CX);重复执行串操作直到CX=0;重复执行10次串操作MOVSW;将NAMESAV的有效地址传送给SI;重复执行10次串操作MOVSW;1传给SWPPEDRETH10XCHG ENDP;-----------------K10DISP PROC NEAR 字)MOV AH,09;子程序返回;退出;子程序K10DISP(显示排序后的名LEA DX,MESSG2INT 21HLEA SI,NAMETAB LEA DI,NAMESAV MOV CX,10 REP MOVSW MOV AH,9;将MESSG2的有效地址传送给DX;显示MESSG2:即字符串:'Sorted name:';将NAMETAB的有效地址传送给SI;将NAMESAV的有效地址传送给DI;重复执行10次串操作MOVSW K20 :LEA DX,NAMESAV;将NAMESAV的有效地址传送给DXINT 21H;显示NAMESAV名字数据DEC NAMECTR;计数器--JNZ K20;NAMECTR不等于0,仍转至K20RET;子程序返回 K10DISP ENDP;退出;-----------------;************************************************ END BEGIN ;程序结束第二篇:微机原理课程设计合肥工业大学计算机与信息学院课程设计课程:微机原理与接口技术设计专业班级:计算机科学与技术班学号:2姓名:一、设计题目及要求:利用 8259A中断,实现对8253多种计数初值的设定: 1.在中断服务程序中设定8253的计数初值。

合肥工业大学电气与自动化专业实验中心 80X86微机原理及接口技术实验教程 4排序程序设计实验

合肥工业大学电气与自动化专业实验中心 80X86微机原理及接口技术实验教程 4排序程序设计实验

1.6 排序程序设计实验1.6.1 实验目的1. 掌握分支、循环、子程序调用等基本的程序结构。

2. 学习综合程序的设计、编制及调试。

1.6.2 实验设备PC机一台,TD-PITE实验装置一套。

1.6.3 实验内容及步骤1. 气泡排序法在数据区中存放着一组数,数据的个数就是数据缓冲区的长度,要求采用气泡法对该数据区中的数据按递增关系排序。

设计思想:(1)从最后一个数(或第一个数)开始,依次把相邻的两个数进行比较,即第N个数与第N-1个数比较,第N-1个数与第N-2个数比较等等;若第N-1个数大于第N个数,则两者交换,否则不交换,直到N个数的相邻两个数都比较完为止。

此时,N个数中的最小数将被排在N个数的最前列。

(2)对剩下的N-1个数重复(1)这一步,找到N-1个数中的最小数。

(3)再重复(2),直到N个数全部排列好为止。

实验程序清单(例程文件名为:A6-1.ASM)SSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 000AHMOV SI, 300AHMOV BL, 0FFHA1: CMP BL, 0FFHJNZ A4MOV BL, 00HDEC CXJZ A4PUSH SIPUSH CXA2: DEC SIMOV AL, [SI]DEC SICMP AL, [SI]JA A3XCHG AL, [SI]MOV [SI+01H], ALMOV BL, 0FFHA3: INC SILOOP A2POP CXPOP SIJMP A1A4:MOV AX,4C00HINT 21H ;程序终止CODE ENDSEND START实验步骤(1)分析参考程序,绘制流程图并编写实验程序。

(2)编译、链接无误后装入系统。

(3)键入E3000命令修改3000H~3009H单元中的数,任意存入10个无符号数。

微机原理成绩统计类课程设计

微机原理成绩统计类课程设计

课程设计课程名称微机原理课程设计题目名称学生成绩的统计学生学院应用数学学院专业班级 12信息安全2班学号学生姓名指导教师2015 年 1 月 2 日一、实验内容 (3)1.实验任务 (3)2.构思猜想 (3)二、实验设计 (3)1. 实验工具:MASM32、ResEd (3)2. 实验过程 (4)2.1.图形设计 (4)2.2.应用程序代码 (5)2.3.程序资源的准备 (9)1)修改Var.bat的地址 (9)2) 修改MakeFile (10)3) 生成RC文件 (10)4) 生成OBJ文件 (11)5) 生成EXE程序 (12)3. 实验结果 (13)三、实验完整代码 (14)四、实验心得体会 (18)(1)本实验程序缺点 (18)(2)本实验程序优点 (18)(3)开发心得体会 (18)一、实验内容1.实验任务输入十个学生某门课的成绩,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出统计结果。

要求学生成绩的输入和统计结果的输出使用图形界面。

2.构思猜想成绩统计是用于统计学生成绩的的简单的应用程序,所以正常的成绩统计程序,不能局限于统计一个固定人数(或不可变的),因为如果固定人数的话,当我们要用于不同的班级或专业时,对于不同的人数我们要做更多重复的操作,而造成无谓了人员或者资源的浪费。

因此一个成绩统计软件必须要能应用于不同人数,而且能将统计结果呈现出来的。

二、实验设计1.实验工具:MASM32、ResEd(1)MASM32:MASM32并非是指Microsoft的MASM宏汇编器。

MASM32是一个由个人开发的包含了不同版本工具组建的汇编开发工具包。

它的汇编编译器是MASM6.0以上版本中的Ml.exe,资源编译器是Microsoft Visual Studio中的Rc.exe,32位链接器是Microsoft Visual Studio中的Link.exe,同时包含有其他的一些如Lib.exe和DumpPe.exe等工具。

《微机原理实验五循环结构的程序设计:排序程序设计实验》

《微机原理实验五循环结构的程序设计:排序程序设计实验》

实验五循环结构的程序设计:排序程序设计实验1、实验目的(1)掌握接收键盘数据的方法。

(2)掌握循环结构的程序设计和排序程序设计的方法。

(3)进一步熟练在PC上建立、汇编、链接、调试和运行汇编语言程序的过程。

2、实验内容用汇编语言编写学生成绩统计程序:键盘输入学生成绩到SCORE中(0<=分数<=100,设有10个学生成绩分别是56,69,84,82,73,88,99,63,100,80)。

编程将它们由大到小排序,存回到原来的SCORE变量中;并统计低于60分、60~69、70~79、80~89、90~99及100分的人数,分别存放在S5、S6、S7、S8、S9、S10单元中。

3、实验及报告要求:(1)要求画出完整的程序流程图。

(2)根据流程图,编写完整的汇编代码源文件,要求写出所有伪指令和指令的注释;(3)编译、连接生成可执行文件,调试该可执行文件。

(4)写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。

(5)实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法、汇编指令及汇编语言编程方法、微机原理学习方法作出总结。

4、思考题:如何从屏幕输出结果?YN输入DATAS SEGMENTBUFFER DB 80,81 DUP(0),'$' SCORE1 DB 10 DUP(0);此处输入数据段代码 DATAS ENDSSTACKS SEGMENTSTA DB 64 DUP(0)SP_TOP DB 0STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AXMOV AX,STACKSMOV SS,AXLEA SP,SP_TOPLEA DX,BUFFERLEA DI,SCORE1MOV AH,0AHINT 21HLEA SI,BUFFERADD SI,2MOV DL,0MOV CX,10JU: MOV AL,[SI]JE EXITPUSH CXCMP AL,2CHJE CH1POP CXINC SIINC DLLOOP JUJMP EXITCH1:CMP DL,2JNE CH2MOV AL,[SI-2]SUB AL,30HMOV CL,10MUL CLMOV AH,0MOV BL,[SI-1]SUB BL,30HMOV [DI],ALPOP CXINC DIINC SIMOV DL,0LOOP JUCH2:MOV [DI],100POP CXINC DIINC SIMOV DL,0LOOP JUEXIT: MOV AH,4CHINT 21HCODES ENDSEND START记人数DATA SEGMENTSCORE DB 67S5 db 0S6 db 0S7 db 0S8 db 0S9 db 0S10 db 0TABLE DW NP,NP,NP,NP,NP,NP,S60,S70,S80,S90,S100 DATA ENDSCODE SEGMENT 'CODE'ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX MOV AH,0LEA SI,SCORESP: MOV AL,[SI]MOV BL,10DIV BLSAL AL,1MOV BL,ALMOV BH,0JMP TABLE[BX]S100: INC S10 JMP NEXTS90: INC S9 JMP NEXTS80: INC S8JMP NEXTS70: INC S7JMP NEXTS60: INC S6JMP NEXTNP: INC S5 NEXT:INC SILOOP SP FINISH: MOV AH,4CH INT 21HCODE ENDSEND START排序DATAS SEGMENTSTR DB 'PLS INPUT SCORE (0-100):',0DH,0AH,'$' SCORE DB 20DB 81 DUP(0)DB '$';此处输入数据段代码SC DB 10 DUP(0)DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码LEA DX,STR ;调显示字符串的首地址MOV AH,9INT 21H ;字符串显示LEA DX,SCORE ;调字符串存放单元的首地址MOV AH,0AHINT 21H ;字符串输入 LEA DI,SCLEA SI,SCOREADD SI,2COMP: MOV AL,[SI]CMP AL,0DHJZ EXITCMP AL,2CHJZ NEXT1INC SILOOP COMPNEXT1:MOV AL,[SI]MOV AL,[SI-1]SUB AL,30HADD BL,ALMOV [DI],BLINC DIINC SIJMP COMPEXIT:MOV AH,4CHINT 21H ;返回操作系统CODES ENDSEND START。

学生成绩排序实践报告

学生成绩排序实践报告

学生成绩排序实践报告引言学生成绩是学校管理和评估学生学习情况的重要依据,好的成绩不仅代表了学生的学习能力,也能激发学生的学习动力。

而学生成绩排序就是对学生的成绩进行排名,以便更好地评估学生学习水平和进行后续的教学安排。

本实践报告将介绍学生成绩排序的具体实践过程和效果评估。

实践过程为了实现学生成绩的排序,我们首先需要收集学生的成绩数据。

在这个实践中,我们选择了一所中学的一年级学生的期末考试成绩作为样本数据。

收集到学生成绩数据后,我们使用编程语言进行数据处理和排序。

这里我们选择了Python编程语言作为实践工具。

首先,我们将学生成绩数据存储在一个二维数组中,每一行表示一个学生,每一列表示一个科目的成绩。

然后,我们编写了一个排序函数,使用冒泡排序的算法对学生成绩进行排序。

排序的依据可以是总成绩,也可以是某一科目的成绩。

在排序的过程中,我们还可以加入其他的因素,例如学生的出勤率、课堂参与度等来综合评估学生的学习情况。

这样的排序方法可以更加全面地评估学生的学习水平。

完成排序之后,我们将排序结果进行输出和展示。

这里我们选择了将排序后的学生成绩保存到一个新的文件中,并使用表格的形式展示学生姓名、科目成绩和排名等信息。

同时,我们还可以根据排序结果制作柱状图、折线图等图表,直观地展示学生成绩的分布和变化情况。

效果评估为了评估学生成绩排序的效果,我们需要对排序结果进行分析和评价。

首先,我们可以通过计算排序后的平均成绩、最高分和最低分,来判断整体成绩水平的分布情况。

如果排序结果中存在大量的高分或低分,可能意味着教学质量存在问题,或者学生的学习差异较大。

其次,我们可以通过与班级或学校的平均成绩进行比较,判断学生成绩的优劣。

如果排序结果中的学生普遍优于班级或学校平均水平,说明教学质量较高;反之,说明教学存在一定问题。

最后,我们还可以通过与前几次成绩排名的比较,评估学生学习态势的变化。

如果学生的排名一直保持较高,说明学生学习态度端正,成绩稳定;反之,可能需要关注学生学习动力和问题原因。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

姓名: XX 班级: XXXXX 学号: XXXXXXXXXX课程设计微WEI 机JI 原YUAN 理LI2011 年 7 月 8 日微机原理课程设计目的:结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。

学会使用屏幕编辑程序——EDIT,弄懂汇编程序的上级过程以及如何运用DEBUG软件进行汇编程序的调试。

内容与要求:1.字符串匹配设计为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NO MATCH”。

2.从键盘输入数据并显示的设计为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。

3.响铃设计为掌握响铃的使用方法,编写程序,从键盘接受输入字符,如是数字N则响铃N此,如不是数字则不响。

4.将键盘输入的小写字母转换成大写字母的设计为了解小写字母和大写字母在计算机内的表示方法,并学习如何进行转换,编写程序,接受键盘字符,并将其中的小写字母转变为大写字母,然后显示在屏幕上。

5.学生成绩名次表设计为进一步熟悉排序方法,编写程序,将100以内的30个成绩存入首址为1000H的存储区中。

1000H+i表示学号为i的学生成绩。

编写程序使得在2000H开始的区域排出名次表,2000H+i为学号i的学生的名次。

微机原理课程设计下面着重介绍程序5——学生成绩名次表设计:流程图:主程序流程图SCAN子函数程序流程图微机原理课程设计程序代码及注释:CRLF MACRO ;宏定义,回车换行MOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDATA SEGMENTSTUNUM EQU 30 ;学生数MESS1 DB 'Please input 30 score',0DH,0AH,'$' ;提示信息ERROR DB 'Input error,try again',0DH,0AH,'$' ;报错信息MESS2 DB 'The order is:',0DH,0AH,'$'EMARK DB ? ;报错标志ORG 1000H ;存放成绩地址SCORE DB 30 DUP(?) ;成绩表ORG 2000H ;存放名次地址SEQU DB 30 DUP(?) ;名次表DATA ENDSSTACK SEGMENTSTA DW 32 DUP(?)TOP DW ?STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV ES,AXMOV SP,TOPMOV AH,09H ;显示提示信息MOV DX,OFFSET MESS1INT 21HMOV SI,OFFSET SCORE ;成绩表首址MOV CX,STUNUMMOV EMARK,0 ;报错标志清0UUU: CALL GETNUM ;调用子函数读取成绩CMP EMARK,01H ;判断是否出错JE START ;出错则重新开始MOV [SI],DL ;没出错则存入成绩微机原理课程设计INC SI ;指向下一个成绩单元地址LOOP UUU ;判断30个成绩是否读取完MOV CX,STUNUMMOV DI,OFFSET SEQU ;名次表首址VVV: CALL SCAN ;调用扫描子程序MOV AL,STUNUM ;学生总数SUB AL,CL ;计算名次INC ALMOV BX,DX ;学号PUSH AX ;将名次转换成压缩BCD码方便显示PUSH BXPUSH CXXOR AH,AHMOV BH,0AHDIV BHMOV CL,4SHL AL,CLADD AL,AHMOV DH,ALPOP CXPOP BXPOP AXMOV [DI+BX],DH ;存入名次LOOP VVV ;判断是否存完MOV AH,09H ;显示名次提示信息LEA DX,MESS2INT 21HMOV CX,STUNUMMOV SI,OFFSET SEQUWWW: MOV AL,[SI]CALL DISPI ;调用子函数显示名次PUSH DXPUSH AXMOV AH,02 ;显示空格MOV DL,20HINT 21HPOP AXPOP DXINC SI ;指向名次表的下一个地址LOOP WWW ;判断是否输出所有名次MOV AH,4CH ;返回DOSINT 21H微机原理课程设计SCAN PROC NEAR ;扫面子函数,没调用一遍,找出成绩表;中最高成绩,记录其学号,并将此成绩;清0PUSH CXMOV CX,STUNUMMOV AL,00HMOV BX,OFFSET SCOREMOV SI,BXCCC: CMP AL,[SI]JAE JJJMOV AL,[SI]MOV DX,SISUB DX,BXJJJ: INC SILOOP CCCADD BX,DXMOV BYTE PTR [BX],00HPOP CXRETSCAN ENDPDISPI PROC NEAR ;显示子程序PUSH CXMOV BL,AL ;显示高4位MOV DL,BLMOV CL,04ROL DL,CLAND DL,0FHCALL DISPLMOV DL,BL ;显示低4位AND DL,0FHCALL DISPLPOP CXRETDISPI ENDPDISPL PROC NEAR ;将名次转换成对应的ASCII码值并显示 ADD DL,30HMOV AH,02HINT 21HRETDISPL ENDP微机原理课程设计GETNUM PROC NEAR ;读取成绩子函数PUSH CXXOR DX,DX ;清0,用于存放成绩GGG: MOV AH,01HINT 21H ;键盘字符输入CMP AL,0DHJZ RRR ;如果是回车则结束SUB AL,30HJB ERR ;小于0则报错CMP AL,09HJBE GETS ;如果在0—9之间则存成绩至DXJMP ERR ;否则报错GETS: MOV CL,04SHL DX,CL ;将DX中已有数值左移四位XOR AH,AHADD DX,AX ;紧接着将数据存在DX中低四位JMP GGG ;跳转继续读取数据ERR: MOV AH,09H ;显示报错信息MOV DX,OFFSET ERRORINT 21HMOV EMARK,01H ;报错标志置1RRR: PUSH DXCRLF ;回车换行POP DXPOP CXRETGETNUM ENDPCODE ENDSEND START微机原理课程设计心得体会:在为期一周的微机原理课程设计中,通过查阅书籍,上网收集资料以及向老师和同学请教,我完成了老师定下的任务。

在此次课程设计过程中感受颇深。

这一周,可以说是苦多于甜,但是可以学到很多东西,同时巩固了以前所学过的知识。

以前在上课的时候,老师经常强调在写一个程序的时候,一定要事先把程序原理方框图化出来,但是我开始总觉得这样做没必要,很浪费时间。

但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在课程设计中碰到的程序较复杂,画程序方框图是很有必要的。

因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。

在设计过程中遇到了不少的麻烦,最典型的是由于程序相对较大,在用JB,JA等条件跳转语句时出项了超出跳转范围的情况,这就给程序设计带来了一些困难。

由于之前都没遇到过这样的问题,所以刚开始遇到的时候有点棘手,不知道该从哪下手解决此问题,以至于都有了放弃该课题的想法。

但是又觉得不值得,写了这么长的程序就因为这一个小问题而放弃了实在是说不过去,于是就静下新来查阅课本,发现这些条件跳转语句的跳转范围只能在-128B--+127B之间,而无条件跳转指令JMP则不受此约束,于是我添加了一个无条件跳转语句,通过条件跳转语句先跳转到该无条件跳转语句,再通过 JMP跳转到需要的地方,于是问题就迎刃而解。

同过这一个小小的问题也暴露出了自身的问题:对课本知识掌握不牢固,只了解指令的基本功能却忽略了它的约束条件。

还有一些问题,比如为了显示方便,需把16进制数转化成10进制数显示,在进行ASCII码值转换时也遇到了问题,A—F不能正确显示,通过与同学讨论也是自己的疏忽导致的。

这不是第一次用汇编语言来写程序,平时做了很多实验,写了很多小程序。

但这次是一个综合的程序,平时的一些程序稍微改动都可以作为子程序用到,这大大方便了我的设计,为我节省了很多的时间。

在这次课程设计中,我真正体会到了合作的重要性,遇到很多问题时,当我看书查资料不能解决时,去找同学讨论一下,收获很大,可以使很多问题迎刃而解。

不可否认,程序任然存在不少缺点和不足,但通过这次课程设计的却找出了自己在学习上的不足,对以后的工作也有指导作用。

我相信在以后的学习中会克服这些不足,达到熟练掌握汇编语言的目的!参考文献:1.张荣标,机械工业出版社,《微型计算机原理与接口技术第二版》2.张荣标,《微型计算机原理课程设计指导书》微机原理课程设计3.李干林,李升等,北京大学出版社《微机原理及接口技术试验指导书》。

相关文档
最新文档