汇编语言版学生管理系统演示教学
汇编语言-学生信息管理系统实验报告(含源代码)

北京邮电大学计算机学院《微机原理与接口技术》学生信息管理系统实验报告姓 名: 许伟林学 号: 08211306指导教师: 倪晖日 期: 2010/12/22内容目录一、实验目的 (3)二、实验环境 (3)三、实验任务 (3)四、实验设计 (3)四.一、关键数据结构 (3)学生信息 (3)排序序列 (4)菜单跳转表 (4)四.二、关键子程序和宏定义 (4)部分宏定义 (4)部分子程序 (5)四.三、子程序调用关系图 (5)0、输入学生信息 (5)1、按学号排序输出 (6)2、按成绩排序输出 (6)3、统计并输出平均成绩 (6)4、统计并输出各分数段人数 (6)四.四、程序源代码 (6)五、程序运行效果 (25)六、实验总结 (28)一、实验目的掌握8086汇编程序设计的基本方法了解用汇编语言写程序的麻烦,坚定学好高级语言的信心二、实验环境Windows XPMASMPlus 1.2集成实验环境三、实验任务编写学生信息管理系统,详细要求见课本119页。
四、实验设计四.一、关键数据结构学生信息student struc;学生的数据结构,32字节,2^5,便于计算地址xname db14dup('$')class db14dup('$')num dw0score dw0;为保存1位小数,以10倍值保存student endsstu_size equ 32;32=2^5stu_db student100dup(<'x','y',6,500>);100名学生的空间stu_num db0;已保存的学生人数学生信息结构体长32字节,即2^5,便于计算地址。
姓名和班级以字符串保存,限长13字节;学号和成绩以16位整数保存。
为精确到1位小数,成绩域保存的是真实成绩的10倍值。
程序申请了保存100名学生信息的连续内存空间,并以stu_num变量记录已输入的学生人数。
基于汇编语言学生成绩管理系统之欧阳历创编

学生成果管理系统目录设计内容1设计目的2设计要求2设计阐发2子法度阐发6操纵说明11法度代码12总结42参考文献42设计内容设计一个学生成果管理法度,要求能实现以下功能:1)各科成果的录入,修改和删除。
2)按姓名查询每个学生各门课的成果。
3)显示查询结果。
4)统计个分数段的人数。
5)打印学生成果。
设计目的用汇编数据的录入、修改和删除操纵。
设计要求学习如何用汇编语言进行数据处理。
设计阐发1.总体结构整个法度采取主法度调用子法度的办法。
主法度完成菜单的显示,子法度完成一个自力功能办法的实现。
各子法度的实现办法简要描述如下:1)设计INSERT(录入)子法度,先掀开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子法度接受用户的输入,再把用户的输入写入文件,最后关闭文件前往主法度。
2)设计Delete(删除)子法度,先掀开文件,再调用宏GETIN获得要删除的学生的姓名,然后读文件中的记录,直到其记录的名字与所输入的名字相同为止,把文件指针后退8个字符(即4门课成果所占的空间),写入8个“0”字符,关闭文件前往主法度。
3)设计List(浏览)子法度时,先掀开文件,然后读一个记录,并通过调用宏SHOW_ITEM将其显示到屏幕上,入文件指针没有达到文件尾,则继续读记录并显示,当指针达到文件尾时,则关闭文件前往主法度。
4)设计Modify(修改)子法度时,先掀开文件SCORE.TXT,通用GER_REC获得要修改的记录,然后读文件中的记录,并与用户输入的记录做比较(只比较记录中的名字部分),若不合则吨下一条记录,若相同则将文件指针后退23个字符(一个记录为23个字符的长度),然后把用户输入的记录写入文件,最后关闭文件前往主法度。
5)设计Count(统计)子法度时,先掀开文件,然后读记录,比较记录的第16个字符,数学成果的高位),并统计,直到文件指针达到文件尾,最后关闭文件调用宏SHOW_ITEM 显示统计结果,返会主法度。
汇编语言课程设计学生成绩管理系统

汇编语言课程设计课题名称:学生成绩管理系统小组成员:班级:指导教师:日期:2014.06.18 一、选题目的:熟悉汇编语言程序设计的实验环境,主要是熟悉汇编程序的基本结构,编译、连接和调试等基本操作。
利用该题目进行汇编语言程序设计运用的综合性训练,综合运用汇编语言循环程序和子程序编程方法,巩固以及提高汇编语言程序设计能力运用水平,为后续的开发和实验工作打好基础。
二、功能设计:编制一个程序,要求接收从键盘收入的一个班的学生成绩,并存放于50字节的GRADE 数组中,其中GRADE+N保存学号N+1的学生成绩,然后根据GRADE得学生成绩,把学生名次填入50自己的RANK数组中,其中RANK+N的内容是学号N+1学生的名次,在按学号把学生顺序学生名次显示出来。
三、算法流程图:四、运行结果:从键盘输入三个学生的姓名和成绩,按学生成绩升序排序,并显示出排序结果五、程序源代码:data segmentinfor0 db 0ah,0dh,'sort=$'infor1 db 0ah,0dh,'input name:$'infor2 db 0ah,0dh,'input score:$'n equ 8 姓名长度m equ 4 成绩长度(3位+回车符)p equ 3 输入的人数q equ 3 成绩的位数buff1 db n,?,n dup(0),'$' 姓名缓冲区,加$字符以便输入时用 buff2 db m,?,m dup(0),'$' 成绩缓冲区sname db p dup(n+1 dup(0)) 保存姓名score1 dw p dup(m+1 dup(0)) 保存成绩score2 dw p dup(m+1 dup(0))mingci db p dup(0) 名次x dw ?sign1 dw 0sign2 dw 0cont db '1' 计数data endscode segmentassume cs:code, ds:datamain proc farstart:mov ax,datamov ds,axmov es,axmov bx,0mov cx,0call inputcall sortcall printmov ah,4chint 21hmain endpinput procinc bx 输入次数统计cmp bx,p 输入次数>p?ja exitlea dx,infor1 显示提示2mov ah,9int 21hlea dx,buff1 输入姓名mov ah,10int 21hmov al,buff1+1 实际输入个数——a1add al,2 +2.包含bufferl的0、1号单元mov ah,0mov si,ax 回车0d所在位置,跟在最后一个字符后 mov buff1[si],0 将0d换为0,便于输出显示lea dx,infor2 显示提示2mov ah,9int 21hlea dx,buff2 输入成绩mov ah,10int 21hmov al,buff2+1 实际输入个数add al,2 个数+2,包含0、1单元,为找到0dmov ah,0mov si,axmov buff2[si],0 将0d换为0,便于输出显示mov mingci[bx-1],bl bx为输入次数,保存输入的次序cmp bx,1 第一次输入转let1jz let1add sign1,n+1 姓名间隔为n+1add sign2,q 成绩间隔为qlet1: 子程序嵌套call copyjmp inputexit:retinput endpcopy procmov cx,n+1 姓名长度+3(包含$)lea si,buff1+2lea di,sname 姓名传递到snameadd di,sign1 加上间隔值cldrep movsbmov cx,nmov ax,'$' 用$覆盖姓名区,清除已输入的姓名 lea si,buff2+2lea di,score1 成绩传递到score1add di,sign2 加上间隔符cldrep movsblea si,buff2+2mov di,sign2call change 二进制成绩score2retcopy endpchange procmov x,0mov cx,[si-1] 成绩的位数cxmov cx,000fh 保留低四位rept2:mov al,[si] 按位取出成绩cmp al,30h 是否在0、9之间jl exit1cmp al,39hjg exit1and ax,000fhxchg ax,xmov dx,10 将ax中前一次形成的书扩大十倍mul dx 保存到xadd x,axinc siloop rept2mov ax,x 按十进制形成的成绩以二进制保存 mov score2[di],ax 二进制成绩送入score2mov x,0add sign2,2 下一个成绩单元exit1:retchange endpsort procmov cx,p 数组长度dec cxloop1:push cx 保存外循环次数mov bx,0mov si,0loop2: mov ax,score2[bx]cmp ax,score2[bx+m+1] m+1=5jge next 降序xchg ax,score2[bx+m+1] 交换成绩mov score2[bx],axmov al,mingci[si]xchg al,mingci[si+1] 交换名次mov mingci[si],alnext:add bx,m+1inc si 下一个成绩loop loop2pop cx 恢复外循环次数loop loop1retsort endpprint proclea dx,infor0 显示结果提示mov ah,9int 21hmov cx,pmov bx,0mov ax,0mov di,0rept3:mov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov dl,cont 显示名次序号mov ah,2int 21hinc contmov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov al,mingci[di] 取名次dec al 位置-1,因为地址从0开始 mov bl,9mul bllea dx,snameadd dx,ax 偏移地址+姓名位移量mov ah,9 显示姓名int 21hmov dl,0ah 回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov bx,0mov al,mingci[di] 取名次dec al 地址从0开始mov bl,5mul bllea dx,score1add dx,axmov ah,9 显示成绩int 21hinc diloop rept3retprint endpcode endsend start六、自我评价:本次大作业做的是显示学生名次表,重要考察的是复杂程序设计中,采用模板块结构可以划分功能,分解程序,在各个程序之间存在参数传递问题,强调了传递方式和嵌套调用层次的运用。
汇编语言课程设计---学生成绩管理程序

郑重声明:本篇文档为从百度文库中下载的经过原文修改后的!目录第一章设计课题概述 (2)1.1 课程设计目的 (2)1.2设计内容及要求 (2)第二章总体设计 (3)2.1总体设计思路 (3)2.2 各版块功能描述 (3)第三章详细设计 (5)3.1 程序功能设计 (5)3.2各模块程序详细流程 (5)3.3 源代码及注释 (8)第四章调试过程及结果 (32)4.1 显示所有成绩 (32)4.2 插入成绩 (32)4.3 查询学生成绩 (33)4.4 删除学生成绩 (34)4.5 修改学生成绩 (35)4.6输出数学成绩 (36)第五章总结 (37)参考资料 (38)第一章设计课题概述1.1 课程设计目的当今社会是一个信息时代的社会,计算机的使用也是越来越普遍了,各行业在管理职员都采用了一些管理软件,不管是银行、学校,大大小小的各种企业,都是使用的相应的管理软件管理企业的各种信息,我选择的这个汇编语言课程设计题就是一个简单学生信息管理程序,虽然只能处理一些简单操作,但是其意义却是非凡,同过此课程设计,让我了解了一些简单的管理软件的基本原理,更深刻的理解了汇编语言的特点,对汇编语言有了一个跟深层次的理解。
利用汇编程序编写一个小型学生成绩管理程序,实现学生信息成绩的插入、修改、显示所有学生的各科成绩,并且可根据输入学生姓名插询该生的各科成绩,可统计所有成绩个各分数段的人数。
1.2设计内容及要求设计一个学生管理程序,主要实现以下功能(1)各科成绩的录入、修改、和删除。
(2)按姓名查询每个学生哥们成绩。
(3)显示查询结果(4)统计各分数段的成绩的人数个分数段的人数。
程序运行时,在出现的主菜单中,按l键,将浏览学生的各科成绩;按i键后,将执行插入功能,可以插入新的学生成绩,按m键,键输入需要修改的学生成绩,也包括不修改的科目;按d键输入要删除的学生姓名,将使其成绩全部变成0;按q键输入查询的学生的姓名,将其各科成绩显示出来;按下c键将按数学成绩分段结果。
基于汇编语言学生成绩管理系统

教死结果管造系统之阳早格格创做目录安排真质1安排手段2安排央供2安排分解2子步调分解6支配证明11步调代码12归纳40参照文献40安排真质安排一个教死结果管造步调,央供能真止以下功能:1)各科结果的录进,建改战简略.2)按姓名查询每个教死各门课的结果.3)隐现查询截止.4)统计个分数段的人数.5)挨印教死结果.安排手段用汇编数据的录进、建改战简略支配.安排央供教习怎么样用汇编谈话举止数据处理.安排分解所有步调采与主步调调用子步调的要领.主步调完毕菜单的隐现,子步调完毕一个独力功能要领的真止.各子步调的真止要领简要形貌如下:1)安排INSERT(录进)子步调,先挨启文献SCORE.TXT,并置文献指针到文献尾,而后调用GET_REC子步调交受用户的输进,再把用户的输进写进文献,开端关关文献返回主步调.2)安排Delete(简略)子步调,先挨启文献,再调用宏GETIN得到要简略的教死的姓名,而后读文献中的记录,曲到其记录的名字与所输进的名字相共为止,把文献指针退却8个字符(即4门课结果所占的空间),写进8个“0”字符,关关文献返回主步调.3)安排List(欣赏)子步调时,先挨启文献,而后读一个记录,并通过调用宏SHOW_ITEM将其隐现到屏幕上,进文献指针不到达文献尾,则继承读记录并隐现,当指针到达文献尾时,则关关文献返回主步调.4)安排Modify(建改)子步调时,先挨启文献SCORE.TXT,通用GER_REC得到要建改的记录,而后读文献中的记录,并与用户输进的记录搞比较(只比较记录中的名字部分),若分歧则吨下一条记录,若相共则将文献指针退却23个字符(一个记录为23个字符的少度),而后把用户输进的记录写进文献,开端关关文献返回主步调.5)安排Count(统计)子步调时,先挨启文献,而后读记录,比较记录的第16个字符,数教结果的下位),并统计,曲到文献指针到达文献尾,开端关关文献调用宏SHOW_ITEM隐现统计截止,返会主步调.6)安排Query(查询)子步调时,先挨启文献,通过调用宏GETIN得到要查找教死的姓名,而后读文献记录,并共要查找的教死姓名比较,若相共则输出,若分歧继承读文献记录,开端隐现查询截止,关关文献返回步调.其余另有挨印的分数段人数统计,那些分离后里的子步调功能分解搞仔细介绍.图1是原安排隐现记录的界里图1 教死结果管造系统界里步调过程图如图2所示YNYNYNYNNY正在庞大的步调中,为了使步调浑晰、可读性佳,普遍会洪量使用宏战子步调,果此,充分相识那些宏战子步调,才搞掌握步调的体例要领.原题中使用了下列宏,其效率如下:SHOW :用去指定天面的隐现字符串,有一个天面参数SET_P1:设定光标位子,有一个可变参数a,效率是道光标置于坐标(a,36)处,使用了BIOS中断10H的2号功能.SET_P2 :将光标置于(12,2)处.SET_P3 :将光标置于(1,30)处.CLEAR :扫除所有屏幕,用BIOS中断10H的7号功能真止,范畴是从坐标(0,0)到(24,79),将所有天区形成空黑.CLEAR1 :扫除有半部分屏幕,扫除范畴从坐标(4,36)到(10,79),截止是揩出此天区的隐现真质.CLEAR2 :扫除下半部分屏幕,扫除范畴是从坐标(12,0)到(24,79),截止是揩除此天区的隐现真质.NNWLINE :回车换止.SHOE_ITEM :隐现记录真质,真止后隐现称呼,而后依次隐现4项功课结果,各项结果间空3个空格,开端换止.那个宏包罗的语句较多,如果屡屡皆曲交用语句真止非常冗少,使用宏后则主步调便很简净,充分体现了使用宏的便宜.GETIN :获与教死的疑息,那也是一个使用一再的宏,其中含有很多的指令,它戴有ADDRS战COUNT2二个参数,ADDRS是存搁疑息的数据段位子,CIUNT2是交受的字符数.子步调分解底下仔细分解步调中用的的主要的子步调.(1)INSERT 子步调INSERT 子步调的功能是录进一条记录.最先死存现场进栈,而后DOS中断3D号功能挨启FNAME指定的文献,而后宏GETIN扫除屏幕左半部分的记录输进天区.正在记录的第一项处置光标,用GET_REC获与记录真质,用DOS中断42H号功能将指针移到文献开端.再用DOS中断40H号功能将搁正在BUFFER慢冲区的23个字节的真质写到文献中,交着关关文献,沉新树坐光标位子正在隐现记录位子.开端弹栈回复现场.(2)GET_REC 子步调GER_REC 子步调的功能是获与新的记录真质.最先用宏GETIN获与教死的姓名,搁进BUFF2中,最多15个字符,如果逢到回车键则提前中断.再用循环办法将BUFFER2中的15个字符支到BUFFER1中.而后用宏SET_P1将光标置于数教结果输进项后,等待键盘输进.输进的结果,先搁正在BUER2中,而后加到BUFFER1中的姓名后里.输进为2个字符后逢到回车键提前中断.交着用共样的要领输进英语结果,估计机结果战华文结果.完毕后,那个步调便得到了一个记录的所有疑息.(3)OPENF子步调OPENF是个一个非常简朴的子步调.它的效率是挨启一个文献并把一个文献句柄死存正在数据段的handle慢冲区中.(4)QUERY子步调QUERY是查询一条记录.最先死存现场.而后分别扫除界里左上圆战下边的天区.挨启FAME指定的文献并死存文献句柄.将光标至于界里的下半空黑部分启初处,用宏GETIN 获与最多15个字符的输进,而后将BUFFER1中的真质与BUFFER2中举止比较,瞅是可相共.如果分歧,再继承背下从文献中读出23个字节比较,循环背下,曲到相共或者文献中断为止.如果分歧,则隐现该条记录,而后关关文献,回复现场.B: MOV AH,3FH ;读文献MOV CX,23 ;读23个字节(记录少度)MOV DX, OFFSET BUFFER2 ;搁正在BUFFER2中INT 21HLEA SI,BUFFER2MOV CX,15 ;循环次数C: MOV AL , BYTE PTR[SI]CMP AL , BYTE PTR [DI] ;比较BUFFER1战BUFFER2JNZ B ;分歧则转BINC SIINC DLOOP C(5)MODIFY子步调MODIFY子步调的功能是建改记录.先呵护现场,而后扫除左上部分的记录输进天区,交着挨启文献.用GET_REC子步调获与输进的记录疑息,并存进BUFFER1中.从挨启的文献中读与一个记录的真质(23个字节)搁正在BUFFER2中.比较记录前里的15个字节(姓名),如果分歧,则读与下一个记录;如果相共,则回移一个记录的指针,回到刚刚才那条记录的位子(果为读与一个记录后,指针已移到下一条记录上).将搁正在BUFFER1中的输进的记录写到刚刚才那条记录正在文献中的位子上,进而真止此记录的建改.开端关关步调,回复现场.(6)DELETE子步调DELETE子步调的功能是简略一条记录.最先死存现场,扫除屏幕.而后挨启文献,死存文献句柄.用宏GETIN获与15个字节的姓名字符,搁正在BUFFER1中.读与一条记录(23个字节),搁正在BUFFER2中,而后战BUFFER1中真质比较,如果分歧,读与下一条记录.如果姓名相共,则把指针后移8个字符(4门功课所占空间),写进8个“0”字符.关关文献,回复现场并退出.(7)LIST子步调LIST子步调的效率是隐现文献中的记录.最先扫除记录输进区战隐现天区.而后隐现记录字段的题目.挨启文献,死存文献句柄.读与一条记录的真质搁正在BUFFER1中,并推断是可到了文献开端,如果不是,则隐现那条记录.循环读与曲到文献中断.开端关关步调,回复现场.(8)PRINT子步调DELETE子步调的功能是挨印文献中的记录.用OPENF子步调挨启文献.读与一条记录,汇编谈话提供了自定义数据结构的结构定义语句,可将分歧的数据典型搁正在一个数据结构中,便于处理,正在原步调中的记录便采与了结构定义语句.那里读与记录也用了结构的要领.交着用DOS中断21H的5号功能,逐字挨印存搁正在BUFFER1中的所以字符.一条记录挨完后,挨印回车符换止.而后用共样要领继承读与下一条记录并挨印,曲到文献中断为止.开端关关文献退出.(9)COT子步调COT子步调的效率是统计各分数段小道人数,并简化步调,动做示例,原步调只统计记录数教各分数段的人数.最先隐现统计截止的题目:maths<60<70<80<90<100.而后挨启文献.读与记录,将记录的第16个字符(数教分数的下位)与出比较.统计截止依次搁正在以BUFFER3启头的内存单元中,如果小于60,则将小于60的记录单元BUFFER3加一;若小于70,则将小于70的记录单元BUFFER3加一,即BUFFER3下一个天面单元真质加一,依次类推.处理完后再读与下个记录,做共样处理,曲到文献中断为止.交着隐现搁正在BUFFER3中的各分数段的人数的统计截止,开端关关文献中断.从步调中不妨瞅出,统计时步调有个节造,原例每个分数段最多不克不迭超出9部分.支配证明改步调除源步调中,还需要另一个存搁记录的文献(此步调中使用的文献名为SCORE.TXT),但是原步调并不创造那个文献的功能.要爆收那个文献,可用记事原先搞以一个空的文献名为SCORE.TXT的文献.步调的运止与该文献的存搁位子有关,位子是步调数据段的FNAME的值.二者要脆持普遍,可则会果为找不到数据存搁文献而堕落.步调运止时,正在出现主菜单后,按1键,将隐现教死的各科结果;按i键,将真止录进功能,不妨录进新的教死结果;按M键,了建改教死结果.由于原步调时隔简朴步调,所以正在建改时,要输进教死的所有结果,包罗不要建改的结果;按D键后,输进要简略的教死名,将使其结果齐为0;按Q键后,输进要查询的教死的姓名,键隐现其各科结果;按C键将隐现数教结果的分段统计截止.以上功能正在运止时不妨单独真止(即正在加进主菜单后,单打功能键选中该功能举止支配后步调会关关.但是要运止其余功能,则要沉新加进主菜单单打别的功能键,即屡屡只可运止一项功能).要特天证明的是,原步调住一套手段是考证汇编步调真止的数据记录支配功能,为使步调不至于郭少,缩小篇幅,果此步调处剖析很简朴.步调中不过失处理步调,如果输进过失,如按退格键将会堕落,果此输进时要注意补要输错.步调代码data segmentmess1 db ' student grade managementsystem',0ah,0dh,'$'mess2 db ' this is main menu',0ah,0dh,'$'mess3 db ' insert (i) please input:',0ah,0dh,'$' mess4 db ' modify (m) name :',0ah,0dh,'$' mess5 db ' delete (d) maths :',0ah,0dh,'$'mess6 db ' query (q) english :',0ah,0dh,'$' mess7 db ' count (c) computer:',0ah,0dh,'$' mess8 db ' print (p) chinese :',0ah,0dh,'$' mess9 db ' exit (e)',0ah,0dh,'$'mess10 db'*************************************************** *******$'mess11 db 'name Ma En CoCh',0ah,0dh,'$'mess13 db ' list (l)',0ah,0dh,'$'mess12 db 'maths <60 <70 <80 <90 <100',0ah,0dh,'$' err1 db ' there is not this student$'err2 db ' file close wrong$'fname db "d:\masm\score.txt" ;记录分数文献的路径战文献名.buffer1 db 23 dup(?)buffeer db 0ah,0dh,'$'buffer2 db 30 dup(?)buffer3 db 8 dup('0')count db 5handle dw ?del db 8 dup('0')x db ?data endsscore struc ;定义记录结构names db 15 dup(' ')maths db 0,0english db 0,0computer db 0,0chinese db 0,0score endsshow macro addrs ;隐现字符串lea dx,addrsmov ah,9int 21hendmset_p1 macro a ;设光标于(a,36)mov ah,2mov dh,amov dl,36mov bh,0int 10hendmset_p2 macro ;设光标于(12,2)mov ah,2mov dh,12mov dl,2mov bh,0int 10hendmset_p3 macro ;设光标于(1,30)mov ah,2mov dh,1mov dl,30mov bh,0int 10hendmclear macro ;浑所有屏幕mov al,0mov cl,0mov ch,0mov dh,24mov dl,79mov bh,7mov ah,6int 21hendmclear1 macro ;浑左上记录输进区mov al,0mov bh,7mov ch,4mov cl,36mov dh,10mov dl,79mov ah,6int 10hendmclear2 macro ;浑下半部分记录隐现区mov al,0mov bh,7mov ch,12mov cl,0mov dh,24mov dl,79int 10hendmnewline macro ;回车换止push dxmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hpop dxpop axendmshow_item macro addrs ;正在指定位子隐现记录local iloop,w10push bxpush cxmov bx,0iloop: mov dl,addrs[bx] ;隐字符串mov ah,2int 21hinc bxcmp bx,15mov cx,4w10: mov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,addrs[bx]mov ah,2int 21hinc bxmov dl,addrs[bx]mov ah,2int 21hinc bxloop w10newlinepop cxendmgetin macro addrs,count2 ;从键盘获与疑息local zeroit,lp,input_end,exitpush bxpush axmov bx,0zeroit: mov addrs[bx],' 'inc bxcmp bx,15jl zeroitmov bx,0lp: mov ah,1int 21hcmp al,0ahjz input_endcmp al,0dhjz input_endmov addrs[bx],alinc bxcmp bx,count2jl lpinput_end: cmp al,0dhjz exitcmp al,0ahjz exitmov ah,7int 21hjmp input_endexit: pop axpop bxendmcode segmentmain proc farassume cs:code,ds:data,es:datastart: mov ax,datamov ds,axmov ah,0 ;设隐现模式80*25mov al,3int 10hclearshow mess1show mess2show mess13show mess3show mess4show mess5show mess6show mess7show mess8show mess9newlineshow mess10set_p3w: mov ah,7int 21hcmp al,'i'jnz n1call insertjmp wn1: cmp al,'m'jnz n2call modifyjmp wn2: cmp al,'d'jnz n3call deletejmp wn3: cmp al,'q'jnz n4call queryjmp wn4: cmp al,'c'jnz n5call cotjmp wn5: cmp al,'p'jnz n6call printjmp wn6: cmp al,'l'jnz n7call listjmp wn7: cmp al,'e'jz exitfjmp wexitf: mov ah,4chint 21hretmain endpinsert proc nearpush axpush bxpush cxpush dxmov dx,offset fnamemov al,2mov ah,3dh ;挨启文献int 21hmov bx,axclear1set_p1 4call get_recmov cx,0 ;指针移到文献尾mov dx,0mov al,2mov ah,42hint 21hmov cx,23 ;写文献mov dx,offset buffer1mov ah,40hint 21hmov ah,3eh ;关关文献int 21hset_p3pop dxpop cxpop bxpop axretinsert endpget_rec proc nearpush axpush bxgetin buffer2,15 ;输进姓名mov bx,0mov cx,15continue: mov al,buffer2[bx]mov buffer1[bx],alinc bxloop continueset_p1 5getin buffer2,2 ;输进数教结果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 6getin buffer2,2 ;输进英语结果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 7getin buffer2,2 ;输进估计机结果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxset_p1 8getin buffer2,2 ;输进语文结果mov al,buffer2mov buffer1[bx],alinc bxmov al,buffer2+1mov buffer1[bx],alinc bxpop bxpop axretget_rec endpopenf proc near ;挨启文献mov dx,offset fnamemov al,02mov ah,3dhint 21hmov handle,axretopenf endpquery proc near ;查询记录push axpush bxpush cxpush dxclear1clear2mov dx,offset fnamemov al,2mov ah,3dh ;挨启文献int 21hmov bx,axset_p2getin buffer1,15 ;与姓名到buffr1中lea dx,mess11mov ah,9int 21hb: mov ah,3fh ;读文献mov cx,23 ;读23个字节(记录少度mov dx,offset buffer2 ;搁正在buffer2中int 21hlea si,buffer2lea di,buffer1mov cx,15 ;循环次数c: mov al,byte ptr[si]cmp al,byte ptr[di] ;比较buffer1战buffer2jnz b ;分歧则转binc siinc dimov [buffer2+23],'$'show_item buffer2mov ah,3ehint 21hpop dxpop cxpop bxpop axretquery endpmodify proc near ;建改记录push axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dhmov bx,axmov handle,axcall get_rec ;读与输进真质搁正在buffer1read: mov dx,offset buffer2mov cx,23mov ah,3fh ;读文献,记录真质搁正在buffer2int 21hlea si,buffer2 ;比较姓名是可相共lea di,buffer1mov cx,15c5: mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz readinc siinc diloop c5mov bx,handlemov ah,42h ;回移文献指针mov al,1mov cx,0ffffhmov dx,-23int 21hmov cx,23mov dx,offset buffer1mov ah,40h ;写进建改记录int 21hmov ah,3ehint 21hjmp exit2exit1: set_p2show err1exit2: set_p3pop dxpop cxpop bxpop axretmodify endpdelete proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dh ;挨启文献int 21hmov bx,axmov handle,axgetin buffer1,15 ;读与键盘输进搁正在buffer1read5: mov dx,offset buffer2mov cx,23mov ah,3fh ;从文献读记录搁正在buffer2中int 21hlea si,buffer2lea di,buffer1c6: mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz read5inc siinc diloop c6mov bx,handlemov ah,42h ;移文献指针mov al,1mov cx,0ffffhmov dx,-8int 21hmov cx,8mov dx,offset delmov ah,40h ;写文献int 21hmov ah,3eh ;关关文献int 21hjmp exit6exit5: set_p2exit6:set_p3pop dxpop cxpop bxpop axretdelete endplist proc near ;列文献中记录push axpush bxpush cxpush dxclear1clear2set_p2show mess11mov dx,offset fnamemov al,2mov ah,3dh ;挨启文献int 21hagain: mov dx,offset buffer1 ;读与记录mov cx,23mov ah,3fhint 21hcmp ax,0jz pshow_item buffer1jmp againp: mov ah,3eh ;关关文献int 21hset_p3pop dxpop cxpop bxpop axretlist endpprint proc nearpush axcall openf ;挨启文献mov cl,countmov ch,0read2: mov dx,offset buffer1mov cx,type scoremov ah,3fh ;读文献int 21hmov cx,23hmov bx,0next: mov ah,5mov dl,byte ptr buffer1[bx]int 21hinc bxloop nextmov ah,5mov dl,0dhint 21hdec xcmp x,0jnz read2mov bx,handleint 21hpop axretprint endpcot proc ;统计结果push axclear2set_p2show mess12mov dx,offset fnamemov ah,3dh ;挨启文献int 21hmov bx,axmov handle,axread0: mov dx,offset buffer2mov cx,23mov ah,3fh ;读记录int 21hmov dl,[buffer2+15]cmp dl,'6'jl fivejl sixcmp dl,'8'jl sevencmp dl,'9'jl eightinc [buffer3+4]jmp quit eight:inc [buffer3+3]jmp quit seven: inc [buffer3+2]jmp quitsix: inc [buffer3+1]jmp quit five: inc [buffer3] quit: cmp ax,0jnz read0mov cx,10a: mov dl,' 'mov ah,2int 21hloop amov bx,0a0: mov dl,[buffer3+bx] ;隐现统计截止mov ah,2int 21hinc bxmov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hcmp bx,5jnz a0mov bx,handlemov ah,3eh ;关关文献int 21hset_p3pop axretcot endpcode endsend start归纳此次课程安排需要思量的功能很多,果此需要分模块去完毕.每个组员控造一个模块,拔出(insert)由火健控造,建改(modify)由弛翔控造,简略(delete)由胡玉杰控造,查询(query)由肖大庆控造,统计(count)由王瀚控造,并不是是每部分只管一齐,而是互相协共,主要控造一部分,至于别的部分,那些不怎么太易便不人博门控造了,而且人也出那么多.从那次课程安排中相识到单干合做的要害性,以去处事中逢到步调只大概比那个搀纯,一部分很易独自完毕,那便要需要到合做了.其余便是正在课堂上教到的知识根原便不敷,要搞佳一个步调必须多掌握一些书籍原中的相关知识.参照文献1、沈好明,温冬婵. IBM PC 汇编谈话步调安排[M] 2版北京:浑华大教出版社,20022、孙德文. 微型估计机技能[M] 北京:下等培养出版社,20023、赵雁北,温冬婵. 微型估计机系统与交心[M] 北京:浑华大教出版社,20054、王成瑞等.汇编谈话步调安排[M] 北京:下等培养出版社,2003。
汇编语言学生成绩管理系统程序

;此版本解决输入分数时输入错不能更改的bug;解决了冒泡排序时用内存当变量问题;可以清屏;使用help宏,使程序看起来更简洁;若分数输错,仅保留前两位;实现了界面化;实现了delete、modify功能nextline macropush axmov ah,0ehmov al,0dhint 10h ;调用bios输出换行符mov al,0ahint 10h ;调用bios输出回车符pop axendmhelp macro address ;打印提示信息mov ah,09hlea dx,addressint 21hendmchoice macro ;界面help mess1help mess2help mess3help mess4help mess5help mess6help mess7help mess8help mess9nextlinehelp mess10nextlineendm;学生信息的结构man strucxnum db 10,?,10 dup(0) ;学生的学号xname db 20,?,20 dup(0) ;学生的名字xclass db 10,?,10 dup(0) ;学生的班级xscore dw 0 ;学生的成绩man endsdata segmentmess1 db ' ***************************************************',0ah,0dh,'$'mess2 db ' * Student Grade Magement System *',0ah,0dh,'$'mess3 db ' * Made By XXXXXXXXXXXXX *',0ah,0dh,'$'mess4 db ' * *',0ah,0dh,'$'mess5 db ' * List(l) Insert(i) *',0ah,0dh,'$'mess6 db ' * Statistic(s) Delete(d) *',0ah,0dh,'$'mess7 db ' * Order(o) Modify(m) *',0ah,0dh,'$'mess8 db ' * Exit(e) Continue(c) *',0ah,0dh,'$'mess9 db ' ***************************************************',0ah,0dh,'$'mess10 db 'Make a choice:$'mess11 db 'Faild$'mess12 db 'Succesfully$'welcome db ' Hello! Welcome$'p_info db ' The info of the students $'input1 db 'Input the num of student:$'input2 db 'Input the name of student:$'input3 db 'Input the class of student:$'input4 db 'Input the score of student:$'output1 db 'num =$'output2 db 'name =$'output3 db 'class=$'output4 db 'score=$'output5 db ' The statistics of the students $'s_num0 db 'The total num of students=$'s_num1 db 'score(0 -60)=$'s_num2 db 'score(60-70)=$'s_num3 db 'score(70-80)=$'s_num4 db 'score(80-90)=$'s_num5 db 'score(90-100)=$'s_num6 db 'The average score of students=$'is db 0temp1 db 5,?,5 dup(0) ;为了使输入的分数也能输入错误的情况下修改而用的temp2 db 10,?,10 dup(0) ;删除时存储学号用的sum_h dw 0 ;总分数的高位sum_l dw 0 ;总分数的低位total dw 0 ;学生的人数average dw 0 ;平均成绩s_59 dw 0 ;小于60s_60 dw 0 ;60到70s_70 dw 0 ;70到80s_80 dw 0 ;80到90s_90 dw 0 ;90到99con db 48 ;结构字段的大小,为常数stu man 100 dup(<>) ;学生信息data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axcall make_c;*************************************************make_c procfirst:call clearcall cursornextlinechoicemov ah,1 ;1号系统调用int 21hmov bh,alch_i: ;插入cmp bh,'i'jne ch_lcall clearcall cursorch_i_1:mov [temp1+2],0 ;消除上一次get输入数据的影响mov [temp1+3],0mov [temp1+4],0mov [temp1+5],0mov [temp1+6],0call getmov ah,1int 21hcmp al,'c'nextlineje ch_i_1jmp firstch_l: ;显示学生成绩cmp bh,'l' ;显示jne ch_ocall clearcall cursorch_l_1:call printmov ah,1int 21hcmp al,'c'nextlineje ch_l_1jmp firstch_o: ;进行排序cmp bh,'o'jne ch_scall clearcall cursorch_o_1:call sortcall printmov ah,1int 21hcmp al,'c'nextlineje ch_o_1jmp firstch_s: ;进行统计信息cmp bh,'s'jne ch_dcall clearcall cursorch_s_1:call statistic_print;打印统计信息mov ah,1int 21hcmp al,'c'nextlineje ch_s_1jmp firstch_d: ;进行删除cmp bh,'d'jne ch_mcall clearcall cursorch_d_1:call deletemov ah,1int 21hcmp al,'c'nextlineje ch_d_1jmp firstch_m: ;进行修改cmp bh,'m'jne ch_ecall clearcall cursorch_m_1:call deletenextlinecmp is,0je ch_m_2call getch_m_2:mov ah,1int 21hcmp al,'c'nextlineje ch_m_1jmp firstch_e: ;退出cmp bh,'e'je ch_jmp firstch_: mov ah,4chint 21hmake_c endp;*************************************************;清屏函数,使用10H中断的06功能将屏幕右下角位置18H行,4FH列(DX)移动到左上角00H,00H;BIOS中断类型10H;功能号06H 屏幕上卷;辅助调用寄存器AL=上卷行数BH=上卷行属性CH=左上Y CL=左上X DH=右下Y DL=右下X;如果AL=0,则整屏空白;普通文本模式下IBM PC屏幕被划分为80行25列(从00开始)clear proc ;清屏push cxmov ax,0600Hmov bh,07mov cx,0000mov dx,184fHint 10Hpop cxretclear endp;光标定位函数,使用10H中断的02功能将光标定位;BIOS中断类型10H;功能号02H 设置光标位置;辅助调用寄存器BH=页号DH=行DL=列cursor procmov ah,02mov bh,00mov dl,0mov dh,1int 10Hretcursor endp;*************************************************get proc ;得到学生的信息push axpush cxpush bxpush sipush dimov si,offset stu ;学生的入口地址mov al,con ;把一个数据块的大小放入almov ah,0 ;把al扩展到axmul total ;乘以人数add si,ax ;相对于人数的偏移位置;得到信息;input1help input1mov dx,simov ah,0ah ;输入学号字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input2help input2add si,12mov dx,simov ah,0ah ;输入姓名字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input3help input3add si,22mov dx,simov ah,0ah ;输入班级字符串int 21hmov al,[si+1]add al,2mov ah,0add si,axmov [si],byte ptr '$'sub si,axnextline;input4help input4call d_b ; 从键盘读入分数add si,12mov [si],bxnextlineinc total ;学生总人数加1nextline;求总分数add sum_l,bxadc sum_h,0;判断属于哪个分数段cmp bx,0258hjae con_60 ;大于等于60inc s_59jmp pp1con_60:cmp bx,02bch ;大于等于70jae con_70inc s_60jmp pp1con_70:cmp bx,0320h ;大于等于80jae con_80inc s_70jmp pp1con_80:cmp bx,0384h ;大于等于90jae con_90inc s_80jmp pp1con_90:inc s_90pp1:pop dipop sipop bxpop cxpop axget endp;*****************************************print procpush axpush cxpush bxpush sipush di;输出打印信息help p_infonextlinemov si,offset stu ;学生的入口地址mov cx,total ;学生总数作为打印的循环次数cmp cx,0je kkjmp L7kk:jmp kkkL7:;打印学号help output1add si,2mov dx,simov ah,9int 21hadd si,12 ;si内存的是姓名串的首地址nextline;打印姓名help output2mov dx,simov ah,9int 21hadd si,22 ;si内存的是班级串的首地址nextline;打印班级help output3mov dx,simov ah,9int 21hadd si,10nextlinehelp output4mov bx,[si]call near ptr b_dnextlineadd si,2nextlinedec cxcmp cx,0jz kkk ; 注意,开始时用loop L7会超过距离显示; jump out of by 8 bytes,所以此处改成这样了jmp L7kkk:pop dipop sipop bxpop cxpop axretprint endp;***********************************************delete proc ;删除模块push axpush cxpush bxpush sipush dimov cx,totalcmp cx,0jne delete_1help mess11mov is,0jmp delete_0delete_1:help input1mov dx,offset temp2mov ah,0ah ;输入学号字符串int 21hnextlineinc dxmov di,dxmov bl,[di]mov si,offset stu ;学生信息入口add si,1delete_2:cmp [si],bl ;比较字符串长度jne delete_6push cx ;字符串长度相等则一个一个比较字符mov di,dxadd di,1add si,1mov bh,0mov cx,bxdelete_4:mov bh,[di]cmp bh,[si]je delete_3 ;相等的情况delete_5:add si,cx ;不相等的情况下mov bh,0sub si,bxadd di,cxsub di,bxsub si,1pop cxdelete_6:dec cxcmp cx,0jne delete_8help mess11mov is,0jmp delete_0delete_8:add si,48jmp delete_2 ;delete_3:dec cxadd si,1add di,1cmp cx,0jne delete_4 ;继续把此串比较完pop cxmov bh,0sub si,bxadd si,44cmp [si],0258hjae dd_60 ;大于等于60dec s_59jmp delete_7dd_60:cmp [si],02bch ;大于等于70jae dd_70dec s_60jmp delete_7dd_70:cmp [si],0320h ;大于等于80jae dd_80dec s_70jmp delete_7dd_80:cmp [si],0384h ;大于等于90jae dd_90dec s_80jmp delete_7dd_90:dec s_90delete_7:mov dx,[si]sub sum_l,dxsbb sum_h,0mov dx,0mov [si],dx ;分数置为0再排序call sortdec totalhelp mess12mov is,1delete_0:pop dipop sipop bxpop cxpop axdelete endp;************************************************ statistic_print procpush axpush cxpush sipush dinextlinehelp output5nextlinehelp s_num0 ;学生的总人数mov bx,totalcall sta_childnextlinecmp bx,0je failhelp s_num6 ;平均分mov dx,sum_h ;总分的高字mov ax,sum_l ;总分的低字div totalmov average,axmov bx,axcall b_dnextlinefail:help s_num1 ;不及格的mov bx,s_59call sta_childnextlinehelp s_num2 ;60-70mov bx,s_60call sta_childnextlinehelp s_num3 ;70-80mov bx,s_70call sta_childnextlinehelp s_num4 ;80-90mov bx,s_80call sta_childnextlinehelp s_num5 ;90-100mov bx,s_90nextlinepop dipop sipop cxpop axretstatistic_print endp;****************************************sta_child procmov ax,bxcmp ax,0jbe p1mov bl,100 ;除以100div bltest al,0ffh ;人数小于100的jz p2mov ch,alcall print_dp2:mov al,ahmov ah,0mov bl,10div bltest al,0ffh ;人数小于10的jz p3mov ch,alcall print_dp3:mov ch,ahcall print_djmp p4p1:mov ch,0call print_dp4:retsta_child endp;********************************************* d_b proc ;10进制转化成2进制,返回参数为bx push cxpush axpush simov bx,0mov si,offset temp1 ;temp1的地址传到dx mov dx,simov ah,0ah ;输入分数int 21hmov cx,3add si,1nc:inc simov al,[si]cmp al,'.'je L1cmp cx,1je L1sub al,'0' ;减去0jb exit ;小于0跳到exitcmp al,09h ;和9比较ja exit ;大于9跳到exitcbw ;将al进行符号扩展到axadd ax,bx ;将ax和bx相加shl ax,1 ;(ax)×2mov bx,axshl ax,1 ;(ax)×4shl ax,1 ;(ax)×8add bx,ax ;(ax)的10倍loop ncL1:inc simov al,[si]sub al,'0' ;减去0jb exit ;小于0跳到exitcmp al,09h ;和9比较ja exit ;大于9跳到exitcbw ;将al进行符号扩展到axadd bx,ax ;将ax和bx相加exit:pop dipop sipop axpop cxretd_b endp;******************************************b_d proc ;把二进制转化成十进制的函数,入口参数为bx push axpush cxpush dxmov ax,bx ;2进制数传给axmov cl,alcmp ax,10 ;和10比较jb L2 ;跳到打印0的位置mov bl,10div bl ;除以10mov cl,ah ;余数放到cl中cbwcmp ax,10 ;和10比较jb L3 ;跳到分数小于10的情况mov bl,10 ;分数大于10的情况div blmov ch,alcall print_d ;打印百位mov ch,ahcall print_d ;打印十位jmp pointL2:mov ch,0call print_djmp pointL3: mov ch,alcall print_d ;分数小于10的情况point:call print_p ;打印小数点mov ch,clcall print_d ;打印第一位小数pop dxpop cxpop axretb_d endp;******************************************print_d proc ;显示一位数字的函数push axpush bxpush dxmov dl,chmov ah,02hadd dl,'0'int 21hpop dxpop bxpop axretprint_d endp;******************************************print_p proc ;显示小数点push axpush bxpush dxxor dx,dxmov ah,02hadd dl,'.'int 21hpop dxpop bxpop axretprint_p endp;*******************************************sort proc;冒泡算法排序push axpush cxpush dxpush sipush dimov ax,dsmov es,axmov ax,total ;外层循环的次数push ax ;解决了冒泡排序时用内存当变量问题sort1:pop axdec axcmp ax,0 ;外层循环若为0,则已比较完毕jbe sort3mov bx,ax ;bx存内层循环mov si,offset stuadd si,46 ;到分数的地址mov di,siadd di,48push axsort2:mov ax,[si]mov dx,[di]cmp ax,dxjae sort4sub si,46sub di,46mov cx,48 ;循环48次,交换两个数据块sort5:xchg al,[si] ;交换两个数据xchg al,[di]xchg al,[si]add si,1add di,1loop sort5sub si,2sub di,2sort4:dec bx ;内层循环减一cmp bx,0je sort1 ;若为0,跳到外层循环add si,48add di,48jmp sort2sort3:pop dipop sipop dxpop cxpop axretsort endp;****************************************** code endsend start。
基于汇编语言学生成绩管理系统之欧阳理创编

学生成果管理系统目录设计内容1设计目的2设计要求2设计阐发2子法度阐发7操纵说明12法度代码13总结43参考文献44设计内容设计一个学生成果管理法度,要求能实现以下功能:1)各科成果的录入,修改和删除。
2)按姓名查询每个学生各门课的成果。
3)显示查询结果。
4)统计个分数段的人数。
5)打印学生成果。
设计目的用汇编数据的录入、修改和删除操纵。
设计要求学习如何用汇编语言进行数据处理。
设计阐发1.总体结构整个法度采取主法度调用子法度的办法。
主法度完成菜单的显示,子法度完成一个自力功能办法的实现。
各子法度的实现办法简要描述如下:1)设计INSERT(录入)子法度,先掀开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子法度接受用户的输入,再把用户的输入写入文件,最后关闭文件前往主法度。
2)设计Delete(删除)子法度,先掀开文件,再调用宏GETIN获得要删除的学生的姓名,然后读文件中的记录,直到其记录的名字与所输入的名字相同为止,把文件指针后退8个字符(即4门课成果所占的空间),写入8个“0”字符,关闭文件前往主法度。
3)设计List(浏览)子法度时,先掀开文件,然后读一个记录,并通过调用宏SHOW_ITEM将其显示到屏幕上,入文件指针没有达到文件尾,则继续读记录并显示,当指针达到文件尾时,则关闭文件前往主法度。
4)设计Modify(修改)子法度时,先掀开文件SCORE.TXT,通用GER_REC获得要修改的记录,然后读文件中的记录,并与用户输入的记录做比较(只比较记录中的名字部分),若不合则吨下一条记录,若相同则将文件指针后退23个字符(一个记录为23个字符的长度),然后把用户输入的记录写入文件,最后关闭文件前往主法度。
5)设计Count(统计)子法度时,先掀开文件,然后读记录,比较记录的第16个字符,数学成果的高位),并统计,直到文件指针达到文件尾,最后关闭文件调用宏SHOW_ITEM显示统计结果,返会主法度。
汇编个人信息管理系统

汇编实验实验名称:简单个人信息管理系统,要求有添加、列出、查找、删除、退出等基本功能实验目的:使学生能够很好的掌握汇编语言,对汇编语言有更深入的了解实验代码:DATA SEGMENTA DB 5 DUP (10 DUP(20H),5 DUP(20H),8 DUP(20H),5DUP(20H),1 DUP(20H),5 DUP(20H),3 DUP(20H),2 DUP(20H),'$')B DB 39 DUP(20H),'$'CAIDAN DB'**********************************************************',10,13 DB ' please choose this following choices ',10,13DB ' (1) L:list record (2) S:seacher record ',10,13DB ' (3) A:add record (4) D:delete record ',10,13DB ' (5) Q:quit ',10,13DB'**********************************************************',10,13,'$' ID DB 10 DUP(?)NAME1 DB 8 DUP(?)SEX DB ?AGE DB 3 DUP(?)ID1 DB 'please input the id:$'NAME2 DB 'please input the name:$'SEX1 DB 'please input the sex:$'AGE1 DB 'please input the age:$'EXIST DB 'the id is existing:$'CHOICE DB 'the choice is:$'HID DB 'search success!$'ADDS DB 'add success!$'NEX DB 'the ID not exists!$'DELETE DB 'please input the delete ID:$'SUD DB 'ARE YOU SURE TO DELETE IT?(Y/N)$'C DB 'press any key to continue...$'DELETES DB 'delete success!$'LISTS DB 'list success!$'SEARCH DB 'please input the search id:$'FLIST DB 'the list is full!$'NLIST DB 'the list is null!$'ROW DW 0NUMBER DW 0XIANSHI1 DB ' ID NAME SEX AGE',10,13,24H DATA ENDSCRLF MACROPUSH DXPUSH AXMOV AH,2MOV DL,10INT 21HMOV DL,13INT 21HPOP AXPOP DXENDMXIANSHI MACROPUSH DXPUSH AXMOV DL,ALMOV AH,2INT 21HPOP AXPOP DXENDMCRLF1 MACRO PPPUSH DXPUSH AXLEA DX,PPMOV AH,9INT 21HPOP AXPOP DXENDMCRLF2 MACRO XX: MOV AH,7INT 21HCMP AL,30HJB XCMP AL,39HJA XMOV DL,ALMOV AH,2INT 21HMOV ID[SI],ALINC SILOOP XENDMCODE SEGMENTASSUME DS:DATA,CS:CODE,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AX;开始;**************************************************** BEGIN: CRLFCRLF1 CAIDANCRLFCRLF1 CHOICEBEGIN1: MOV AH,7INT 21HCMP AL,'A'JE ADDIDJMP NEXTFULL1: CRLF1 FLISTCRLFJMP CONTINUE1;输入IDADDID: XIANSHIB2: MOV AH,7INT 21HCMP AL,13JE C1JMP B2C1: CRLFMOV CX,10MOV SI,0CMP ROW,4JA FULL1CRLF1 ID1CRLF2 IN2;ID是否重复MOV DX,0 ;比较次数 MOV BX,-40COMPARE: ADD BX,40CMP DX,ROWJE STOREINC DXMOV CX,10LEA SI,IDLEA DI,A[BX]CLDREPZ CMPSBJNZ COMPARECRLFCRLF1 EXISTCRLFJMP CONTINUE1CONTINUE1: CRLF1 CMOV AH,7INT 21HCRLFJMP BEGIN;存入ID;******************************************************************* STORE: MOV NUMBER,BXLEA SI,IDLEA DI,A[BX]MOV CX,10CLDREP MOVSBB1: MOV AH,7INT 21HCMP AL,13JE NJMP B1; 存入姓名;******************************************************************** N: CRLFCRLF1 NAME2NA: MOV AH,7INT 21HCMP AL,'A'JB NACMP AL,'Z'JA NAXIANSHIMOV A[BX+15],ALMOV CX,7MOV SI,0NA1: MOV AH,7INT 21HCMP AL,13JE SE1JB NACMP AL,'Z'JA NAMOV A[BX+SI+16],ALINC SIXIANSHILOOP NA1;存入性别;************************************************SE1: CRLFCRLF1 SEX1SE2: MOV AH,7INT 21HCMP AL,'F'JE SE3CMP AL,'M'JE SE3JMP SE2SE3: XIANSHICRLFMOV A[BX+28],AL;存入年龄;****************************************************** CRLF1 AGE1AG1: MOV AH,7INT 21HCMP AL,'0'JBE AG1CMP AL,'9'JA AG1XIANSHIMOV A[BX+34],ALMOV CX,2MOV SI,0AG2: MOV AH,7INT 21HJE ADDS1CMP AL,'0'JB AG2CMP AL,'9'JA AG2MOV A[BX+SI+35],ALINC SIXIANSHILOOP AG2ADDS1: CRLFCRLF1 ADDSCRLFINC ROWJMP CONTINUE1;********************************************************************* NEXT: CMP AL,'Q'JE EXITCMP AL,'L'JE LIST2JMP NEXT1NLIST1: CRLF1 NLISTCRLFJMP CONTINUE1EXIT: XIANSHIMOV AX,4C00HINT 21H;显示;******************************************************************* LIST2: XIANSHIB3: MOV AH,7INT 21HCMP AL,13JE C2JMP B3C2: CRLFJB NLIST1CRLF1 XIANSHI1MOV BX,-40MOV CX,0BACK: CMP CX,ROWJE ACT2ADD BX,40CRLF1 A[BX]CRLFINC CXJMP BACKLISTS1: CRLF1 LISTSCRLFJMP CONTINUE1NEXT1: CMP AL,'S'JE SEARCH1JMP NEXT2ACT2: JMP CONTINUE1NLIST2: JMP NLIST1;查找ID这个是我负责的模块;*************************************************************** SEARCH1: XIANSHI ;调用7号功能,如果输入是S是则调用宏XIANSHI显示SB4: MOV AH,7 ;显示完S后回车INT 21HCMP AL,13JE C3JMP B4C3: CRLF ;调用宏CRLF显示回车换行CMP ROW,0 ;row是记录人数的即表的行数,当人数等于零就为空表跳到NLIST2,显示表空JE NLIST2CRLF1 SEARCH ;显示表头MOV CX,10MOV SI,0CRLF2 IN3 ;输入IDB8: MOV AH,7 ;输入回车INT 21HCMP AL,13JE C7JMP B8C7: CRLF比较思路:dx记录比较次数,比较完一次就加一,然后进行字符串匹配,如果匹配,剧显示查找功能,如果不比配就继续比较,当比较的次数等于行数时,就比较完所有的ID,此时,要查找的ID不存在MOV DX,0 ;比较次数MOV BX,-40COMPARE1: ADD BX,40CMP DX,ROWJE OUTPUT1INC DXMOV CX,10LEA SI,IDLEA DI,A[BX]CLDREPZ CMPSBJNZ COMPARE1CRLF1 HIDCRLFCRLF1 XIANSHI1CRLF1 A[BX]CRLFJMP CONTINUE1OUTPUT1: CRLF1 NEXCRLFJMP CONTINUE1NEXT2: CMP AL,'D'JE DELETE1JMP BEGIN1JMP ACTNLIST3: JMP NLIST2OUTPUT2: JMP OUTPUT1;****************************************************************** ;删除IDDELETE1: XIANSHIB5: MOV AH,7INT 21HCMP AL,13JE C4JMP B5C4: CRLFCMP ROW,1JB NLIST3CRLF1 DELETEMOV CX,10MOV SI,0CRLF2 IN4B7: MOV AH,7INT 21HCMP AL,13JE C6JMP B7C6: CRLFMOV DX,0 ;比较次数MOV BX,-40COMPARE2: ADD BX,40CMP DX,ROWJE OUTPUT2INC DXMOV CX,10LEA SI,IDLEA DI,A[BX]CLDREPZ CMPSBJNZ COMPARE2CRLF1 SUDCRLFMOV AH,7INT 21HCMP AL,'Y'JE DELETE2CMP AL,'N'JE ACTDELETE2: LEA DI,A[BX]MOV BX,NUMBERLEA SI,A[BX]MOV CX,40CLDREP MOVSBLEA DI,A[BX]LEA SI,BMOV CX,40CLDREP MOVSBSUB NUMBER,40DEC ROWCRLF1 DELETESCRLFACT: JMP CONTINUE1;******************************************************* CODE ENDSEND START实验运行结果:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言版学生管理系统汇编语言课程实习报告实习题目学生成绩管理系统学生姓名班级(学号)院系指导老师提交时间成绩目录题目一:学生成绩管理系统 (4)二、总体设计 (5)程序主界面: (8)主程序流程图 (13)详细设计 (15)菜单模块 (15)输入模块 (16)主程序代码 (18)调试过程 (29)总结: (32)参考文献: (33)题目一:学生成绩管理系统基本功能:1、输入学生各门功课成绩;(假设3门功课,每门功课有唯一编号)2、对学生成绩记录进行查询检索(按学号、姓名)3、能修改指定学号的学生成绩;4、对学生成绩排序(按总成绩降序排列);5、、统计指定学号的学生的平均成绩在屏幕上显示;6、统计指定编号课程的平均成绩在屏幕上显示;7、每门课程成绩分析:在屏幕上显示3门课程的各个分数段的学生人数;(分数段为:>=90;80~89;70~79;60~69;<=59)8、退出系统功能二、总体设计功能结构图设计依据程序的功能需求,描述该系统功能的结构图如下:图1 系统功能结构图student strucnames db 18 dup ('$')maths dw?english dw?chinese dw?total dw 0avg dw 0student endsDATAS SEGMENTstu_array student 10 dup(<>)构建了student结构体,在存储方面使得结构变得简单。
insert proc nearinc numscur1 0altert mes7scur 1altert mes4sub bh,bhmov bl,numbindec bxcrlfmov ah,09lea dx,mesint 21hsub ah,ahmov al,28dmul nummov si,axscur 2mov ah,0ahlea dx,stu_array[si].namessub bh,bhmov bl,stu_array[si+1].namesmov stu_array[si+bx+2].names,'$'int 21hscur 3call decibinmov stu_array[si].maths,bxadd stu_array[si].total,bxscur 4call decibinmov stu_array[si].english,bxadd stu_array[si].total,bxscur 5call decibinmov stu_array[si].chinese,bxadd stu_array[si].total,bxmov bl,3mov ax, stu_array[si].totaldiv blsub ah,ahmov stu_array[si].avg,axretinsert endp用num做全局变量为学生的编号,在学生查询方面比较便利。
程序主界面:Insert子程序界面:Modify子程序界面:Query子程序界面:学生平均成绩分析界面:学科成绩界面:分数段界面:依据程序的功能的划分,各功能定义如下:(1)插入学生成绩功能名:insert功能描述:通过此功能可以插入一名学生的成绩信息,学号、姓名、语文成绩、数学成绩、英语成绩。
(2)学生平均成绩功能名: Printit功能描述:通过此功能指定学号的学生平均成绩(3)学科平均成绩功能名:Academic功能描述:通过此功能可以显示指定编号的学科平均成绩。
(4)查询学生成绩功能名:query功能描述:通过此功能可以查询一名学生的成绩信息,学号、姓名、语文成绩、数学成绩、英语成绩。
(5)修改学生成绩功能名:modify功能描述:通过此功能可以修改一名学生的成绩信息,学号、姓名、语文成绩、数学成绩、英语成绩。
(6)学生成绩排名功能名:rank功能描述:通过此功能可以查看学生成绩总分排名。
(7)各科分数段人数功能名:Analysiss功能描述:通过此功能可以查看每科分数段人数。
(8)退出学生成绩管理系统功能名:esc功能描述:退出成绩管理系统主程序流程图NYNYNY详细设计菜单模块student strucnames db 18 dup ('$')maths dw?english dw?chinese dw?total dw 0avg dw 0student endsDATAS SEGMENTstu_array student 10 dup(<>)recname db 18 dup('$')num db0num1 dw0num2 dw0num3 dw0num4 dw0num5 dw 0num6 dw 0rec dw 0mes db' Name:',13,10db' Maths:',13,10db' English:',13,10db' Chinese:',13,10,'$'mes1 db' Can`t find the student!$'mes2 db'-------------------Main Menu------------------',13,10,13,10db'I.Insert the information',13,10,13,10db'M.Modify the information',13,10,13,10db'Q.Query the student',13,10,13,10db'C.Char for query the student',13,10,13,10db'P.Printit the student average scores',13,10,13,10db'S.Student performance analysiss',13,10,13,10db'R.Rank of sum grade',13,10,13,10db'G.Academic average',13,10,13,10db'E.ESC',13,10,13,10db'-------Student Grade Management System--------',13,10,'$' mes3 db'Please input num of the student:$'mes4 db'Num of the student is:$'mes5 db'-------Query the student-----------$'mes6 db'-------Modify the information------$'mes7 db'-------Insert the information------$'mes8 db'-------Student average scores------',13,10db' Name:',13,10db'Avgscore:',13,10,'$'mes9 db'-------Maths Analysiss-------------',13,10db' >=90:',13,10db' 80~80:',13,10db' 70~79:',13,10db' 60~69:',13,10db' <=59:',13,10,'$'mes10 db'-------English Analysiss-----------',13,10db' >=90:',13,10db' 80~80:',13,10db' 70~79:',13,10db' 60~69:',13,10db' <=59:',13,10,'$'mes11 db'-------Chinese Analysiss-----------',13,10db' >=90:',13,10db' 80~80:',13,10db' 70~79:',13,10db' 60~69:',13,10db' <=59:',13,10,'$'mes12 db'There is no data!$'mes13 db'---------M->Avg of maths------------',13,10,13,10db'---------N->Avg of english----------',13,10,13,10db'---------C->Avg of chinese----------',13,10db'Please input the char:$'mes14 db' Maths:$'mes15 db' English:$'mes16 db' Chinese:$'sum dw 30 dup(' ')输入模块menu:call clear_screenscur1 1push axpush bxpush cxpush dxpush simov ah,2mov bh,0mov dh,1mov dl,0int 10hmov ah,09lea dx,mes2int 21hmov ah,1int 21hcmp al,'i'jz iicmp al,'q'jz qqcmp al,'m'jz mmcmp al,'p'jz PPcmp al,'s'jz ss2cmp al,'c'jz cccmp al,'r'jz rrcmp al,'g'jz ggcmp al,'e'jz eejmp menugg:call clear_screencall Academic_averagejmp menurr:call clear_screencall rankjmp menuii:call clear_screencall insertjmp menuqq:call clear_screencall queryjmp menumm:call clear_screencall modifyjmp menupp:call clear_screencall student_pjmp menuss2:call clear_screencall score_analysisjmp menucc:call clear_screencall query_charjmp menu;此处输入代码段代码ee:MOV AH,4CHINT 21H主程序代码START:MOV AX,DATASMOV DS,AXmenu:call clear_screenscur1 1push axpush bxpush cxpush dxpush simov ah,2mov bh,0mov dh,1mov dl,0int 10hmov ah,09lea dx,mes2int 21hmov ah,1int 21hcmp al,'i'jz iicmp al,'q'jz qqcmp al,'m'jz mmcmp al,'p'jz PPcmp al,'s'jz ss2cmp al,'c'jz cccmp al,'r'jz rrcmp al,'g'jz ggcmp al,'e'jz eejmp menugg:call clear_screencall Academic_averagejmp menurr:call clear_screencall rankjmp menuii:call clear_screencall insertjmp menuqq:call clear_screencall queryjmp menumm:call clear_screencall modifyjmp menupp:call clear_screencall student_pjmp menuss2:call clear_screencall score_analysisjmp menucc:call clear_screencall query_charjmp menu;此处输入代码段代码ee:MOV AH,4CHINT 21H;********************子程序代码query_char proc nearcmp num,0jz qc_exitmov ah,0ahlea dx,recnameint 21hsub bh,bhmov bl,recname+1mov recname[bx+2],'$'scur 1sub ah,ahmov al,28dmul nummov bx,axmov ah,09lea dx,stu_array[bx].namesadd dx,2int 21hcrlflea dx,recnameadd dx,2mov ah,09int 21hlea di,recnameadd di,2lea si,stu_array[bx].namesadd si,1sub ch,chmov cl,recname+1cldrepz cmpsbjz qc_exit1crlfsub dh,dhmov dl,numqc_loop:sub ah,ahmov al,28dmul nummov si,axlea di,stu_array[si].namesadd di,2lea si,recnameadd si,1sub ch,chmov cl,recname+1cldrepz cmpsbjz qc_exit1dec dlcmp dl,0jz qc_exitjmp qc_loopqc_exit:scur 6altert mes1crlfqc_exit1:mov ah,01mov dl,0ahint 21hret;**********************insert proc nearinc numscur1 0altert mes7scur 1altert mes4sub bh,bhmov bl,numbindec bxcrlfmov ah,09lea dx,mesint 21hsub ah,ahmov al,28dmul nummov si,axscur 2mov ah,0ahlea dx,stu_array[si].namessub bh,bhmov bl,stu_array[si+1].namesmov stu_array[si+bx+2].names,'$' int 21hscur 3call decibinmov stu_array[si].maths,bxadd stu_array[si].total,bxscur 4call decibinmov stu_array[si].english,bxadd stu_array[si].total,bxscur 5call decibinmov stu_array[si].chinese,bxadd stu_array[si].total,bxmov bl,3mov ax, stu_array[si].totaldiv blsub ah,ahmov stu_array[si].avg,axretinsert endp;****************************scur1 0altert mes5crlfmov ah,09lea dx,mesint 21hsno:sub dh,dhmov dl,numaltert mes3call decibinq:cmp dx,0jz errorcmp bx,dxjz idec dxcmp dx,0jz errorjmp qi:sub ah,ahmov al,28dmul dlmov si,axscur 1mov ah,09lea dx,stu_array[si].namesadd dx,2int 21hcrlfscur 2bindec stu_array[si].mathscrlfscur 3bindec stu_array[si].englishcrlfscur 4bindec stu_array[si].chinesemov ah,1mov dl,0ahint 21hjmp q_exiterror:crlfmov ah,09lea dx,mes1int 21hcrlfmov ah,1mov dl,0ahint 21hq_exit:retquery endp;********************************** modify proc nearscur1 0altert mes6crlfmov ah,09lea dx,mesint 21hsno1:sub dh,dhmov dl,numaltert mes3call decibinq1:cmp dx,0jz error1cmp bx,dxjz i1dec dxcmp dx,0jz error1jmp q1i1:sub ah,ahmov al,28dmul dlmov si,axscur 1mov ah,0ahlea dx,stu_array[si].namesint 21hsub bh,bhmov bl,stu_array[si+1].namesmov stu_array[si+bx+2].names,'$'scur 2call decibinmov stu_array[si].maths,bxadd stu_array[si].total,bxscur 3call decibinmov stu_array[si].english,bxadd stu_array[si].total,bxscur 4call decibinmov stu_array[si].chinese,bxadd stu_array[si].total,bxmov bl,3mov ax, stu_array[si].totaldiv blsub ah,ahmov stu_array[si].avg,axjmp m_exiterror1:crlfmov ah,09lea dx,mes1int 21hcrlfmov ah,1mov dl,0ahint 21hm_exit:retmodify endp;*********************************** score_analysis proc nearsub ch,chmov cl,nummov dx,cxcmp cx,0jz s_aexitloop1: ;mathscall loop2loop loop1scur1 0altert mes9scur 1bindec num1crlfscur 2bindec num2crlfscur 3bindec num3crlfscur 4bindec num4crlfscur 5bindec num5crlfmov num1,0mov num2,0mov num3,0mov num4,0mov num5,0;**************************sub ch,chmov cl,nummov dx,cxcmp cx,0jz s_aexitloop5: ;englishcall loop3loop loop5scur1 6altert mes10scur 7bindec num1crlfscur 8bindec num2crlfscur 9bindec num3crlfscur 10bindec num4crlfscur 11bindec num5crlfmov num1,0mov num2,0mov num3,0mov num4,0mov num5,0;******************************sub ch,chmov cl,nummov dx,cxcmp cx,0jz s_aexitloop6: ;chinesecall loop4loop loop6scur1 12altert mes11scur 13bindec num1crlfrank proc nearscur1 0altert mes17cmp num,0jz r_exit1mov bx,0sub ch,chmov cl,nummov si,0xch:add si,28dadd bx,2mov ax,stu_array[si].totalmov sum[bx],axloop xchsub bh,bhmov bl,numfmax1:inc scuinc ranknumcall fmaxdec bxjnz fmax1jmp r_exitr_exit1:scur 2altert mes12jmp r_exit0r_exit:mov bx,0sub ch,chmov cl,numxch1:add bx,2mov ax,0mov sum[bx],axloop xch1mov scu,1mov ranknum,0r_exit0:mov ah,01mov dl,0ahint 21hretrank endp;*****************************fmax proc nearpush bxsub ah,ahmov cl,nummov ax,summov bx,2mov si,0 ;偏移地址初始为0,放在si s:cmp ax,sum[bx]jb ajmp ba:mov ax,sum[bx];mov si,bx ;记录值大的偏移地址b:add bx,2loop smov ax,sum[si]mov max,axsub bh,bhmov bl,2mov ax,sidiv blmov maxnum2,axmov bx,siscur1 scubindec maxnum2scur2 scubindec maxsub ah,ahmov al,14dmul blmov bx,axscur sculea dx,stu_array[bx].namesadd dx,2mov ah,09int 21hscur3 scubindec ranknumcrlfmov sum[si],0pop bxretfmax endp调试过程使用说明:根据界面输入字母即可调用全部功能总结:这学期通过学习汇编程序设计,使我认识到它是计算机语言里的第一个语言。