您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 学生成绩管理--汇编课程设计
集美大学《汇编语言程序设计》课程设计题目:学生成绩管理专业:计算机科学与技术学号:2010810072姓名:罗忠霖2010-2011学年第二学期2一.设计目的汇编语言课程设计是对所学课程内容全面、系统的总结、巩固和提高的一项课程实践活动。根据汇编语言的特点,选择相应的题目,在老师的指导下,由学生独立完成。课程设计要求同学们熟悉汇编语言的编程,BIOS中断调用、系统功能调用、磁盘数据的查询、存取等相关知识。通过课程设计,一方面提高运用汇编语言编程解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。二.设计内容学生成绩管理功能描述:创建成绩管理档案文件(若已存在则直接使用该文件),它包含学号10位,英语3位、高数3位、体育3位,语文3位、物理3位、及它们的平均成绩3位等七项内容。试编写一管理程序,要求系统显示如下菜单,按键后执行相应的操作。(1)L命令:列出文件中的所有人的记录,每人一行(2)I命令:在文件末尾插入一个人的记录,但不允许学号重复(3)D命令:根据学号删除指定的纪录。(4)O命令:根据某课程进行排序,并将查询结果(学号、成绩)显示在屏幕上(5)Q命令:退出管理系统三.程序设计原理本次课程设计主要是在对文件进行操作的基础上,开辟存储空间保存文件的数据,在程序执行过程中,通过对缓存区进行添加、查询、删除、排序,并在最后将缓存区的数据保存到文件,从而实现对文件的间接管理。具体步骤如下:1.根据数据段存储的文件的ASCIZ串打开文件,未成功的话则新建文件;2.显示界面,根据用户键入确定偏移值,进而找到数据段内存放的跳转指令;2.1编写LIST子程序:调用子程序RD_WJ读取文件数据,调用子程序DISP显示缓存区数据;2.2编写RD_WJ:通过移动文件指针,每次读取一组,再移动指针,重复至读取完,保存记录个数;2.3编写DISP:通过指针的移动,先显示学号,再计算成绩的ASC值而后显示,通过记录个数控制循环显示的行数;2.4编写INPUT:移动缓存区指针至空的一行,通过循环读取一组字符形成字符串,遇到空格时形成学号,此时通过与另一个指向缓存区开头的指针进行比较,若学号重复则返回,不重复则同样通过循环读取一组字符,然后减去30H,保存为成绩,使用空格来分隔输入,遇到回车时结束输入;2.5编写DEL:通过记录的个数控制循环,匹配欲删除的学号串时,保存指针,并设另一个指针指向欲删除的记录的后一个,通过从后面往前传送记录,达到删除目标记录的效果,最后记录数减一;2.6编写ORD:读取用户键入的选项1~6,将其作为偏移量,即用2个指针指向相邻的2条记录,用指针加偏移量来获取成绩并比较,交换时通过将一行的长度作为循环的次数,循环XCHG,并在外部设置2个循环实现冒泡排序;2.7编写WT_F:每次写入一行,将记录个数作为循环次数。3四.程序流程图4五.源程序.MODELSMALL.DATANEQU6;人数NUMEQU6;学号长度LENEQUNUM+6;一行的长度DATBUFDBNDUP(LENDUP(?));存储数据的缓存区CNTEQU$-DATBUFFNAMEDB'c:\stu.txt';文件的ASCIZ串RECNUMDB15DUP(?);要删除的学号RECSDW?;有效记录数FCODEDW?;文件代号CRLFDB0AH,0DH,'$'STR0DB0AH,0DH,'L:LISTI:INSERTD:DELETEO:ORDERQ:QUIT',10,13DB'-------------------------------------------',10,13,'$'STR2DB0AH,0DH,'--InputtheNumandScore:',10,13,'$'STR3DB'--Thefileisempty!--',10,13,'$'STR4DB0AH,0DH,'--EntertheNum:',10,13,'$'STR5DB'------NOTFOUND!------',10,13,'$'STR6DB'EnterNumandScore:',10,13,'$'STR7DB'NUMENMASPCHPHAE',10,13;输出界面DB'----------------------',10,13,'$'STR8DB'NUMENMASPCHPH',10,13;输入界面DB'----------------------',10,13,'$'STR9DB'1:EN2:MA3:SP4:CH5:PH6:AE',10,13DB'Enteranumberbetween1and6:',10,13,'$'STR10DB'====Finish!====',10,13,'$'STR11DB0AH,0DH,'Overflow!Tryagain:',10,13,'$'STR12DB0AH,0DH,'Numoverload!',10,13,'$'ERRODB'ERROR!',10,13,'$'ILLDB'Inputillegally!!',10,13,'$'ORDER_TABDW'L',LIST,'I',INST,'D',DEL,'O',ORD,'Q',QUT;保存调用所用的字符以及命令REG1DW?REG2DW?;---------------------------------------------------------------------OUTPUTMACROSTR;显示字符串STRLEADX,STRMOVAH,09HINT21HENDM;---------------------------------------------------------------------5.CODEASSUMECS:@CODE,DS:@DATA,ES:@DATASTART:MOVAX,@DATAMOVDS,AXMOVES,AXMOVAH,3DH;如果文件存在则直接打开,MOVAL,2;文件可读写LEADX,FNAMEINT21HJNCL0;打开成功LEADX,FNAME;如果文件不存在就新建MOVAH,3CHMOVCX,0;普通文件INT21HJCERRORMOVFCODE,AX;保存文件代号OUTPUTSTR3;提示文件为空OUTPUTSTR6;提示输入CALLINPUT;空文件JMPL2L0:MOVFCODE,AX;保存文件代号L2:OUTPUTSTR0;显示命令菜单LEASI,ORDER_TAB-4;先减4便于之后统一加4MOVAH,1;读取命令INT21HMOVBL,ALCMPBL,61H;判断大小写JBL5;大写则转到L5SUBBL,20H;小写转大写L5:OUTPUTCRLFXORCX,CXL3:INCCX;判断是否为合法命令CMPCX,5JAL4;超出5条指令ADDSI,4;SI加一次4就指向每条指令调用所需匹配的字符CMPBYTEPTR[SI],BLJNZL3CALL[SI+2];调用命令JMPL2L4:OUTPUTILL;非法命令,重新输入指令6JMPL2ERROR:OUTPUTERROCLOSE:CALLQUT;关闭文件并退出;--------------------------------------------------------------------------LISTPROCNEAR;读取并显示CALLRD_WJ;读文件CMPRECS,0;空文件时JZE8CALLDISP;显示读取的内容E8:RETLISTENDP;--------------------------------------------------------------------------RD_WJPROCNEAR;读取文件到DATBUFMOVAH,42H;移动指针到文件开头MOVAL,0XORDX,DXXORCX,CXMOVBX,FCODEINT21HJCE7MOVRECS,0;记录数清零LEADX,DATBUFR1:MOVAH,3FH;读文件MOVBX,FCODE;取文件代号MOVCX,LEN;每次读取的字节数INT21HJNCR2;下一组OUTPUTERROJMPEXITR2:INCRECS;记录数ADDDX,LEN;下一个地址MOVREG2,DX;保存地址CMPAX,0JNZR1DECRECSCMPRECS,0;文件为空JNZEXITOUTPUTSTR3JMPEXITE7:OUTPUTERROEXIT:RETRD_WJENDP7;--------------------------------------------------------------------------DELPROCNEAROUTPUTSTR4LEABX,RECNUM;输入欲删除的学号D_1:MOVAH,1;循环输入单个字符INT21HCMPAL,0DH;判断是否回车,是回车结束输入JZD_2MOVBYTEPTR[BX],ALINCBXJMPD_1D_2:OUTPUTCRLFCALLRD_WJ;读文件LEADI,DATBUF-LEN;为方便循环先-LENMOVCX,RECS;把记录的个数当查找次数D_3:MOVBP,CXADDDI,LENMOVBX,DI;保存DILEASI,RECNUM;待删除学号地址MOVCX,NUM;学号长度CLDREPZCMPSBJZFND;找到MOVDI,BX;此条记录不匹配,恢复DIMOVCX,BPLOOPD_3OUTPUTSTR5;未找到JMPE2FND:MOVDI,BXMOVSI,DI;DI指向要删除的记录ADDSI,LEN;SI指向要往前移的记录DECRECS;有效记录减1MOVCX,BP;CX保存要移动的记录的条数DECCXCMPCX,0JZE2D_4:MOVBP,CXMOVCX,LENCLDREPMOVSB;前移8MOVCX,BPLOOPD_4E2:LEADX,FNAME;新建同名文件MOVAH,3CHXORCX,CX;普通文件INT21HMOVFCODE,AXCALLWT_FOUTPUTSTR10RETDELENDP;--------------------------------------------------------------------------DISPPROCNEAR;显示内容LEADI,DATBUFLEASI,DATBUF+NUMOUTPUTSTR7;成绩显示格式MOVCX,RECSD1:MOVBX,CX;保存记录数MOVCX,NUM;学号长度D2:MOVDL,[DI]MOVAH,2INT21HINCDILOOPD2MOVCX,6;6个成绩D3:MOVBP,CXMOVAL,[SI]XORCX,CXMOVDL,10D4:XORAH,AHINCCXDIVDLMOVDH,AL;保存商MOVAL,AHXORAH,AHPUSHAXMOVAL,DHORAL,ALJNZD4D5:POPAX9ADDAX,30H;输出字符ASCⅡ码MOVDL,ALMOVAH,2INT21HLOOPD5MOVDL,20H;成绩之间的格MOVAH,2INT21HINCSIMOVCX,BPLOOPD3;显示一行的成绩OUTPUTCRLFMOVDI,SIADDSI,NUMMOVCX,BX;下一行LOOPD1OUTPUTCRLFRETDISPENDP;--------------------------------------------------------------------------INSTPROCNEAR;插入记录CALLRD_WJSUBREG2,LEN;REG2保存指向最后的位置MOVSI,REG2MOVDI,SI;设置子程序入口参数ADDSI,NUMOUTPUTSTR2;提示输入MOVAH,42H;移动记录指针到文件开头MOVAL,0MOVBX,FCODEXORCX,CXXORDX,DXINT21HJCE9CALLI1JMPEAE9:OUTPUTERROEA:RET10INSTE
本文标题:学生成绩管理--汇编课程设计
链接地址:https://www.777doc.com/doc-3789718 .html