北京理工大学汇编语言实验六 学生成绩管理系统设计实验

合集下载

汇编学生管理系统实验报告

汇编学生管理系统实验报告

《汇编语言程序设计》综合程序设计实验报告题目:简单学生成绩管理一、项目简介本程序为一简单的学生成绩管理程序,通过学生姓名对学生成绩进行相应的增删改查操作,同时加入音乐程序让系统更加生动、形象。

语言为80x86汇编语言,运行环境为MASM6.0 二、小组成员具体分工小组成员共同商讨完成程序的需求分析,设计好程序的各个功能模块。

具体分工:曹玉松:完成学生成绩的查询,输出,排序,程序整合 吕盼举:音乐播放、清屏、图形输出、实验报告撰写 三、需求分析与设计(对项目的详细分析步骤)成绩管理系 统学生成绩查询显示音乐频率波状图音乐播放清屏(设置背景色)输出学生信息 对学生成绩排序输出选择乐曲播放本程序综合运用课上所学知识,主在完成学生成绩的管理工作,首先,有一个菜单界面,用来给用户提示信息,提供七个菜单选项,包括成绩的查询,学生信息的输出,成绩的排序、增加、删除等,另外还有一个让人劳逸结合的音乐播放功能,有音乐的选择、播放功能,在放音乐的同时可以将音乐的频率随着音乐同步以柱状图形显示在屏幕上,模拟mp3音乐播放的功能。

四、代码及分析亮点一:子程序综合运用各种子程序,嵌套调用,既有段内也有段间子程序亮点二:宏多次使用宏定义,通过宏的调用使程序代码简化亮点三:音乐播放选择乐曲进行播放,亮点四:图形动态显示调用时钟中断,绘制图像,动态显示亮点五:伪操作代码:output macro s mov dl,sadd dl,30hmov ah,2int 21hendmshow macro xingcan lea dx,xingcanmov ah,9int 21hendmshuru macro aLEA SI, ds:MUS_FREQ&a ;取发声的频率(音阶)表首地址LEA BP, ds:MUS_TIME&a ;endmhuanhang macromov ah,2mov dl,10int 21hmov ah,4chmov ah,2mov dl,13int 21hmov ah,4chendmshowkongge macro mov ah,2mov dl,00hint 21hmov ah,4chendmSTACK SEGMENT PARA STACK 'STACK' ;定义堆栈段DB 64 DUP ('STACK...') STACK ENDS ;以上定义堆栈段;************************** ****************DATAS SEGMENTMUS_FREQ0 DW 330,294,262,294,3 dup(330)dw 3 dup(294),330,392,392DW330,294,262,294,4dup(330),294,294,330,294,262,-1MUS_TIME0 DW 6 dup(25),50DW 2 dup(25,25,50)DW 12 dup(25),100 MUS_FREQ1 dw 330,392,330,294,330,392,330,29 4,330dw330,392,330,294,262,294,330,39 2,294dw260,262,220,196,220,262,294,33 0,262,-1MUS_TIME1 dw 3 dup(50),25,25,50,25,25,100dw 2 dup(50,50,25,25),100dw 3 dup(50,25,25),100MUS_FREQ2 DW 262, 262, 294, 262, 349, 330, 262dw 262, 294, 262,392, 349, 262, 262DW 294, 440, 349, 330, 294, 466dw 466,440,262, 392, 349, -1MUS_TIME2 DW 25, 25, 50, 50, 50, 100DW 25, 25, 50, 50, 50, 100DW 25, 25, 50, 50, 50, 50, 150DW 25, 25, 50, 50, 50, 100score dw 64,71,66,61,78,80,83,89,79N=$-scoren1=N/2name1 db 'aa$'db 'bb$'db 'cc$'db 'dd$'db 'ee$'db 'ff$'db 'gg$'db 'hh$'db 'ii$'x equ $-name1ww equ x/2len_s equ 2str_d db 30,?,30 dup(?) mess1 db 'match$'mess2 db 'no name!$'nam db 13,10,'name grade',13,10,'$'string db 10,13,'********************* 'db 10,13,'1.output the name and grade'db 10,13,'2.seek'db 10,13,'3.paixu'db 10,13,'4.tongji'db 10,13,'5.qingping'db 10,13,'oyijiehe'db 10,13,'7.Quit'db10,13,'********************* 'db 10,13,'select:','$'function1 db 10,13,'output:',10,13,'$'function2 db 10,13,'input:','$'function3 db 10,13,'***********Goodbye!***********','$'temp1 dw ?temp2 dw ?a db 10b dw ?hc db 1MUS_LST DB'****************', 0DH, 0AHDB '0 MUSIC 0', 0DH, 0AHDB '1 MUSIC 1', 0DH, 0AHDB '2 MUSIC 2', 0DH, 0AHDB '3 exit ', 0DH, 0AHDB'****************', 0DH, 0AH, '$'DATAS ENDSCODES SEGMENTASSUMECS:CODES,DS:DATAS,SS: STACKSTART:MOV AX,DATASMOV DS,AXMOV ES,AXhaha: mov ah, 00hmov al, 10h ;选择显示方式10h(16色图形)int 10hmov ah, 0bhmov bh, 00hmov bl, 01h ;背景设为蓝色int 10hcall functionfunction:lea dx,stringmov ah,9int 21hmov ah,1int 21hcmp al,'1'je case1cmp al,'2'je case2cmp al,'3'je case3cmp al,'4'je case4cmp al,'5'je case5cmp al,'6'je case6cmp al,'7'je case7jmp functioncase1: lea dx,function1mov ah,9int 21hmov cx,n1mov bp,offset name1 xianshixingming:mov dx,bpmov ah,9int 21hshowkonggeadd bp,3loop xianshixingminghuanhangMOV CX,N/2call showscorejmp functioncase2:show function2lea dx,str_dmov ah,0ahint 21hmov cl,wwLEA SI,name1mov di,0push dibijiao:push cxpush dx;比较字符串长度是否一致XOR bX,bXMOV bL,str_d+1CMP bX,len_sJNE MS;比较字符串中各元素是否一致LEA DI,str_d+2mov cl,len_slea bp,scorepush siMAD:MOV AL,DS:[SI]MOV BL,ES:[DI]CMP AL,BLJNE MSINC SIINC DILOOP MADpop siMOV CX,1huanhangpop dimov si,0 push dicall showscoreMS: pop diadd di,2push dipop cxloop bijiaolea dx,mess2 SHOW3:;输出匹配结果信息MOV AH,09HINT 21HMOV AH,4CHjmp functioncase3:call maopaocase4: call tongji case5: jmp hahacase6:push axpush bxpush cxpush dxpush sipush bppush dicall MP3pop dipop bppop sipop dxpop cxpop bxpop axjmp functioncase7: lea dx,function3mov ah,9int 21hMOV AH,4CHINT 21H MP3 proccall waitfa5:lea dx,mus_lstmov ah,09int 21hmov ah,01int 21hcmp al,'0'jz a1cmp al,'1'jz a2cmp al,'2'jz a3cmp al,'3'jz end_musjmp a5ac: call waitfa1: shuru 0call waitfjmp a4a2: shuru 1call waitfjmp a4a3: shuru 2call waitfa4: mov cx,0mov bl,0FREQ:MOV DI, ds:[si] ;读取频率值CMP DI, -1 ;歌曲结束了吗?JE a5mov bl,01mov dx,disub dx,190mov b,dx aa: mov ah, 0ch ;写像素点mov al, blint 10hinc dxcmp dx, 400jne aamov dx,bpush axsub ax,axinc cxsub a,5mov ax,cxdiv amov a,10cmp ah,0pop axjnz aaMOV BX, DS:[BP] ;读取节拍CALL SOUNDF ;调通用发声子程序inc cx; aainc cx; jne aainc cx; jne aainc cx; jne aainc cxadd cx,5cmp cx,150jbe abcall waitfmov cx,0ab: ADD SI, 2ADD BP, 2; ad:inc cxJMP FREQEND_MUS:; mov ax,4c00h;int 21hretMP3 endpSOUNDF PROC nearPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIMOV AL, 0b6H ;写定时器8253的工作方式OUT 43H, ALMOV DX, 12H ;根据频率求8253的计数值,即533H*896/freqMOV AX, 348ch ;(DX),(AX)=123280H=53 3H*896DIV di ;(DI) = freqOUT 42H, AL ;向8253送计数值MOV AL, AHOUT 42H, ALIN AL, 61H ;取8255的PB口当前内容,并保护MOV AH, ALOR AL, 3 ;开始发声,PB1=1,PB0=1OUT 61H, ALWAIT1: MOV CX, 28000 ;延时(BX)×10msdelay: loop delaydec bxjnz WAIT1MOV AL, AHAND AL, 0FCH ;停止发声,PB1=0,PB0=0OUT 61H, ALPOP DIPOP DXPOP CXPOP BXPOP AXRETSOUNDF ENDP;************************** ****************WAITF PROC NEARPUSH AXmov ah, 00hmov al, 10h ;选择显示方式10h(16色图形)int 10hmov ah, 0bhmov bh, 00hmov bl, 01h ;背景设为蓝色int 10hmov ah, 0bhmov bh, 01hmov bl, 00h ;设置调色板0#int 10hPOP AXRETWAITF ENDP;CSEG ENDS ;以上定义代码段;************************** ****************showscore procCODES SEGMENTASSUMECS:CODES,DS:DATASMOV AX,DATASMOV DS,AXMOV DI,0MOV BP,N+5 SHOW2:PUSH CXMOV DX,0MOV AX,[SI]CALL DTOC2CALL SHOW_STR2ADD SI,2POP CXLOOP SHOW2call functionDTOC2 PROCS:MOV CX,10CALL DIVDW2ADD CL,30HMOV DS:[BP],CL INC DIPUSH AXADD AX,DXJZ BACKPOP AXDEC BPJMP SBACK:POP AX RETDTOC2 ENDP DIVDW2 PROC PUSH AXMOV AX,DX MOV DX,0DIV CXMOV BX,AX POP AXDIV CXMOV CX,DX MOV DX,BX RET DIVDW2 ENDP SHOW_STR2 PROC S2: MOV AH,2MOV DL,DS:[BP]INT 21HINC BPDEC DIJZ OKJMP S2OK: MOV AH,2MOV DL,0INT 21HRETSHOW_STR2 ENDP codes ends showscore endpmaopao proc CODES SEGMENTpush cspush dspush axASSUME CS:CODESMOV SI,0MOV CX,N/2-1CALL BUBBLEMOV CX,N/2MOV SI,0MOV DI,0MOV BP,N+5call showscoreBUBBLE PROCL1:PUSH CXLEA SI,scoreL2:MOV AX,score[SI]CMP AX,score[SI+2]JBE NEXTXCHG AX,score[SI+2]MOV score[SI],AX NEXT:ADD SI,2LOOP L2POP CXLOOP L1huanhangRETBUBBLE ENDPretpop axpop cxpop dxCODES ENDS maopao endpclr_screen proc near mov ah,06hmov cx,temp1mov dx,temp2int 10hmov ah,02hmov dh,24mov dl,80mov bh,0int 10hretclr_screen endptongji procDATAS SEGMENTnum_under60 db 0num_60to69 db 0num_70to79 db 0num_80to89 db 0num_90to99 db 0num_100 db 0string10 db ' the number under 60:$'string20 db 'the number between 60 and 69:$'string30 db 'the number between 70 and 79:$'string40 db 'the number between 80 and 89:$'string50 db 'the number between 90 and 99:$'string60 db ' the number which is 100:$'DATAS ENDSCODES SEGMENTASSUMECS:CODES,DS:DATASMOV AX,DATASMOV DS,AXxor ax,axmov cx,9lea bx,scorecompare:cmp byte ptr[bx],60jl under60is60to69:cmp byte ptr [bx],70jl _60to69is70to79:cmp byte ptr[bx],80jl _70to79is80to89:cmp byte ptr [bx],90jl _80to89is90to99:cmp byte ptr [bx],100jl _90to99jz equal100under60:add num_under60,1 jmp con_60to69:add num_60to69,1 jmp con_70to79:add num_70to79,1 jmp con_80to89:add num_80to89,1 jmp con_90to99:add num_90to99,1 jmp conequal100:add num_100,1 con:lea bx,[bx+2]loop comparelast:huanhangshow string10 output num_under60 huanhangshow string20 output num_60to69 huanhangshow string30 output num_70to79 huanhangshow string40 output num_80to89 huanhangshow string50output num_90to99 huanhangshow string60 output num_100 huanhangmov ah,4chjmp functionCODES ENDS tongji endp CODES ENDS END START五、总结本次大作业采用汇编语言编写一比较大型的程序,采用数组、栈等形式进行操作,从开始设计到实现,我们复习到了课本上学到的知识,也对没有学到的图形和声音的应用领域有了一些涉猎。

学生成绩管理系统(c语言结构体以及文件操作)实验报告

学生成绩管理系统(c语言结构体以及文件操作)实验报告
循环输出学生的成绩和学号等
没有找到这个学生的信息!
您还想继续进行查找吗?()
成绩输出
《成绩输出:》
写文件
已经成功写入文件!
读文件
谢谢您的使用
容错处理
输入错误!
2、各个模块
定义学生的信息结构体
函数功能:利用循环输入学生的学号姓名以及成绩等信息。
请输入参加考试的人数:
请输入第个学生的信息:学号,姓名,成绩(数学、英语,物理)
返回学生人数
定义学生信息的结构体
函数功能:计学生的平均分、总分
函数功能:循环输出学生的成绩信息
定义学生的信息结构体
声明打印的函数
函数功能:按照学生的总分进行排序
交换学号。
交换姓名
交换成绩
交换总分。
交换平均分。
函数功能:按照学生的姓名字进行排序
交换学号。
交换姓名
交换成绩
交换总分。
交换平均分。
函数功能,遍历查找学生的名字
熟悉文件的基本操作以及增量的测试方法
实验内容(问题,思路,程序,结果)
得分
一、设计思路:
仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)
1、输入初始的学生信息:其中包括学生的学号、姓名、数学、物理、英语成绩等相关信息;使用循环,以及结构体成员调用一次录入每个学生的成绩等学生信息
2、计算平均和总分模块:利用两层循环,计数变量累加一次循环一个学生、计数变量进行与科目次数相同的累加循环每个科目的成绩进行累加。
3、按照学生成绩以及姓名字典排序模块:比较学生成绩的高低以及姓名字典的大小,使用选择法进行排序
4、查询模块:遍历结构体数组,如果姓名相同则循环输出学生的信息。
5、写文件模块:使用函数打开文件以后进行循环写入。一直到最后一个学生。

C语言程序设计学生成绩管理系统实验报告

C语言程序设计学生成绩管理系统实验报告

移通学院C语言程序设计报告书设计名称:学生成绩管理系统专业:指导老师:班级:姓名:学号:座号:时间一、实验目的1.在编辑应用程序过程中,逐步加深对C语言编程的理解;2.加强实践的能力,动手能力,同时进一步对所学的知识进行巩固;3.培养初步编程的能力,为以后的学习奠定基础;二、实验内容运用所学的C语言知识编辑一个应用程序:学习成绩管理系统三.系统软件环境:本程序主要运行在: Visual C++ 6.0Turbo C/C++ 3.0四.课程设计题目:学生成绩管理系统程序说明:有N个学生,每个学生的数据包含学号不重复、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能:1主菜单2各菜单项功能①成绩录入:输入学生的学号、姓名及三门课的成绩;②成绩查询:按学号查询学生记录;③成绩统计:计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序后输出;④退出系统:退出整个系统即主菜单;五.数据结构设计描述:↓int num; /定义学号,变量为整型/char name; /定义姓名,变量为字符型/int score; /定义课程的成绩,变量为整型/float average; /定义平均分,变量为浮点型/七.系统各函数的功能,、相互调用关系1.函数实现功能说明:1menu函数是定义一个菜单函数,其功能在于输出菜单界面供使用者选择;2input函数是定义用于输入学生信息;3select 函数是定义用于查询学生信息;包括学号、姓名及各科成绩;4statistics 函数计算学生的平均分;根据学生的平均分高低,对学生的数据进行排序输出;2.相互调用关系:Main函数调用menu函数;Menu 函数可以调用input 函数、select函数和statistics 函数八.心得体会C语言是一种较为基础和普遍的编程语言,应用相当广泛,这次课程设计的要求与C语言的广泛应用相比较还有很大的差距;我们对于C语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,我想我们也要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序; 九.程序:include <stdio.h>include <stdlib.h>include <conio.h>define N 3 /学生人数/define M 3 /课程门数/struct student{int num; /学号/char name20; /姓名/int score3; /三门课成绩/float average;}stuN; /学生数/void input; /查询/void select; /统计/void menu;void input{int i,j;printf"\t\t①成绩录入\n\n";fori=0;i<N;i++{printf"请输入学号:";scanf"%d",&stui.num;printf"请输入姓名:";scanf"%s",&;forj=0;j<M;j++{printf"第%d门成绩的分数:",j+1;scanf"%d",&stui.scorej;}printf"\n\n";}printf"\n\n";printf"输入完毕按任意键返回主菜单";}/2.查询/void selectint no{int i;printf"学生%d号: \n",no; printf"学号: %d\n",stuno-1.num; printf"姓名: %s\n",;for i=0;i<M;i++{printf"第%d门课程的成绩为: ",i+1; printf"%d\n",stuno-1.scorei;}printf"\n按任意键返回主菜单";getch;}/3.统计/void statistics{float temp=0;int i=0;/学生成绩平均分/temp=0;printf"\t\t③成绩统计\n\n";forj=0;j<N;j++{fori=0;i<M;i++{temp=temp+stuj.scorei;}stuj.average=temp/N;printf"\n学生%s的成绩平均成绩为:",;printf"%0.2f分",stuj.average;temp=0;}/排序/for j=0;j<N;j++fori=0;i<N-j-1;i++ifstui.average<stui+1.average{ temp=stui.average;stui.average=stui+1.average;stui+1.average=temp;}printf"\n\n学生平均成绩前三名:";fori=0;i<3;i++{printf"\n第%d名:%0.2f分",i+1,stui.average;}printf"\n\n按任意键返回主菜单";getch;}void menu{ int num=0;int n=0;printf"\n\t\t\t学生成绩管理系统\n\n";printf"\n\t\t\t①成绩录入\n\t\t\t②成绩查询\n\t\t\t③成绩统计\n\t\t\t④退出系统\n";printf"\t\t\tchoose:";scanf"%d",&num;switchnum{case 1:system"cls";input;break;case 2:system"cls";printf"\t\t②成绩查询\n\n"; printf"请输入要查询的学生号1~3:";scanf"%d",&n;selectn;break;case 3:system"cls";statistics;break;case 4:exit0;default:;}}void main{while1{system"cls"; /清屏/menu;}}。

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

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

汇编语言课程设计课题名称:学生成绩管理系统小组成员:班级:指导教师:日期: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分的人数,并输出显示统计结果。

1、成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用DOS功能调用。

2、统计学生成绩和显示统计结果两部分内容用子程序结构来完成。

最佳答案 DATA SEGMENTSTRING1 DB 'Please Input Score:','$' ;提示输入STRING2 DB 'The Order From MAX T o MIN:','$';输出排序从大到小SCORE DW 60 DUP(0) ;分配存放空间S5 DW 0 ;定义变量S6 DW 0S7 DW 0S8 DW 0S9 DW 0S10 DW 0DATA ENDSSTACK SEGMENT ;堆栈段DW 64 DUP(0)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV DX,OFFSET STRING1 ;显示提示输入MOV AH,09HINT 21HXOR BX,BX ;寄存器清零XOR CX,CXXOR SI,SIXOR DI,DIINPUT: MOV AH,1 ;输入一个字符INT 21HCMP AL,0DH ;是否为回车键JZ OVER ;是就跳到OVERCMP AL,20H ;是否为空格JZ SAVE ;是就跳到SAVESUB AL,30H ;变为真数MOV CL,4SHL BX,CL ;左移四位,变为BCD码ADD BL,ALJMP INPUTSAVE: MOV SCORE[SI],BX ;保存到SCORE中ADD SI,2INC DIXOR BX,BXJMP INPUTOVER: MOV SCORE[SI],BX ;保存最后一个数据,并存放到SCORE中INC DIMOV DL,0AHMOV AH,02HINT 21HMOV CX,DIDEC CXXOR BX,BXCOMP1: MOV SI,2 ;指向下一个数MOV DX,CXCOMP2: MOV AX,SCORE[BX]CMP AX,SCORE[BX+SI] ;比较前后两个数JNC COMP3 ;小于就跳到COMP3XCHG AX,SCORE[BX+SI] ;交换位置MOV SCORE[BX],AXCOMP3: ADD SI,2 ;指向下一个数DEC DXJNZ COMP2ADD BX,2 ;指向下一个数LOOP COMP1MOV DX,OFFSET STRING2MOV AH,09HINT 21HSUB SI,SI ;把SI清零OUT_PUT1:MOV BX,SCORE[SI] ;输出百位数MOV DL,BHAND DL,0FHADD DL,30HMOV AH,02HINT 21HMOV DL,BL ;输出十位数MOV CL,4SHR DL,CLADD DL,30HMOV AH,02HINT 21HMOV DL,BL ;输出个位数AND DL,0FHADD DL,30HMOV AH,02HINT 21HMOV DL,20H ;输出空格MOV AH,02HINT 21HADD SI,2DEC DIOUT_PUT2:MOV BX,SCORE[SI] ;输出十位数MOV DL,BLMOV CL,4SHR DL,CLADD DL,30HMOV AH,02HINT 21HMOV DL,BL ;输出个位数AND DL,0FHADD DL,30HMOV AH,02HINT 21HMOV DL,20H ;输出空格MOV AH,02HINT 21HADD SI,2DEC DIJNZ OUT_PUT2MOV CX,10 ;设置计数器为10 MOV BX,OFFSET SCORECOMPARE: MOV AX,[BX] CMP AX,60 ;与60比较JL FIVE ;小于就跳到FIVE CMP AX,70 ;与70比较JL SIX ;小于就跳到SIXCMP AX,80 ;与80比较JL SEVEN ;小于就跳到SEVEN CMP AX,90 ;与90比较JL EIGHT ;小于就跳到EIGHTCMP AX,100 ;与100比较JNE NINE ;不为0就是90到99INC S10 ;100时【S10+1】JMP NEWDATA ;跳到NEWDATAFIVE: INC S5 ;小于60时【S5+1】JMP NEWDATA ;跳到NEWDATASIX: INC S6 ;大于等于60小于70时【S6+1】JMP NEWDATA ;跳到NEWDATASEVEN: INC S7 ;大于等于70小于80时【S7+1】JMP NEWDATA ;跳到NEWDATAEIGHT: INC S8 ;大于等于80小于90时【S8+1】JMP NEWDATA ;跳到NEWDATANINE: INC S9 ;大于等于90小于100时【S9+1】NEWDATA: ADD BX,2 ;取下个数LOOP COMPARE ;循环COMPAREMOV AH,4CH ;返回DOSINT 21HCODE 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键将按数学成绩分段结果。

汇编语言学生信息管理系统实验报告

微机原理技术与接口实验报告学院:专业:班级:姓名:学号:微机原理与接口技术试验实验目的掌握熟练汇编语言实验要求课本P119页31题实验环境文本编辑器,MASM5.0. windows7实验设计子程序名称及功能子程序调用关系图1、输入学生信息2、按学号排序输出3、按成绩排序输出4、统计并输出平均成绩5、统计并输出各分数段程序源代码(见附页)程序运行结果附页(源代码如下).model small;small,程序只能有一个代码段和一个数据段.stack 200h;堆栈段名stack,默认大小1024字节,这里是200h字节.data;数据段名_datastudent struc;学生的数据结构,32字节,2^5,便于计算地址xname db 14 dup('$')class db 14 dup('$')num dw 0score dw 0;为保存1位小数,以10倍值保存student endsstu_size equ 32;32=2^5stu_db student 100 dup(<'x','y',6,500>);100名学生的空间stu_num db 0;已保存的学生人数stu_seq db 100 dup('$');排序信息,排序操作在序列中进行,排序结果体现在序列中welcome db '==Student Information Mannagement System==',0dh,0ah; 打印菜单db'0. Add record.',0dh,0ah;0. 录入学生成绩(十进制形式)db'1. Sortby number.',0dh,0ah;1. 按学号排序显示db'2. Sortby score.',0dh,0ah;2. 按成绩排序显示db'3. Show Average',0dh,0ah;3. 统计平均成绩db'4. Show Statistics.',0dh,0ah;4. 统计各分数段人数db'5. Exit.',0dh,0ah;5. 退出db'$'msg1 db'name:','$'msg2 db'class:','$'msg3 db 'number:','$'msg4 db 'score:','$'m_str_l db 0dh,0ah,'[length<14byte] ','$'m_num_l db 0dh,0ah,'[value<100] ','$'table dw CASE0,CASE1,CASE2,CASE3,CASE4,CASE5buflen db 100;输入缓冲区大小100aclen db ?;实际输入长度buf db 100 dup(0),'$';实际缓冲区bufrear equ offset buf+100;缓冲区尾ns6 db 0;统计各分数段人数n67 db 0n78 db 0n89 db 0n91 db 0ms6 db 'failed:','$';显示各分数段人数m67 db '60~70:','$'m78 db '70~80:','$'m89 db '80~90:','$'m91 db '90~100:','$'.CODE;代码段名_textSTART:ps macro str;打印字符串,要求以'$'结尾push axpush dxlea dx,strmov ah,9int 21hpop dxpop axendmpc macro ch;打印字符push axpush dxmov dl,chmov ah,2int 21hpop dxpop axendmendl macro;打印'\n'pc 0dhpc 0ahendmscs macro;从键盘输入字符串,保存在buf中,串长aclen lea dx,buflenmov ah,10int 21hendmscc macro;从键盘输入字符,保存在almov ah,1int 21hendmmemcpy macro dest,src,len;经典的内存拷贝push axpush cxpush sipush dimov ax,dsmov es,ax;串操作di要用到附加段mov cl,lenmov ch,0lea si,srclea di,destcldrep movsb;mov [di],'$'pop dipop sipop cxpop axendm;使bx指向编号为ax的学生单元;寄存器:ax,bx,cxGET_STU macropush axpush cxlea bx,stu_dbmov cl,5shl ax,cladd bx,ax;bx指向这个学生的存储单元pop cxpop axendmmov ax,@datamov ds,axWELC:endlps welcomepc':';输入选项scc;ascii码保存在alendlmov ah,0mov bx,axsub bx,'0'cmp bx,5jbe CASE0TO5jmp WELCCASE0TO5:shl bx,1jmp table[bx];基址寻址CASE0:;录入学生成绩(十进制形式)call ins_stujmp WELCCASE1:;按学号排序显示call num_sortjmp WELCCASE2:;按成绩排序显示call score_sortcall print_seqjmp WELCCASE3:;统计平均成绩call get_averagejmp WELCCASE4:;统计各分数段人数call get_satjmp WELCCASE5:mov ah,4ch ;结束int 21h;ins_stu:输入学生信息;入口:stu_num已有学生人数,即最新空白编号;出口:stu_db;存储单元:stu_db,stu_numins_stu proc nearpush axpush bxpush cxpush dxmov al,stu_nummov ah,0;确定存放在第几个位置lea bx,stu_dbmov cl,5shl ax,cladd bx,ax;bx指向空白单元input_name:ps m_str_lps msg1scscmp aclen,14jae input_namememcpy [bx].xname,buf,aclenendlinput_class:ps m_str_lps msg2scscmp aclen,14memcpy [bx].class,buf,aclenendlps m_num_lps msg3scscall str2nummov [bx].num,axendlps m_num_lps msg4scscall score_fmtmov [bx].score,axendlinc stu_num;增加学生记录pop dxpop cxpop bxpop axretins_stu endp;pnum:以十进制形式输出一个无符号数;入口:ax需要输出的正数;出口:;存储单元:pnum proc nearpush axpush bxpush cxpush dxmov bx,bufreardec bxmov [bx],$OUTLOOP:or ax,axjz OUTLOOPFIN;ax为零mov dx,0mov cx,10div cxadd dl,'0'dec bxmov BYTE ptr [bx],dljmp OUTLOOPOUTLOOPFIN:cmp bx,offset bufrear-1;输出0jne PRINT_NUMdec bxmov BYTE ptr [bx],'0'PRINT_NUM:mov dx,bxmov ah,9int 21hpop dxpop cxpop bxpop axretpnum endp;pscore:以十进制形式输出带一位小数的分数;入口:ax需要输出的正数;出口:;存储单元:pscore proc nearpush axpush bxpush cxpush dxmov bx,bufrearOUTLOOP2:or ax,axjz OUTLOOPFIN2mov dx,0mov cx,10div cxadd dl,'0'dec bxmov BYTE ptr [bx],dljmp OUTLOOP2OUTLOOPFIN2:cmp bx,offset bufrear-1;x要改成0x,以便小数格式输出je S0Xcmp bx,offset bufrear;空要改成00,以便小数格式输出jne PRINT_SCORES00:;==,为空dec bxmov BYTE ptr[bx],'0'dec bxmov BYTE ptr [bx],'0' PRINT_SCORE:mov dx,bxmov bx,bufreardec bxmov cl,[bx];暂存小数mov [bx],$;movdx,bxmov ah,9int 21hpc '.'pc clpop dxpop cxpop bxpop axretpscore endp;pstu:输出学生信息;入口:ax存储编号;出口:;存储单元:pstu proc nearpush axpush bxpush cxGET_STUps msg1ps [bx].xname;pc ' 'ps msg2ps [bx].classpc ' 'ps msg3mov ax,[bx].numcall pnumpc ' 'ps msg4mov ax,[bx].scorecall pscoreendlpop cxpop axretpstu endp;str2num:将数字由字符串转成数值;入口:buf;出口:ax;存储单元:buf缓冲区,aclen缓冲区内容长度str2num procpush bxpush cxpush simov ax,0mov cl,aclenmov ch,0lea si,bufGET_NUM:;mov ax,dest;add dest,dest*10 + [si]-'0' mov bl,10mul bl;以前的数*10,乘法指令必须用axmov bl,[si]mov bh,0add ax,bxsub ax,'0'inc siloop GET_NUMpop sipop cxpop bxretstr2num endp;score_fmt:将分数格式存储;入口:buf;出口:ax;存储单元:buf缓冲区,aclen缓冲区内容长度score_fmt procpush bxpush cxpush dxpush simov ax,0mov cl,aclenmov ch,0mov dx,0lea si,bufGET_SCORE:cmp BYTE ptr [si],'.';这个类型很重要jnz MUL_DEX;不是小数点mov dx,1;发现小数点inc siloop GET_SCOREMUL_DEX:mov bl,10mul blmov bl,[si]mov bh,0add ax,bxsub ax,'0'inc siloop GET_SCOREcmp dx,0jnz END_SCOREmov bl,10mul blEND_SCORE:pop sipop dxpop cxpop bxretscore_fmt endp;get_average:算平均分并输出;入口:stu_db;出口;存储单元:stu_db,stu_numget_average proc nearpush axpush bxpush cxpush dxmov cx,0;学生编号mov ax,0;暂存平均成绩低8位mov dx,0;暂存平均成绩高8位REPERT:cmp cl,stu_numjae OUT_PUT;总分已经加完了;找到编号为cx的学生push axmov ax,cxGET_STUpop cxpop axadd ax,[bx].score;32位加法adc dx,0inc cljmp REPERTOUT_PUT:mov cl,stu_nummov ch,0or cl,0;假设学生人数不多于255人jnz END_AVE;没有学生,不能除0inc cxEND_AVE:div cx;扩展为16位除法,商保存在ax中endlcall pscoreendlpop dxpop cxpop bxpop axretget_average endp;get_sat:统计各分数段人数并输出;入口:stu_db;出口;存储单元:ns6,n67,n78,n89,n91,stu_db,stu_num get_sat proc nearpush axpush bxpush cxmov ns6,0mov n67,0mov n78,0mov n89,0mov n91,0mov cx,0;学生编号(人数-1)SAT_IN:cmp cl,stu_numjae SAT_OUT;已经完了;找到编号为cx的学生push cxmov ax,cxGET_STUpop cxpop axinc clmov ax,[bx].score cmp ax,600jb IS6cmp ax,700jb I67cmp ax,800jb I78cmp ax,900jb I89;>=90inc n91jmp SAT_INIS6:inc ns6jmp SAT_INI67:inc n67jmp SAT_INI78:inc n78jmp SAT_INI89:inc n89jmp SAT_INSAT_OUT:mov ah,0ps ms6mov al,ns6call pnumendlps m67mov al,n67call pnumendlps m78mov al,n78call pnumendlps m89mov al,n89call pnumendlps m91mov al,n91call pnumendlpop cxpop bxpop axretget_sat endp;print_seq:根据序列stu_seq输出列表;输入:stu_seq;输出:;存储单元:stu_seqprint_seq proc nearpush axpush bx;stu_seq保存了编号序列,以'$'结束lea bx,stu_seqPRINT_SEQ_BEGIN:mov al,[bx]cmp al,'$'jz PRINT_SEQ_ENDmov ah,0call pstuinc bxjmp PRINT_SEQ_BEGINPRINT_SEQ_END:pop bxpop axretprint_seq endp;num_sort:按学号排序;输入:stu_seq;输出:stu_seq;存储单元:num_sort proc nearpush bxpush dxmov dl,0lea bx,stu_seqSORT_BEGIN:cmp dl,stu_numjae SORT_ENDmov BYTE ptr [bx],dlinc bxinc dljmp SORT_BEGINSORT_END:mov BYTE ptr [bx],'$';stu_seq保存了按输入顺序的序列,以'$'结束cmp stu_num,1;学生数小于等于1,没必要排序jle NON_NUMmov cl,stu_num;循环次数,内存量不能直接减dec clmov ch,0LOOP1:mov di,cx;暂存外循环cxlea bx,stu_seq;指向第一个序号LOOP2:mov al,BYTE ptr [bx]mov ah,0push bxGET_STUmov dx,[bx].num;dx前一个序列号对应的学号pop bxmov al,BYTE ptr [bx+1]push bxGET_STUcmp dx,[bx].num;[bx].num后一个序列号对应的学号pop bxjae CONTImov al,BYTE ptr [bx];小于则交换两个序列号;callpnum;endlxchg al,BYTE ptr [bx+1];callpnum;endlmov BYTE ptr [bx],alCONTI:inc bx;下一个序列号loop LOOP2mov cx,di;恢复外循环loop LOOP1pop dxpop bxretnum_sort endp;score_sort:按成绩排序;输入:stu_seq;输出:stu_seq;存储单元:score_sort proc nearpush bxpush dxmov dl,0lea bx,stu_seqSCORE_BEGIN:cmp dl,stu_numjae SCORE_ENDmov BYTE ptr [bx],dlinc bxinc dljmp SCORE_BEGINSCORE_END:mov BYTE ptr [bx],'$';stu_seq保存了按输入顺序的序列,以'$'结束cmp stu_num,1;学生数小于等于1,没必要排序jle NON_SCOREmov cl,stu_num;循环次数,内存量不能直接减dec clmov ch,0SLOOP1:mov di,cx;暂存外循环cxlea bx,stu_seq;指向第一个序号SLOOP2:mov al,BYTE ptr [bx]mov ah,0push bxGET_STUmov dx,[bx].score;dx前一个序列号对应的学号pop bxmov al,BYTE ptr [bx+1]push bxGET_STUcmp dx,[bx].score;[bx].num后一个序列号对应的学号pop bxmov al,BYTE ptr [bx];小于则交换两个序列号;callpnum;endlxchg al,BYTE ptr [bx+1];callpnum;endlmov BYTE ptr [bx],alSCONTI:inc bx;下一个序列号loop SLOOP2mov cx,di;恢复外循环loop SLOOP1NON_SCORE:pop dxpop bxretscore_sort endpEND START(注:本资料素材和资料部分来自网络,仅供参考。

汇编学生成绩程序设计报告

《汇编语言程序设计》综合程序设计实验报告题目:学生成绩管理系统一、项目简介此学生成绩管理系统实现了对学生成绩的基本管理功能,可以完成学生的显示,分数段人数统计,成绩排名以及插入查找等基本功能,并且成功实现了将学生信息写入文件以及从文件中读取的功能。

该项目运用了多个主程序的分支以及多个子程序,还有宏的定义和使用,基本涵盖了本学期所学知识,还应用了很多课外拓展的知识。

此项目是我们小组三人共同努力的结晶。

二、小组成员具体分工闫立新完成部分:主要完成程序的显示所有学生,文件的写入、读出和代码段定义部分。

王伟光完成部分:主要完成程序的所有学生排名,学生的查找、添加和代码段定义部分。

宋景超完成部分:主要完成程序的分数段统计,屏幕清屏、子程序和代码段定义部分。

三、需求分析与设计学生成绩管理系统,最基本的功能是实现最学生的显示和以及成绩的排名,和分数段的统计,以便分析教学效果。

我们的系统可以说完全达到了这个要求。

在这个系统的第一个功能就实现了所有学生的显示和他们对应的成绩。

此分支采用了内存存储单元中读取数据的方法,通过地址的不断增加来实现对学生姓名和成绩存储和输出。

统计学生分数段人数部分采用了多个跳转指令来实现,符合条件则使相应的分数段人数加1,不符合该分数段人数则跳转到相应的分数段并使该分数段人数加1。

对学生的排名,我们则选择了经典的冒泡排序来实现。

运用三条循环指令,lopi,lopj,lopk。

对学生的添加,我们设置了一个全局变量n来记录多少个数据,增加几个数据n就加几,然后输入姓名到新的内存中,输入成绩时因为成绩初始化时是以ASICC保存的,而输入的是字符,所以使用0FH现将其变成真正的数字然后通过*10等运算将其转化为ASICC即可对学生的查找,我们通过使用字符串比较来进行查找,使用bp来进行地址的改变,同时使用n5进行判断是否已经完成了查找已经是否找到了数据,找到数据则输出,找不到则输出错误文件的写入部分首先用dos指令3CH来创建一个文件,然后用dos指令40H 写入内容,在BX中装入文件代号,要写入的字节数放在CX中,输入缓冲区的地址放在DX中。

学生成绩管理系统实验报告

通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
实训要求:
1. 分析实训题目的要求
2. 写出详细设计说明
3. 编写程序代码,调试程序使其能正确运行
4. 设计完成的软件要便于操作和使用
4. 设计完成后提交实训报告

1.具备对成绩的管理功能(添加、删除、排序)
2.具备对成绩的统计功能(最高分,最低分,平均分,及格率等)
3.具备按学号、姓名、或课程名查询成绩的功能。
7.学生成绩管理系统流程图,如图1所示:是Biblioteka 否图1流程图四
1.在6.0上先编译,再执行程序,得到主窗口。如图2示:
图2 显示主窗口
2.从键盘输入数字1,按下回车。按提示要求添加学生成绩等信息。如图3示:
图3添加学生成绩
3.输入完毕学生信息后。根据提示按下回车键,返回主界面。再输入数字2,查看已输入的学生成绩信息。如图4示:
编程是一件很枯燥很无聊的事情,但是出于完成作业,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。

汇编课程设计成绩管理系统

汇编课程设计成绩管理系统一、课程目标知识目标:1. 理解汇编语言的基本概念,掌握汇编指令的使用方法。

2. 学会使用汇编语言进行程序设计,实现简单的成绩管理系统。

3. 了解计算机内存管理的基本原理,理解汇编语言在内存操作中的应用。

技能目标:1. 能够运用汇编语言编写简单的程序,实现数据的存储和查询功能。

2. 掌握使用汇编语言进行条件判断和循环操作的方法,实现成绩管理系统的逻辑功能。

3. 学会使用调试工具对汇编程序进行调试,解决程序中的错误。

情感态度价值观目标:1. 培养学生良好的编程习惯,注重代码的结构和可读性。

2. 增强学生的团队合作意识,学会在项目开发中分工与协作。

3. 激发学生对计算机硬件和底层编程的兴趣,提高学生的计算机素养。

分析课程性质、学生特点和教学要求:1. 课程性质:本课程属于计算机科学与技术领域,以汇编语言为核心,结合成绩管理系统实例,培养学生的编程能力和计算机硬件理解。

2. 学生特点:学生已具备一定的计算机基础知识和编程能力,对汇编语言有初步了解,但实际应用能力有待提高。

3. 教学要求:注重理论与实践相结合,以项目为导向,培养学生的实际操作能力和团队协作能力。

二、教学内容1. 汇编语言基础知识:- 汇编语言概述:了解汇编语言的发展历程,认识汇编语言与机器语言的关系。

- 汇编指令系统:掌握汇编指令的分类、格式及功能,学会使用常用汇编指令。

2. 程序设计方法:- 数据表示:学习数据在汇编语言中的表示方法,掌握各种数据类型的使用。

- 流程控制:了解汇编语言中的条件判断和循环结构,学会编写分支和循环程序。

- 子程序设计:掌握子程序的编写和调用方法,提高代码复用性。

3. 内存管理:- 内存分配与使用:了解内存空间分配方法,掌握汇编语言在内存操作中的应用。

- 数据存储:学习如何在内存中存储和访问数据,实现成绩管理系统中的数据结构。

4. 成绩管理系统项目实践:- 功能模块设计:明确成绩管理系统的需求,划分功能模块,进行模块化设计。

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

实验六学生成绩管理系统设计实验(综合性实验)一、实验要求和目的1.熟悉汇编语言程序结构;2.熟悉INT 21H 的文件操作功能调用;3.熟悉INT 21H 的1、9 号功能和INT 10H 常用功能的使用方法;4.掌握多子程序复杂问题程序设计方法;5.了解多模块程序设计方法(不作要求)。

二、软硬件环境1、硬件环境:计算机系统windows;2、软件环境:装有MASM、DEBUG、LINK、等应用程序。

三、实验涉及的主要知识单元对于一个复杂的程序,往往是分成若干个子程序设计的,然后用将它们组成一个完整的程序。

子程序通过调用和返回,参数传递方法实现互相联系。

四、实验内容与步骤1、实验内容设计一个学生成绩管理系统,要求完成文件建立、学生成绩录入、显示指定学号的学生记录、删除一个学生的记录、修改学生记录、返回等工作。

学生成绩包括学号(XH)、姓名(XM)、数学(SX)、语文(YW)、外语(WY)字段。

至少包括30 名学生信息,每名学生学号字段为4个字符,姓名字段为15 个字符(最大),每门成绩字段为3 个字符(最大)。

2、实验步骤(1)编写主程序main.asm,实现如图所示菜单;(2)编写文件创建子程序create,实现在指定盘指定文件夹”d:\chengji\2009\’下建立一个指定名称的文件2009doc.dat,界面如图所示;(3)编写成绩录入子程序append,实现在指定文件尾部插入一个学生的成绩记录,界面如图所示;(4)编写显示子程序display,实现按指定学号显示一个学生的记录,,界面如图所示;(5)编写修改子程序modify,实现按指定学号修改一个学生的记录字段(不需修改直接回车),界面如图所示;(6)编写删除子程序,实现按指定学号、姓名删除一个学生的记录,界面如图所示;(7)编译、链接、调试,产生可执行文件main.exe。

五、实验要求与提示1、实验要求(1)画出各程序流程图;(2)列出程序清单,加上适量注释;(3)回答思考问题;(4)记录实验结果;(5) 完成实验报告(实验材料上的内容简写,自己的工作要详尽)。

2、实验提示考虑用INT 10H 的06H 号实现清屏的功能,用02H 号实现置光标位置的功能?六、思考与练习以及测评标准1.有兴趣的同学可以考虑用多模块程序设计方法实现;2.文件在使用之前为何要打开?使用后为何要关闭?怎样计算文件的长度和移动文件的读写指针?打开获得句柄,使用后用int 21h七、程序流程图N八、实验结果九、程序代码data segmentforms db 101*64 dup('$')filename db 14,0,14 dup(0)formsbdb14,'$$$$$$$$$$$$$$$',22,'$$$$$$$$$$$$$$$$$$$$$$$',6,'$$$$$$$',6,'$$$$$$$',6,'$$$$$$$' screen0 db ' 1.Append a record',0dh,0ah, ' 2.Display a record',0dh,0ah,' 3.Modify a record',0dh,0ah,' 4.Delete a record',0dh,0ah,' 5.Open a file',0dh,0ah,' 6.Save into a file',0dh,0ah,' 7.Return DOS',0dh,0ah,' Please input 1-6:','$'f1str1 db ' Please input XH:$'f1str2 db ' Please input XM:$'f1str3 db ' Please input SX:$'f1str4 db ' Please input YW:$'f1str5 db ' Please input WY:$'f2str1 db ' XueHao: $'f2str2 db ' XingMing: $'f2str3 db ' ShuXue: $'f2str4 db ' Yuwen: $'f2str5 db ' WaiYu: $'f3str1 db ' XueHao does not exist.Nothing has been changed.$' f4str1 db ' Please input XingMing:$'f4str2 db ' Please input XueHao: $'f5str1 db ' Please input filename:$'f5str2 db ' Sorry!File does not exist.$'f5str3 db ' Loading...$'f5str4 db ' Completed.$'f5str5 db ' Failed.$'f6str1 db ' Save succeed!$'f6str2 db ' Save failed.$'fstr1 db ' Finish!$'fstr2 db ' Press any key to return!$'tempio db 0state db '0'formend dw 0XHtemp db 0eh,'0','$$$$$$$$$$$$$$'XHtempb db 0eh,'0','$$$$$$$$$$$$$$'cxtemp1 dw 100cxtemp2 dw 14ditemp dw 0sitemp dw 0handle dw 0data endsstack segmentstacks db 64 dup (0)stack endscode segment assumeds:data,ss:stack,cs:code start:mov ax,datamov ds,axmov es,axmov ax,stackmov ss,axcall initialwin: call prts0call inputmov al,tempiomov state,alM1: cmp al,'1'jnz M2jmp f1jmp winM2: cmp al,'2'jnz M3jmp f2jmp winM3: cmp al,'3'jnz M4jmp f3jmp winM4: cmp al,'4'jnz M5jmp f4jmp winM5: cmp al,'5'jnz M6jmp f5jmp winM6: cmp al,'6'jnz M7jmp f6jmp winM7: cmp al,'7'jnz winjmp quit ;;;;;;;;;;;;;;;;;;;quit: mov ah,4chint 21h ;;;;;;;;;;;;;;;;;;;initial:lea ax,formsmov si,axmov cx,101linit: mov al,14mov ds:[si],almov al,22mov ds:[si+16],almov al,6mov ds:[si+40],almov al,6mov ds:[si+48],almov al,6mov ds:[si+56],aladd si,64loop linitretf1: call cscreenlea di,formsmov cx,100Lf1: mov dl,'$'cmp es:[di+1],dljz skipf1add di,64loop Lf1skipf1:lea ax,f1str1mov si,axcall putsmov ax,dimov si,axcall getslea ax,f1str2mov si,axcall putsmov ax,diadd ax,16mov si,axcall getslea ax,f1str3mov si,axcall putsmov ax,diadd ax,40mov si,axcall getslea ax,f1str4mov si,axcall putsmov ax,diadd ax,48mov si,axcall getslea ax,f1str5mov si,axcall putsmov ax,diadd ax,56mov si,axcall getslea ax,fstr1mov si,axcall putscall newlinelea ax,fstr2mov si,axcall putscall newlinecall inputretf2: call cscreenlea ax,f1str1mov si,axcall putslea ax,XHtempmov si,axcall getsmov cx,100mov cxtemp1,cxlea di,XHtemplea si,formsLf21:lea di,XHtempmov cx,16mov sitemp,sirepe cmpsbjz f21startmov si,sitempadd si,64mov cx,cxtemp1dec cxmov cxtemp1,cxinc cxloop Lf21lea si,f3str1call putscall newlinejmp f2Qf21start:mov si,sitempcall cscreenlea si,f2str1call putsmov si,sitempadd si,2call putscall newlinelea si,f2str2call putsmov si,sitempadd si,18call putscall newlinelea si,f2str3call putsmov si,sitempadd si,42call putscall newlinelea si,f2str4call putsmov si,sitempadd si,50call putscall newlinelea si,f2str5call putsmov si,sitempadd si,58call putscall newlinef2Q:lea si,XHtempblea di,XHtempmov cx,16rep movsblea ax,fstr1mov si,axcall putscall newlinelea ax,fstr2mov si,axcall putscall newlinecall inputretf3: call cscreenlea si,f4str2call putslea si,XHtemplea di,formscall getsmov cx,100Lf3: mov cxtemp1,cxlea si,XHtempmov cx,16mov sitemp,simov ditemp,direpe cmpsbjz f3startmov si,sitempmov di,ditempadd di,64mov cx,cxtemp1loop Lf3;can not findlea si,f3str1call putscall newlinejmp f3Qf3start: ;f4,f2mov cx,64mov di,ditemplea si,formsbrep movsbcall f1f3Q:retf4:call cscreenlea si,f4str2call putslea si,XHtemplea di,formscall getsmov cx,100Lf4: mov cxtemp1,cxlea si,XHtempmov cx,16mov sitemp,simov ditemp,direpe cmpsbjz f4startmov si,sitempmov di,ditempadd di,64mov cx,cxtemp1loop Lf4;can not findlea si,f3str1call putscall newlinejmp f4Qf4start:mov cx,64mov di,ditemplea si,formsbrep movsbf4Q: lea si,XHtempblea di,XHtempmov cx,16rep movsblea si,fstr1call putscall newlinelea si,fstr2call putscall newlinecall inputretf5: call cscreen ;copy file to memerylea si,f5str1call putslea si,filenamecall getsmov bx,0lea si,filenamemov bl,ds:[si+1]mov al,0mov ds:[si+bx+2],almov dx,siinc dxinc dxmov ah,3dhmov al,0int 21hjnc succeed1fail:lea si,f5str2call putscall newlinejmp f5Qsucceed1:mov handle,axlea si,f5str3call putslea dx,formsmov bx,handlemov cx,6000mov ah,3fhint 21hjnc succeed2lea si,f5str5call putscall newlinemov bx,handlemov ah,3ehint 21hjmp f5Qsucceed2:lea si,f5str4call putscall newlinemov bx,handlemov ah,3ehint 21hjmp f5Qf5Q:lea si,fstr2call putscall newlinecall inputretf6: call cscreen ;copymemery to filelea si,f5str1call putslea si,filenamecall getsmov bx,0lea si,filenamemov bl,ds:[si+1]mov al,0mov ds:[si+bx+2],allea dx,filenameinc dxinc dxmov cx,0mov ah,3chint 21hjnc suclea si,f5str5call putscall newlinejmp f6Qsuc: mov handle,axlea dx,formsmov bx,axmov ah,40hmov cx,6400int 21hjnc suc2lea si,f6str2call putscall newlinemov bx,handlemov ah,3ehint 21hjmp f6Qsuc2: lea si,f6str1call putscall newlinemov bx,handlemov ah,3ehint 21hf6Q: lea si,fstr2call putscall newlinecall inputretprts0: ;显示界面0mov ah,06hmov al,0mov bh,0fhmov ch,0mov cl,0mov dh,39mov dl,79int 10hmov ah,02hmov bh,0mov dh,16mov dl,0int 10hlea ax,screen0mov si,axcall putsret cscreen:mov ah,06hmov al,0mov bh,0fhmov ch,0mov cl,0mov dh,52mov dl,79int 10hmov ah,02hmov bh,0mov dh,0mov dl,0int 10hretputs: mov ah,9mov dx,siint 21hretgets: m ov ah,10mov dx,siint 21hcall newlineretinput: mov ah,1int 21hmov tempio,alret newline:mov ah,2mov dl,0dhint 21hmov ah,2mov dl,0ahint 21hret ;;;;;;;;;;;;;;;;;;; code endsend start。

相关文档
最新文档