用汇编语言实现班级分数统计

合集下载

汇编语言分段统计学生成绩

汇编语言分段统计学生成绩

汇编语言分段统计学生成绩2009年12月22日星期二12:33data segmentscore db 30,46,40,50,60,70,80,100,90,67,70,99,59,87,63,88,92,100 ;18个学生的分数score_under60 db 0 ;60以下的人数score_60to69 db 0 ;60到69的人数score_70to79 db 0 ;70到79的人数score_80to89 db 0 ;80到89的人数score_90to99 db 0 ;90到99的人数score_100 db 0 ;100的人数score_mes1 DB 'the scores below 60 have:$'score_mes2 DB 'the scores 60 to 69 have:$'score_mes3 DB 'the scores 70 to 79 have:$'score_mes4 DB 'the scores 80 to 89 have:$'score_mes5 DB 'the scores 90 to 99 have:$'score_mes6 DB 'the piont of 100 have:$'data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axxor ax,axmov cx,18 ;循环18次lea bx,score ;compare:cmp byte ptr [bx],60 ;与60比较jl under60 ;存放低于60的jmp is60to69 ; 存放高于60的is60to69:cmp byte ptr [bx],70 ;与70比较jl _60to69 ;存放60到69之间的jmp is70to79 ;存放等于和高于70的is70to79:cmp byte ptr [bx],80 ;与80比较jl _70to79 ;存放70到79之间的jmp is80to89 ;存放等于和高于80的is80to89:cmp byte ptr [bx],90 ;与90比较jl _80to89 ;存放80到89之间的jmp is90to99 ;存放等于和高于90的is90to99:cmp byte ptr [bx],100 ;与100比较jl _90to99 ;存放90到99之间的jz equal100 ;存放100分的\under60: ;如果低于60add score_under60,1 ;就调用_under60函数jmp con_60to69: ;如果在60到69之间add score_60to69,1 ;就调用_60to69函数jmp con_70to79: ;如果在70到79之间add score_70to79,1 ;就调用_70to79函数jmp con_80to89: ;如果在80到89之间add score_80to89,1 ;就调用_80to89函数jmp con_90to99: ;如果在90到99之间add score_90to99,1 ;就调用_90to99函数jmp conequal100: ;如果等于100add score_100,1 ;就调用_100函数con:lea bx,[bx+1]loop comparemov ax,4f02h ;以下三段代码目的是清屏作业,否则会出现乱码的情况mov bx,105hint 10hdisplay: ;输出lea dx,score_mes1mov ah,9Hint 21hmov dl,score_under60 ;输出60以下的人数add dl,30hmov ah,2int 21hmov ah,2 ;换行输出下一个数据mov bh,0mov dh,1mov dl,0int 10hlea dx,score_mes2mov ah,9Hint 21hmov dl,score_60to69 ;输出60到69的人数add dl,30hmov ah,2int 21hmov ah,2 ;换行输出下一个数据mov dh,2mov dl,0int 10hlea dx,score_mes3mov ah,9hint 21hmov dl,score_70to79 ;输出70到79的人数add dl,30hmov ah,2int 21hmov ah,2 ;换行输出下一个数据mov bh,0mov dh,3mov dl,0int 10h*lea dx,score_mes4mov ah,9hint 21hmov dl,score_80to89 ;输出80到89的人数add dl,30hint 21hmov ah,2 ;换行输出下一个数据mov bh,0mov dh,4mov dl,0int 10hlea dx,score_mes5mov ah,9hint 21hmov dl,score_90to99 ;输出90到99的人数add dl,30hmov ah,2int 21hmov ah,2 ;换行输出下一个数据mov bh,0mov dh,5mov dl,0int 10hlea dx,score_mes6mov ah,9hint 21hmov dl,score_100 ;输出100的人数add dl,30hmov ah,2int 21hmov ah,2 ;换行输出下一个数据mov bh,0mov dh,6mov dl,0int 10hmov ah,4ch ;返回DOSint 21hcode endsend start|。

汇编语言求学生总成绩

汇编语言求学生总成绩

西南交通大学信息科学与技术学院2008年7月实验三求学生总成绩一、实验要求从键盘上输入若干个学生(总数不超过500人)的姓名(英文字母不超过8个)及其5门课程的总成绩(百分制),输出任意名次的学生的姓名及其5门课程的总成绩(按总成绩高低排序,总成绩最高者为第一名)。

(1)画出满足上述要求的流程图(2)写出源程序及相应代码(3)写出满足上述要求的实验报告二、实验步骤1、创建源程序文件和工程文件。

2、输入源程序,并保存到源程序文件。

3、对源程序进行编译,查找并修改错误。

4、建立工程,运行工程文件。

5、对工程文件进行调试。

三、实验分析及流程图程序分析:先从键盘输入总的学生数,然后输入学生姓名,成绩。

用插入排序和名次索引数组,每输入一个学生的成绩(输入后转化为2进制)后就进行排序。

比如输入第i个学生的成绩后,将第i个学生的成绩与第0到i-1个学生的成绩一次比较,如果前者大,则后者的名次自加1,用一个变量point来记录总的自加数,比较完后第i个学生的名次就是总个数-point。

学生的姓名和成绩都输入完毕后,从键盘输入名次,从名次数组中查找与之一样的,返回下标,若没有,返回-1。

然后将返回下标对应的姓名输出,对应的成绩转化为字符串后输出。

程序流程图:子程序inone流程图jargeproc 流程图: cz 流程图:主程序流程图:exchange流程图:程序源代码: data segmentmsg1 db "Please input the number of the students:$" student db 500 dup(10,?,10 dup(0)) scole dw 500 dup(0)list dw 500 dup(0)msg2 db "Please input the name of the student:$" msg3 db "Please input the scole of the student:$" enmsg db 0ah,0dh,0ah,0dh,'$'msg4 db "Please input the mingci:$"scol db 0,0,0,'$'result db "No found!$"num dw 0point dw 0point1 dw 0data endsstack segment para stackdb 40h dup(0)stack endscode segmentassume cs:code,ss:stack,ds:datastart:mov ax,datamov ds,axlea dx,msg1mov ah,09hint 21hcall numprocmov num,bxmov cx,0mov di,cxlop:lea dx,enmsgmov ah,09hint 21hlea dx,msg2mov ah,09hint 21hmov di,cxcall nameprocadd cx,08hlea dx,enmsgmov ah,09hint 21hlea dx,msg3mov ah,09hint 21hcall numprocxor ax,axmov ax,point1mov si,axadd si,simov bx,numcmp bx,point1jz next1jmp lopnext1:lea dx,enmsgmov ah,09hint 21hlea dx,msg4mov ah,09hint 21hmov di,cxlea dx,enmsgmov ah,09hint 21hcall exchangexor ax,axmov ax,cxmov bl,8mul blmov di,axlea dx,student[di]mov ah,09hint 21hlea dx,scolmov ah,09hint 21hjmp exitnext2:lea dx,resultmov ah,09hint 21hexit:mov ah,4chint 21h numproc procpush axpush cxpush dxmov bx,0lop1:mov ah,01hint 21hcmp al,0dhjz lop2xor ah,ahsub ax,30hmov cx,axmov ax,bxmov ch,10hmov bx,axadd bx,cxjmp lop1lop2:pop dxpop cxpop axretnumproc endp jargeproc procpush axpush bxpush cxxor ax,axxor bx,bxmov cx,point1mov si,cxadd si,simov ax,scole[si]mov bx,0mov point,0lop3:cmp cx,bxjz lop4mov si,bxadd si,sicmp ax,scole[si]js lop5mov di,bxinc list[bx+di]inc pointlop5:inc bxjmp lop3lop4:mov bx,cxsub bx,pointmov list[si],bx tpop dipop sipop cxpop bxpop axretjargeproc endpcz procxor cx,cxdec nummov cx,numlop6:mov si,cxadd si,sicmp list[si],bxjz nextsub cx,1js nextjmp lop6next:retcz endpexchange procpush axpush bxxor ax,axmov si,cxadd si,simov ax,scole[si]mov bl,10hdiv bladd ah,30hmov scol+2,ahxor ah,ahadd al,30hmov scol,almov scol+1,ahpop bxpop axretexchange endpinone procpush axllp:mov ah,01hint 21hcmp al,0dhinc dijmp llpexiti:mov student[di],byte ptr '$' inc dipop axretinone endpcode endsend start四、总结虽然这次实验借助了同学的帮助,但是从程序流程中和代码中还是学会了如何利用汇编语言的指令去实现分支结构,循环结构等等。

用汇编语言实现班级分数统计

用汇编语言实现班级分数统计

DATA SEGMENTASK DB 'the number of students',10,13,'$'ANSWER DB 4,'?',4 DUP('?') ;存入学生数,最大3个字符(加enter),ANSWER+1为实际字符数,ANSWER+2为第一个字符串SHURU DB 'Input scores:$'HuanHang DB 10,13,'$' ;换行W DW 100 DUP('?') ;两位组合BCD码连续存放SCORE DB 100 DUP('?') ;两位组合BCD码间隔存放ZUIDA DB 'The highest score is $'PINJUN DB 'The average score is $'MAXSCORE DW ? ;存入最大值AVERAGES DW ? ;存入平均数DATA ENDSSTACK SEGMENT STACKDB 100 DUP('?')STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXCALL NUMBER ;调用子程序,实现输入学生数的功能CALL INPUT ;调用子程序,实现输入每位学生分数的功能CALL MAX ;调用子程序,实现找出最高分的功能CALL AVERAGE ;调用子程序,实现求出班级平均分的功能MOV AH,4CH ;返回DOSINT 21HNUMBER PROC ;输入学生数入口参数:无出口参数:DXLEA DX,ASK ;在屏幕上显示“How many students”MOV AH,9INT 21HLEA DX,ANSWER ;键盘输入学生数MOV AH,10INT 21HMOV CL,[ANSWER+1] ;得出学生数(将输入的数十位乘10加个位),存入寄存器DX CL存储实际字符数(学生数)MOV CH,0MOV BX,10LEA SI,[ANSWER+2] ;第一个字符(十位)MOV DX,0L1:MOV AL,[SI]AND AX,000FHPUSH CXDEC CXCMP CX,0JE L2MUL10:MUL BLLOOP MUL10L2:ADD DX,AXPOP CXINC SILOOP L1RETNUMBER ENDPINPUT PROC ;子程序:实现学生分数的输入入口参数:DX,出口参数:以W为首的连续单元内的数据MOV CX,DX ;调入学生数PUSH DX ;学生数入栈保护LEA SI,WLEA DI,SCORE ;出口参数MOV DX,0LEA DX,HuanHang ;屏幕上换行MOV AH,9INT 21HLEA DX,SHURU ;在屏幕上显示“INPUT SCORES:”MOV AH,9INT 21HLEA DX,HuanHang ;屏幕上换行MOV AH,9INT 21HQQ: MOV AH,1 ;键盘连续写入每位学生分数,并转为二进制数后存入以W和SCORE为首的连续单元中INT 21HSUB AL,30HROL AL,4MOV BL,ALMOV AH,1INT 21HSUB AL,30HOR BL,ALMOV BH,0MOV [SI],BXINC SI ;偏移地址加一,组合BCD码的连续存放MOV [DI],BXINC DIINC DI ;实现组合BCD码的间隔存放MOV DL,' ' ;每输入一个二位分数,输出一个空格MOV AH,2INT 21HLOOP QQPOP DX ;学生数出栈,保护现场RETINPUT ENDPMAX PROC ;子程序:实现最高分的查找入口参数:DX,以W为首的连续单元内的数据出口参数:存入MAXSCORE的数据PUSH DX ;学生数入栈保护PUSHFLEA SI,WMOV CX,DXLEA SI,WMOV AX,[SI] ;从W为首的连续单元中取出4位,存入AX寄存器以便比较大小MOV BL,AL ;将BL设为初始最大值AGAIN: MOV AX,[SI] ;连续读取,比较,出现较大值时存入BL,实现最大值寻找INC SICMP AL,AHJAE NEXTCMP BL,AHJAE NEXTMOV BL,AHNEXT: LOOP AGAINPUSH CXPUSH DXMOV BH,0LEA DX,HuanHang ;屏幕上换行MOV AH,9INT 21HMOV MAXSCORE,BX ;将最大值存入存储单元MAXSCORE中MOV DL, ZUIDA ;在屏幕上显示:“Highest score is”MOV DX,OFFSET ZUIDAMOV AH,09HINT 21HPOP DXPOP CX ;保护现场MOV AL,BYTE PTR MAXSCORE ;将最大值从存储单元MAXSCORE中取出并在屏幕上显示MOV CL,10HDIV CLMOV BH,AHMOV DL,ALADD DL,30HMOV AH,02HINT 21HMOV DL,BHADD DL,30HMOV AH,02HINT 21HPOPFPOP DX ;学生数出栈,保护现场RETMAX ENDPAVERAGE PROC ;子程序:实现求平均数入口参数:DX、以SCORE为首的连续单元内的数据出口参数:存入AVERAGES的数据LEA DI,SCOREMOV CX,DXCALL CHU2PUSH BPMOV BP,0REPECT: MOV AX,[DI] ;将所有分数求和CALL ZuanHuanADD BP,AXINC DIINC DILOOP REPECTMOV AX,BPPOP BPCALL ZHENGCHULEA DX,HuanHang ;屏幕上换行MOV AH,9INT 21HLEA DX,PINJUN ;在屏幕上显示“Average score is”MOV AH,9INT 21HMOV BH,0MOV AVERAGES,BX ;将取整后的平均分存入存储单元AVERAGESMOV AL,BYTE PTR AVERAGES ;将取整后的平均分显示到屏幕MOV AH,0DIV CLMOV DL,ALMOV BL,AHADD DL,30HMOV AH,02HINT 21HMOV DL,BLADD DL,30HMOV AH,02HINT 21HPOP BPRETFAVERAGE ENDPZuanHuan PROC ;组合BCD码转换为二进制数入口参数:AX 出口参数:AXPUSH CXPUSHFMOV AH,ALMOV CL,4SHR AH,CLAND AL,0FHAADPOPFPOP CXRETZuanHuan ENDPCHU2 PROC ;求出不小于“学生数/2”的整数,和平均分余数比较达到四舍五入效果入口参数:DX 出口参数:BPPUSH DXMOV AX,DXMOV DL,2DIV DLCMP AH,1JB S1INC ALS1:MOV AH,0MOV BP,AXPOP DXRETCHU2 ENDPZHENGCHU PROC ;四舍五入求平均分入口参数:AX,DL 出口参数:BLDIV DLMOV BL,ALMOV AL,AHMOV AH,0CMP AX,BPJB S2ADD BL,1S2:RET ZHENGCHU ENDPCODE ENDSEND BEGIN。

编写一个程序统计某班3门课程的成绩

编写一个程序统计某班3门课程的成绩

编写一个程序统计某班3门课程的成绩,他们是VB ,Access , Photoshop。

先输入学生人数,然后按编号从小到大的顺序依次输入学生成绩,最后统计每门课程全班的总成绩和平均成绩以及每个学生课程的总成绩和平均成绩。

/* Note:Your choice is C IDE */#include"stdio.h”void main(){int a[3][50],i,j,k;/*定义变量i,j,为整型,定义二维数组,i表示科目,j表示学生人数,k表示输入的学生人数*/float v[3],s=0,average,c[3],b[50];/*float:定义变量average,单精度实型,定义一维数组的长度,s赋初值0,*/printf(”input the students’ number:”);scanf(”%d",&k);printf(”input the score\n");/*输出函数*/for(i=0;i〈3;i++){/*此循环为计算每门课程的总成绩和平均分*/for(j=0;j<k;j++){scanf("%d",&a[i][j]);s=s+a[i][j];}v[i]=s/k;c[i]=s;s=0;}average=(v[0]+v[1]+v[2])/3;/*三门课程的平均成绩*/for(j=0;j〈k;j++){/*此循环为计算每位同学的总成绩和平均分*/for(i=0;i〈3;i++){s=s+a[i][j];}b[j]=s/3;printf(”输出%d号同学的总成绩和平均成绩:%。

2f %。

2f\n\n”,j,s,b[j]);s=0;}printf(”VB的总成绩 %.2f\n平均成绩%。

2f\n\n\nAccess的总成绩%.2f\n平均成绩%.2f\n\n\nPhotoshop的总成绩 %。

2f\n平均成绩 %.2f\n\n\n”,c[0],v[0],c[1],v[1],c[2],v[2]);printf(”三门课程的平均成绩:%.2f\n”,average);}/*我调试过了的*/。

汇编语言课程设计学生成绩管理系统

汇编语言课程设计学生成绩管理系统

汇编语言课程设计课题名称:学生成绩管理系统小组成员:班级:指导教师:日期: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六、自我评价:本次大作业做的是显示学生名次表,重要考察的是复杂程序设计中,采用模板块结构可以划分功能,分解程序,在各个程序之间存在参数传递问题,强调了传递方式和嵌套调用层次的运用。

汇编语言——学生分数管理程序

汇编语言——学生分数管理程序

;编写程序,从键盘输入学生百分制的分数按<60,60~69,70~79,80~89,90~99和100共六档进行分类,统计出每档的个数及总数。

;分类后的结果需要转换成ASCⅡ码并在屏幕上显示,将ASCⅡ码的转换程序写成子程序供调用。

DATA SEGMENTMES1 DB 'SCORE[<60] :$'MES2 DB 'SCORE[<60-69] :$'MES3 DB 'SCORE[<70-79] :$'MES4 DB 'SCORE[<80-89] :$'MES5 DB 'SCORE[<90-99] :$'MES6 DB 'SCORE[=100] :$'MES7 DB 'TOTAL NUMBER :$'END_SIGN DB 0TOTAL DB 0S1 DB 0S2 DB 0S3 DB 0S4 DB 0S5 DB 0S6 DB 0DATA ENDSSTACK1 SEGMENT stackDB 50 DUP(0)STACK1 ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATA,SS:STACK1MOV AX,DATAMOV DS,AXMOV AX,STACK1MOV SS,AXRP:CALL INPUTCMP END_SIGN,'#' ;结束本次输入后,根据end_sign是否为#结束输入JZ QUITCALL CLASSIFYJMP RPQUIT:CALL PRINTMAIN ENDP;***********************************************************;出口参数为bxPUSH CXPUSH DXMOV BX,0NEWCHAR:MOV AH,01HINT 21HMOV END_SIGN,ALSUB AL,30HJL EXITCMP AL,09DJG EXITCBWXCHG AX,BXMOV CX,10DMUL CXXCHG AX,BXADD BX,AXJMP NEWCHAREXIT:POP DXPOP CXPOP AXRETINPUT ENDP;************************************************************* CLASSIFY PROC NEARPUSH AXCMP BL, 60JL FIVE ;<60转FIVE入口处理CMP BL, 70JL SIX ;<70转SIX入口处理CMP BL, 80JL SEVEN ;<80转ESVEN入口处理CMP BL, 90JL EIGHT ;<90转EIGHT入口处理CMP BL, 100JL NINE ;<100转NINE入口处理CMP BL, 100JE TEN ;=100转TEN入口处理JMP NEXTFIVE: MOV AL, [S1]ADD AL,01 ;S5存入<60的个数DAAMOV [S1], ALADD AL,01 ;S6存入60-69的个数DAAMOV [S2], ALJMP NEXTSEVEN: MOV AL, [S3]ADD AL,01 ;S7存入70-79的个数DAAMOV [S3], ALJMP NEXTEIGHT: MOV AL, [S4]ADD AL,01 ;S8存入80-89的个数DAAMOV [S4],ALJMP NEXTNINE: MOV AL,[S5]ADD AL,01 ;S9存入90-99的个数DAAMOV [S5],ALJMP NEXTTEN: MOV AL,[S6]ADD AL,01 ;S10存入=100的个数DAAMOV [S6],ALNEXT:MOV AL,[TOTAL]ADD AL,01DAAMOV [TOTAL],AL ;TOTAL保存分类数据的个数POP AXRETCLASSIFY ENDP;************************************************************** PRINT PROC NEARCALL CRLFMOV DX,OFFSET MES1 ;显示分类的结果MOV AH, 09HINT 21HMOV AL,[S1]CALL DISPCALL CRLFMOV DX, OFFSET MES2MOV AH,09HINT 21HMOV AL,[S2]MOV DX,OFFSET MES3MOV AH,09HINT 21HMOV AL,[S3]CALL DISPCALL CRLFMOV DX,OFFSET MES4MOV AH,09HINT 21HMOV AL,[S4]CALL DISPCALL CRLFMOV DX,OFFSET MES5MOV AH,09HINT 21HMOV AL,[S5]CALL DISPCALL CRLFMOV DX,OFFSET MES6MOV AH,09HINT 21HMOV AL,[S6]CALL DISPCALL CRLFMOV DX,OFFSET MES7MOV AH,09HINT 21HMOV AL,[TOTAL]CALL DISPMOV AH,4CHINT 21HRETPRINT ENDP;****************************************************DISP PROC NEAR ;入口参数为ax,假定人数不大,处理alPUSH BXPUSH CXPUSH DXMOV CL,4DMOV BL,ALMOV AL,BLSHR AL,CLAND AL,0FHMOV AH,02HINT 21HMOV AL,BLAND A L,0FHADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP DXPOP CXPOP BXRETDISP ENDP;********************************************************* CRLF PROC NEARPUSH AXPUSH DXMOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HPOP DXPOP AXRETCRLF ENDP;******************************************************* CODE ENDSEND MAIN。

汇编语言课程设计---学生成绩管理程序

汇编语言课程设计---学生成绩管理程序

郑重声明:本篇文档为从百度文库中下载的经过原文修改后的!目录第一章设计课题概述 (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。

系统分析 (3)1.1系统开发背景 (3)1。

2初步调查与可行性分析 (3)1。

3系统目标 (3)1.4系统流程图 (4)2. 系统总体设计 (5)2.1总体结构图分析 (5)2。

2总体结构图 (6)2。

3总体数据结构 (6)3、详细设计 (7)3。

1 程序功能设计 (7)3.2 设计思路 (7)4、系统测试 (9)4。

1测试方案 (9)4。

2测试用例及测试结果 (9)4。

3软件可靠性 (11)5、软件使用说明书 (12)6、设计总结 (13)参考文献 (14)致谢 (15)附录(源代码) (16)1。

系统分析1.1系统开发背景学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。

汇编语言学生成绩管理系统程序

汇编语言学生成绩管理系统程序

;此版本解决输入分数时输入错不能更改的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。

汇编语言学生成绩管理系统报告

汇编语言学生成绩管理系统报告

0 ;修改时用的,判定是否找到相应学号 5,?,5 dup(0) ;为了使输入的分数也能输入错误的情况下回
退光标进行修改而用的 10,?,10 dup(0) ;删除时存储学号用的 0 ;总分数的高位 0 ;总分数的低位 0 ;学生的人数 0 ;平均成绩 0 ;小于 60 0 ;60 到 70 0 ;70 到 80 0 ;80 到 90 0 ;90 到 99
<7>
con
db 48 ;结构字段的大小,为常数
stu man 100 dup(<>) ;学生信息
(2) make_c proc 流程图:
<8>
make_c子程序
系统显示界面
1号系统调用 接收选择字符
是否为i
N
是否为l
N
是否为o
N
是否为s
N
是否为d
N
是否为m
Y
Y
Y 清屏,进入 插入界面
N 接收字符 并判断是否为c
<4>
3. 程序最终效果
主界面: 自己运行程序截图去吧
Insert(i)插入学生信息: 自己运行程序截图去吧
<5>
List(l)显示学生成绩: 自己运行程序截图去吧
Order(o)以分数进行从高到底排序: 自己运行程序截图去吧
Statistic(s)统计学生成绩分布: 自己运行程序截图去吧
Delete(d)删除学生信息(成功:Succesfully,失败:Failed): 自己运行程序截图去吧
输入姓名字符串并 保存
输入班级字符串 并保存
Call d_b 10转2进制子程序
返回到bx中
总分数低字加bx 高字加CF位

汇编语言成绩统计系统的实现

汇编语言成绩统计系统的实现

一、软件背景介绍学生成绩管理系统设计与实现学生成绩管理系统设计与实现摘要学生成绩管理系统是学校不可或缺的一个组成部分,随着计算机技术的逐渐发展,计算机在教育系统中的应用得到了巨大的发展。

教务管理正在逐步迈向管理信息现代化。

但是我国的教务管理信息化水平还处在初级阶段,主要表现在对学生的成绩管理、学生的课程管理还是采用原有的人工管理方式。

学校的规模不断扩大,学生数量急剧增加,有关学生的各种数据也成倍增长。

面对庞大的信息量,这时的人工管理几乎无法实现,在这种情况下用数据库进行管理变的尤为必要,这可以发挥计算机的优势,就需要有教务管理系统来提高学生成绩管理工作的效率.通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量和减少人为的错误。

进行数据库设计首先必须准确了解也分析用户需求(包括数据和处理)。

目的是为学生成绩管理数据库系统的设计打下牢牢的基础,是数据库开发的重要文件依据,主要为数据库设计人员使用,是用户和系统分析员的项目依据文件。

作为“地基”的需求分析是否做得充分与准确,它决定了在其上构建数据库大厦的速度和质量。

需求分析做得不好,甚至会导致整个数据库设计返工重做。

成绩管理系统是针对高等院校的学生学籍管理,因此此系统的用户应包括系统管理员和学生。

主要涉及系部信息、班级信息、学生信息、课程信息和成绩等多种数据信息。

经走访调查得出教务员有以下要求:(1)管理员、教师和学生登录后可以改自己的密码;(2)管理员、教师和学生可以查询课程信息;(3)管理员可以删除学生信息、教师信息、登录用户信息,还可以查询和删除学生成绩,添加、删除课程信息;(4)管理员批量导入、导出数据;(5)教师可以录入、修改成绩,批量导出数据;(6)学生可以查询成绩。

不过此次我做的系统只针对学生成绩管理实现的对学生成绩的统计,主要运用汇编语言来完成各个模块的应用,先以内存存储单元中读取数据(假设的学生成绩数据),将成绩及姓名放在两个存储单元,然后通过循环,地址的的增加,实现姓名与成绩的对应输出,其中有冒泡排序的实现及十进制显示输出,还有ABCDE等级的统计及附加功能等级的判断。

汇编软件实验学生成绩输入

汇编软件实验学生成绩输入

微机原理实验报告实验任务:一个学生的信息包括姓名、班级、学号(班内序号)、成绩。

试编写程序实现以下功能:(1)能录入学生成绩(十进制形式);提示:输入形如:tom 205 16 95回车,每名学生用一行;选择一个特殊符表示输入结束(2)能按要求(如班内序号或成绩)进行排序显示;(3)能统计平均成绩;(4)能按分数段统计人数,不及格、60~70、70~80、80~90、90~100各分数段的人数。

实验实现过程与方法:将输入的学生信息保存在一个一维数组中,在数据段中变现为:STUDENT DB 256 DUP(' ');存储学生信息在信息的存储过程中直接把输入的字符串存储至STUDENT中,姓名,班级,班内序号,成绩各属性之间以空格分开,来标识不同的属性。

每一个功能都用一个子程序来完成,在主程序中直接调用实现相应的功能。

所以主程序为:CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV SP,100HCALL INPUT_PRO ;调用输入子程序CRMOV DX,OFFSET MESSAGEMOV AH,09HINT 21HCALL DISPLAY_PRO ;显示学生输入信息CRCALL NUMBERSORT_PRO ;按学号升序排列CALL SUM_PRO ;求出成绩总和CALL GRADESORT_PRO ;按成绩降序排列CALL AVERAGE_PRO ;调用平均成绩子程序,并以字符串显示出来CALL THEGRADE_PRO ;各个成绩段的人数统计MOV AH,4CHINT 21HCODE ENDSEND START其中CR是一个宏,用来实现回车换行的功能,INPUT_PRO实现成绩等学生信息的输入并存储起来,DISPLAY_PRO用来在窗口显示学生的信息,NUMBERSORT_PRO 是按学生班内序号由小到大排序,GRADESORT_PRO是按学生成绩由大到小排序,AVERAGE_PRO是求出学生的平均成绩并以字符串的形式显示出来,THEGRADE_PRO 则是最后用来统计各个分数段的学生的人数。

基于汇编语言学生成绩管理系统方案

基于汇编语言学生成绩管理系统方案
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,'$'
设计要求
学习如何用汇编语言进行数据处理。
设计分析
1.总体结构
整个程序采用主程序调用子程序的方法。主程序完成菜单的显示,子程序完成一个独立功能方法的实现。各子程序的实现方法简要描述如下:
1)设计INSERT(录入)子程序,先打开文件SCORE.TXT,并置文件指针到文件尾,然后调用GET_REC子程序接受用户的输入,再把用户的输入写入文件,最后关闭文件返回主程序。
JNZ B ;不同则转B
INC SI
INC D
LOOP C
(5) MODIFY子程序
MODIFY子程序的功能是修改记录。
先保护现场,然后清除右上部分的记录输入区域,接着打开文件。
用GET_REC子程序获取输入的记录信息,并存入BUFFER1中。从打开的文件中读取一个记录的容(23个字节)放在BUFFER2中。
(7)LIST子程序
LIST子程序的作用是显示文件中的记录。
首先清除记录输入区和显示区域。然后显示记录字段的标题。打开文件,保留文件句柄。读取一条记录的容放在BUFFER1中,并判断是否到了文件末尾,如果不是,则显示这条记录。循环读取直到文件结束。最后关闭程序,恢复现场。

学生成绩管理系统汇编语言

学生成绩管理系统汇编语言

摘要管理信息系统正在向着网络化、智能化和集成化等趋势发展。

学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。

它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要。

学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求。

本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化。

达到提高学生成绩管理效率的目的。

与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。

彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理。

计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代。

人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。

检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。

同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。

关键字:学生成绩管理,插入,查找,删除,退出,修改;目录1. 系统分析 (3)1.1系统开发背景 (3)1.2初步调查与可行性分析 (3)1.3系统目标 (3)1.4系统流程图 (4)2. 系统总体设计 (5)2.1总体结构图分析 (5)2.2总体结构图 (6)2.3总体数据结构 (6)3、详细设计 (7)3.1 程序功能设计 (7)3.2 设计思路 (7)4、系统测试 (9)4.1测试方案 (9)4.2测试用例及测试结果 (9)4.3软件可靠性 (11)5、软件使用说明书 (12)6、设计总结 (13)参考文献 (14)致谢 (15)附录(源代码) (16)1. 系统分析1.1系统开发背景学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。

汇编语言综合实验 --- 学生成绩排序(单链表实现)

汇编语言综合实验 --- 学生成绩排序(单链表实现)
②按学生的总成绩由高到低进行排序建立链表。
这一部分任务是按学生总成绩由高到低进行排序。采用单链表方式,给数据元素的链指针LINK字段装填数据,使LINK字段指向它的后继数据元素。步骤如下:
Ⅰ.初始时,数组元素的每个LINK字段值为0,表示数组元素没有被选中。扫描数组元素的SUM字段,从中找到第一个最大的数,将这个数组元素设置为链表的头,保存这个数组元素的位移量,并将其LINK字段设置为1,标记这个数组元素已被选中但尚未装填链指针。
重复上述步骤直到该结构体类型数组中的最后一个节点LINK字段置为1,该节点即为单链表的链尾。
③遍历单链表,即对学生成绩信息按总成绩由高到低输出。
首先将单链表的头指针赋值给BX,依次循环COUNT(学生人数)次输出每一个数组元素的值,每次输出结束后,将BX的值加上TYPE S_ARRAY(即加16字节),BX指向下一个数组元素的首地址。
②建立单链表,即完成对学生成绩信息的降序排列。
首先从所有数组元素中找出总成绩最大的一项,将该数组元素作为单链表的头指针,保存在DX中,同时将LINK字段赋值为1;
其次,从LINK字段为0的数组元素中找到总成绩最大的一项,将该数组元素的偏移地址作为前一节点的LINK字段值,同时将该节点的LINK字段值置为1;
图1-1程序主界面:
图1-2程序二级菜单界面:
2.排序功能的实现:
图1-2输入学生成绩界面:
图1-4按总分排序输出学生成绩信息:
3.设计思路:
(1)数据定义:
一个数据元素(一个学生的数据项)应该为一个结构类型,定义如下:
STUDENT STRUC;定义学生结构体
LINK DW 0;单链表指针,指向下一个节点偏移地址
Ⅰ.将链表的头元素的位移量送到BX寄存器。

用汇编语言编写统计各个分数段人数的程序

用汇编语言编写统计各个分数段人数的程序

用汇编语言编写统计各个分数段人数的程序一、实验目的1、进一步熟悉分支、循环程序设计的思路和方法2、掌握各类子程序的设计方思路和技巧二、实验内容设数据段有20个学生的单科成绩(百分制),请按照小于60,60-69,70-79,80-89,90-99,100这6个档次编程统计人数。

三、程序扩展该程序可以作为一个建立学生成绩档案的子程序,在之基础上加以改进,通过增加统计学生各门成绩、成绩排名等一系列子程序,可以建立学生档案。

四、设计思路(参考流程图)五、附录:1、程序清单如下:SSEG SEGMENT PARA STACK 'stack'DW 100H DUP(0);初始化堆栈大小为100SSEG ENDSDSEG SEGMENTBUF DW 52,53,32,54 ,66,54,71,65,57,98DW75,82,51,52,92,55,100,56,61,89COUNTEQU$-BUF;COUNT的值为BUF所占的字节数STR1DB'0-59:','$'STR2DB'60-69:','$'STR3DB'70-79:','$'STR4DB'80-89:','$'STR5DB'90-99:','$'STR6DB'100:','$'RESDW20 DUP(?);在存储区RES中设置15个初值为0的数据DSEG ENDS CSEG SEGMENTASSUMECS:CSEG, DS:DSEGMAIN PROC FAR;主程序入口MOV AX,DSEGMOV DS,AXSTART: MOV CX,COUNT/2+1;设计数器初值MOV DI,OFFSET RES;取RES的首址MOV SI,OFFSETBUF-2;取BUF的首址BEGIN: INCSIINC SI;修改SI指针DEC CX;设循环次数CXJZ OUTPUT;循环结束,则转OUTPUTMOV AX,[SI];取BUF中第一个数放到AX寄存器CMP AX,60;将AX中数据和60进行比较JB LOP1;小于60,则转LOP1CMP AX,70;否则,继续与70进行比较JB LOP2;小于70,则转LOP2CMP AX,80;否则,继续与80进行比较JB LOP3;小于80,则转LOP3CMP AX,90;否则,继续与90进行比较JB LOP4;小于90,则转LOP4CMP AX,100;否则,继续与100进行比较JB LOP5;小于100,则转LOP5JZ LOP6;等于100,则转LOP6LOP1: MOV BX,[DI]INCBXMOV [DI],BX;对小与60的数据计数,并把其放在RES的第一个字节中JMP;转到BEGINLOP2:MOV BX,[DI+2]INCBXMOV [DI+2],BX;对60-69的数据计数,并把其放在RES的第二个字节中JMPBEGIN;转到BEGINLOP3:MOV BX,[DI+4]INCBXMOV [DI+4],BXJMPBEGINLOP4:MOV BX,[DI+6]INCBXMOV [DI+6],BXJMPBEGINLOP5:MOV BX,[DI+8] INCBXMOV [DI+8],BX JMPBEGINLOP6:MOV BX,[DI+10] INCBXMOV[DI+10],BX中JMPBEGIN OUTPUT: LEA DX,STR1 MOV AH,9INT 21HCALL DATCHLEA DX,STR2MOV AH,9INT 21HADD DI,2CALL DATCHLEA DX,STR3MOV AH,9INT 21HCALL DATCHLEA DX,STR4MOV AH,9INT 21HADD DI,2CALL DATCHLEA DX,STR5;对70-79的数据计数,并把其放在RES的第三个字节中;转到BEGIN;对80-89的数据计数,并把其放在RES的第四个字节中;转到BEGIN;对90-99的数据计数,并把其放在RES的第五个字节中;转到BEGIN;对等于100的数据计数,并把其放在RES的第六个字节;转到BEGIN;取字符串STR1的首址;输出字符串STR1;取字符串STR2的首址;输出字符串STR2;取字符串STR3的首址;输出字符串STR3;取字符串STR4的首址;输出字符串STR4;取字符串STR5的首址INT 21H;输出字符串STR5ADD DI,2CALL DATCHLEA DX,STR6;取字符串STR6的首址MOV AH,9INT 21H;输出字符串STR6ADD DI,2CALL DATCHMOV AH,1INT 21HMOV AH,4CHINT 21HDATCH PROCPUSH DXPUSH CXPUSH BXPUSH AXXOR DX,DXMOV AX,[DI]MOV CX,10DIV CXMOV BX,DX MOV DL,AL ADD DL,30H MOV AH,2 INT 21H MOV DL,BL ADD DL,30H MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV DL,0DH MOV AH,2 INT 21H POP AXPOP BXPOP CXPOP DX RET;返回DOS;数值转换为ASCII码的子程序;回车换行DATCH ENDPMAIN ENDPCSEG ENDSEND MAIN2、运行结果如下:。

基于汇编语言学生成绩管理系统

基于汇编语言学生成绩管理系统

门生成绩管理零碎之相礼和热创作目录计划内容1计划目的2计划要求2计划分析2子程序分析6操纵阐明10程序代码11总结38参考文献39计划内容计划一个门生成绩管理程序,要求能完成以下功能: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所示NA ) List 流程图YNYNNY在大型的程序中,为了使程序明晰、可读性好,一样平常会大量运用宏和子程序,因而,充分了解这些宏和子程序,才能掌握程序的编制方法.本题中运用了下列宏,其作用如下: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 Co Ch',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 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 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,24int 10hendmnewline macro ;回车换行push axpush 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,2inc bxcmp bx,15jl iloopmov 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 cxpop bxendmgetin 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*25 mov 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 modifyn2: 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'jmp 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 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,9b: 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 diloop cmov [buffer2+23],'$'show_item buffer2mov ah,3ehint 21hpop dxpop bxpop axretquery endpmodify proc near ;修正记录push axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dhint 21hmov bx,axmov handle,axcall get_rec ;读取输入内容放在buffer1read: mov dx,offset buffer2mov cx,23录内容放在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 buffer1录int 21hmov ah,3ehint 21hjmp exit2 exit1: set_p2show err1 exit2: set_p3pop dxpop cxpop bxpop axret modify endp delete 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,buffer1mov cx,15c6: 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_p2show err1exit6:set_p3pop dxpop cxpop bxpop axretdelete endplist proc near ;列文件中记录push axpush bxpush cxpush dxclear1clear2set_p2show mess11mov dx,offset fnamemov al,2mov ah,3dh ;打开文件int 21hmov bx,axagain: 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,handlemov ah,3ehint 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 fivecmp dl,'7'jl sixcmp dl,'8'jl sevencmp dl,'9'jl eightinc [buffer3+4]jmp quiteight:inc [buffer3+3]jmp quitseven: inc [buffer3+2]jmp quitsix: inc [buffer3+1]jmp quitfive: 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。

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

DATA SEGMENT
ASK DB 'the number of students',10,13,'$'
ANSWER DB 4,'?',4 DUP('?') ;存入学生数
SHURU DB 'Input scores:$'
HuanHang DB 10,13,'$' ;换行
W DW 100 DUP('?') ;两位组合BCD码连续存放
SCORE DB 100 DUP('?') ;两位组合BCD码间隔存放
ZUIDA DB 'The highest score is $'
PINJUN DB 'The average score is $'
MAXSCORE DW ? ;存入最大值
AVERAGES DW ? ;存入平均数
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP('?')
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
CALL NUMBER ;调用子程序,实现输入学生数的功能
CALL INPUT ;调用子程序,实现输入每位学生分数的功能
CALL MAX ;调用子程序,实现找出最高分的功能
CALL AVERAGE ;调用子程序,实现求出班级平均分的功能
MOV AH,4CH ;返回DOS
INT 21H
NUMBER PROC ;输入学生数入口参数:无出口参数:DX
LEA DX,ASK ;在屏幕上显示“How many students”
MOV AH,9
INT 21H
LEA DX,ANSWER ;键盘输入学生数
MOV AH,10
INT 21H
MOV CL,[ANSWER+1] ;得出学生数(将输入的数十位乘10加个位),存入寄存器DX
MOV CH,0
MOV BX,10
LEA SI,[ANSWER+2]
MOV DX,0
L1:MOV AL,[SI]
AND AX,000FH
PUSH CX
DEC CX
CMP CX,0
JE L2
MUL10:MUL BL
LOOP MUL10
L2:ADD DX,AX
POP CX
INC SI
LOOP L1
RET
NUMBER ENDP
INPUT PROC ;子程序:实现学生分数的输入入口参数:DX,出口参数:以W为首的连续单元内的数据
MOV CX,DX ;调入学生数
PUSH DX ;学生数入栈保护
LEA SI,W
LEA DI,SCORE
MOV DX,0
LEA DX,HuanHang ;屏幕上换行
MOV AH,9
INT 21H
LEA DX,SHURU ;在屏幕上显示“INPUT SCORES:”
MOV AH,9
INT 21H
LEA DX,HuanHang ;屏幕上换行
MOV AH,9
INT 21H
QQ: MOV AH,1 ;键盘连续写入每位学生分数,并转为二进制数后存入以W和SCORE为首的连续单元中
INT 21H
SUB AL,30H
ROL AL,4
MOV BL,AL
MOV AH,1
INT 21H
SUB AL,30H
OR BL,AL
MOV BH,0
MOV [SI],BX
INC SI
MOV [DI],BX
INC DI
INC DI
MOV DL,' ' ;每输入一个二位分数,输出一个空格
MOV AH,2
INT 21H
LOOP QQ
POP DX ;学生数出栈,保护现场
RET
INPUT ENDP
MAX PROC ;子程序:实现最高分的查找入口参数:DX,以W为首的连续单元内的数据出口参数:存入MAXSCORE的数据
PUSH DX ;学生数入栈保护
PUSHF
LEA SI,W
MOV CX,DX
LEA SI,W
MOV AX,[SI] ;从W为首的连续单元中取出4位,存入AX寄存器以便比较大小
MOV BL,AL ;将BL设为初始最大值
AGAIN: MOV AX,[SI] ;连续读取,比较,出现较大值时存入BL,实现最大值寻找INC SI
CMP AL,AH
JAE NEXT
CMP BL,AH
JAE NEXT
MOV BL,AH
NEXT: LOOP AGAIN
PUSH CX
PUSH DX
MOV BH,0
LEA DX,HuanHang ;屏幕上换行
MOV AH,9
INT 21H
MOV MAXSCORE,BX ;将最大值存入存储单元MAXSCORE中
MOV DL, ZUIDA ;在屏幕上显示:“Highest score is”
MOV DX,OFFSET ZUIDA
MOV AH,09H
INT 21H
POP DX
POP CX ;保护现场
MOV AL,BYTE PTR MAXSCORE ;将最大值从存储单元MAXSCORE中取出并在屏幕上显示
MOV AH,0
MOV CL,10H
MOV BH,AH
MOV DL,AL
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BH
ADD DL,30H
MOV AH,02H
INT 21H
POPF
POP DX ;学生数出栈,保护现场
RET
MAX ENDP
AVERAGE PROC ;子程序:实现求平均数入口参数:DX、以SCORE为首的连续单元内的数据出口参数:存入AVERAGES的数据
LEA DI,SCORE
MOV CX,DX
CALL CHU2
PUSH BP
MOV BP,0
REPECT: MOV AX,[DI] ;将所有分数求和
CALL ZuanHuan
ADD BP,AX
INC DI
INC DI
LOOP REPECT
MOV AX,BP
POP BP
CALL ZHENGCHU
LEA DX,HuanHang ;屏幕上换行
MOV AH,9
INT 21H
LEA DX,PINJUN ;在屏幕上显示“Average score is”
MOV AH,9
INT 21H
MOV BH,0
MOV AVERAGES,BX ;将取整后的平均分存入存储单元AVERAGES
MOV AL,BYTE PTR AVERAGES ;将取整后的平均分显示到屏幕
MOV AH,0
MOV CL,10
DIV CL
MOV BL,AH
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,BL
ADD DL,30H
MOV AH,02H
INT 21H
POP BP
RETF
AVERAGE ENDP
ZuanHuan PROC ;组合BCD码转换为二进制数入口参数:AX 出口参数:AX
PUSH CX
PUSHF
MOV AH,AL
MOV CL,4
SHR AH,CL
AND AL,0FH
AAD
POPF
POP CX
RET
ZuanHuan ENDP
CHU2 PROC ;求出不小于“学生数/2”的整数,和平均分余数比较达到四舍五入效果入口参数:DX 出口参数:BP
PUSH DX
MOV AX,DX
MOV DL,2
DIV DL
CMP AH,1
JB S1
INC AL
S1:MOV AH,0
MOV BP,AX
POP DX
RET
CHU2 ENDP
ZHENGCHU PROC ;四舍五入求平均分入口参数:AX,DL 出口参数:BL
DIV DL
MOV BL,AL
MOV AL,AH
MOV AH,0
CMP AX,BP
JB S2
ADD BL,1
S2:RET ZHENGCHU ENDP
CODE ENDS
END BEGIN。

相关文档
最新文档