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

北京邮电大学计算机学院《微机原理与接口技术》学生信息管理系统实验报告姓 名: 许伟林学 号: 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变量记录已输入的学生人数。
汇编学生管理系统实验报告

《汇编语言程序设计》综合程序设计实验报告题目:简单学生成绩管理一、项目简介本程序为一简单的学生成绩管理程序,通过学生姓名对学生成绩进行相应的增删改查操作,同时加入音乐程序让系统更加生动、形象。
语言为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五、总结本次大作业采用汇编语言编写一比较大型的程序,采用数组、栈等形式进行操作,从开始设计到实现,我们复习到了课本上学到的知识,也对没有学到的图形和声音的应用领域有了一些涉猎。
计算机操作系统简介

计算机操作系统简介计算机操作系统简介⼀、为什么要有操作系统 现代的计算机系统主要是由⼀个或多个处理器、主存、硬盘、键盘、显⽰器、打印机、⽹络接⼝及其他输出设备组成的。
现代计算机系统是⼀个⾮常复杂的系统,程序员不可能掌握该系统所有的细节,这样会严重影响程序员的开发效率,根本没有时间去编写代码。
管理计算机的这些部件并加以优化使⽤,是⼀件极富挑战的⼯作,于是,计算机安装了⼀层软件,即系统软件,称为操作系统。
他的任务就是为⽤户程序提供⼀个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。
作为程序员,不可能把所有的硬件操作细节都了解并掌握,管理这些硬件并且加以使⽤是⾮常繁琐的⼯作,这部分的⼯作就是操作系统来做的。
有了操作系统,程序员就能够从这些繁琐的⼯作中解脱出来,只需要考虑⾃⼰的应⽤软件的编写就可以了,应⽤软件直接使⽤操作系统提供的功能来间接使⽤硬件。
⼆、什么是操作系统 操作系统就是⼀个协调、管理和控制硬件资源和软件资源的控制程序。
操作系统的位置: 操作系统位于计算机应⽤与应⽤软件之间,本质上也是⼀个软件。
操作系统有操作系统的内核(运⾏于内核态,管理硬件资源)以及系统调⽤(运⽤于⽤户态,为⽤户程序员写的应⽤程序提供系统调⽤接⼝)两部分组成。
所以,单纯的说操作系统是运⾏于内核态的,是不准确的。
操作系统可分为两部分功能: 1、隐藏了丑陋的硬件调⽤接⼝,为应⽤程序员提供调⽤硬件资源的更好、更简单、更清晰的模型(系统调⽤接⼝)。
应⽤程序员有了这些接⼝后,就不⽤再考虑操作硬件的细节,专⼼开发⾃⼰的应⽤程序即可; ⽐如,磁盘资源的抽象是⽂件系统(C盘、D盘、E盘....下的⽬录及⽂件),有了⽂件的概念,我们直接打开⽂件、读或者写就可以了,⽆需关系记录是否应该使⽤修正的调频记录⽅式,以及当前电机的状态等细节。
操作系统的实际客户是应⽤程序(应⽤程序员负责开发应⽤程序,因⽽也可以说应⽤程序员是操作系统的客户)。
深入理解计算机系统 pdf 第三版

深入理解计算机系统 pdf 第三版深入理解计算机系统第三版本书是Bryant和O'Hallaron所著的《深入理解计算机系统》第三版。
这本书涵盖了计算机系统的许多重要领域,包括计算机组成、操作系统和网络。
通过对这些基本概念的深入探讨,读者将能够更好地理解计算机系统的工作原理,并学会如何设计高效和可靠的系统。
本书的第一部分介绍了计算机系统的基本概念,如位和字节的表示、指令集架构、存储器层次结构和系统级I/O。
读者将学会如何使用不同的表示形式来表示数字,如有符号和无符号整数、浮点数和字符串。
此外,本书还详细介绍了指令集架构的基本原理和机器级程序的执行过程。
通过对存储器层次结构和系统级I/O的讨论,读者将了解如何提高系统的性能和可扩展性。
第二部分深入研究了计算机系统的内存层次结构和存储管理技术。
本书介绍了主存、虚拟存储器、动态存储分配和缓存技术。
读者将学会如何利用虚拟存储器来管理有限的物理内存资源,并了解动态存储分配的原理和实现。
此外,本书还介绍了缓存技术的工作原理和性能优化策略,让读者能够设计高效的存储系统。
第三部分探讨了计算机系统的机器级表示和优化技术。
本书介绍了整数和浮点数的表示和计算、程序的机器级表示和汇编语言编程。
此外,本书还深入讨论了程序的运行时环境和陷阱处理,以及如何利用编译器进行性能优化。
第四部分涵盖了计算机系统的操作系统和网络。
本书介绍了操作系统的基本概念和功能,如进程管理、内存管理和文件系统。
读者将了解操作系统如何管理资源、提供服务和保护系统的安全性。
此外,本书还介绍了计算机网络的基本原理和协议,如IP、TCP和HTTP。
通过对这些关键概念的深入探讨,读者将能够理解计算机系统之间如何进行通信和共享资源。
《深入理解计算机系统》第三版不仅适合计算机科学和工程专业的学生,也适合对计算机系统工作原理感兴趣的读者。
阅读本书后,读者将对计算机系统的各个方面有更深入的理解,并能够应用所学知识设计和优化高效和可靠的系统。
计算机信息管理专业毕业论文参考选题

计算机信息管理专业毕业论文参考选题课题一:学生成绩网上发布系统实现目标:(1)允许教学秘书或任课老师将成绩(Excel格式),直接导入网上后台数据库(Orac le或MySQL);(2)能够完成各种统计(针对教学秘书、任课老师、系主任、主管院长分别进行统计)(3)学生在网上通过浏览器在学期结束后查看自己各门课程的成绩(4)实现各种系统维护功能(如添加、删除用户等)所需背景知识:数据库(SQL)、客户/服务器三层应用系统模式,PHP或ASP、HTML、Javascript、SSL等。
学生人数:3-5人课题二:题目:学分制学生选课系统实现目标:(1)实现各种选课规则(2)各年级学生能根据自己已许课程,在网上完成新学年(学期)需学课程的选择;在规定截止时间内改选某些课程等(3)能完成各种统计(4)实现各种系统维护功能(如添加、删除用户等)所需背景知识:数据库(SQL)、客户/服务器三层应用系统模式,PHP或ASP、HTML、Javascript、SSL等。
学生人数:3-5人题目三:用K-JAVA开发手机应用程序背景知识:java是sun公司开发出发一种较新的计算机编程语言,K-JAVA即J2MF(Java2Micro Edition),是专门用于嵌入式设备的JA VA软件。
目前,许多著名是手机生产厂家都开发JAVA手机,例如摩托罗拉6288和388,西门子的66881等。
JAV A手机支持软件开发商以K-JA VA编程语言为手机开发应用程序。
目标:本题目要求学生使用K-JAV A开发JAV A手机游戏,个人信息处理,股票,电子地图,英汉词典,背单词等服务程序。
题目四:学生学籍管理系统要求系统能完成:(1)学生注册管理。
包括新生录入、学生注册、学生变动等管理。
(2)教学计划管理。
包括教学计划的录入、修改、查询和输出。
(3)学生成绩管理。
包括成绩录入,校对、查询和输出。
(4)毕业管理。
能根据教学计划自动完成毕业班学生的学分计算、审核、输出毕业生成绩登记表和毕业生名册。
汇编语言课程设计---学生成绩管理程序

郑重声明:本篇文档为从百度文库中下载的经过原文修改后的!目录第一章设计课题概述 (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键将按数学成绩分段结果。
汇编语言学生成绩管理系统程序

;此版本解决输入分数时输入错不能更改的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。
汇编语言程序设计教程(第3版 卜艳萍)参考答案

汇编语言程序设计教程(第3版卜艳萍)参考答案汇编语言程序设计教程(第3版)习题参考答案第1章汇编语言基础知识思考与练习1. 计算机系统分哪几个层次?简述计算机系统的硬件结构。
1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层硬件系统是指构成计算机系统的物理实体或物理装置。
它由控制器、运算器、存储器、输入设备和输出设备等部件构成。
2. 简述用汇编语言进行程序设计的必要性。
1) 程序要具有较快的执行时间,或者只能占用较小的存储容量。
例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。
2) 程序与计算机硬件密切相关,程序要直接、有效地控制硬件。
例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等。
3) 大型软件需要提高性能、优化处理的部分。
例如计算机系统频繁调用的子程序、动态连接库等。
4) 没有合适的高级语言或只能采用汇编语言的时候。
例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。
5) 汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。
3. 汉字编码主要分哪几类?每类的功能如何?汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。
1) 为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。
目前,汉字输入编码方法主要有三种:数字编码、拼音编码和字形编码。
2) 汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。
无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。
3) 汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。
4) 字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程实习报告实习题目学生成绩管理系统学生姓名班级(学号)院系指导老师提交时间成绩目录题目一:学生成绩管理系统 (3)二、总体设计 (4)程序主界面: (7)主程序流程图 (12)详细设计 (14)菜单模块 (14)输入模块 (15)主程序代码 (17)调试过程 (28)总结: (31)参考文献: (32)题目一:学生成绩管理系统基本功能: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 dw0avg dw0student 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功能描述:退出成绩管理系统主程序流程图详细设计菜单模块student strucnames db 18 dup ('$')maths dw?english dw?chinese dw?total dw0avg dw0student endsDATAS SEGMENTstu_array student 10 dup(<>)recname db 18 dup('$')num db 0num1 dw0num2 dw0num3 dw0num4 dw0num5 dw0num6 dw0rec 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,10 db'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,10 db'---------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 21hretquery_char endp;**********************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;**************************** query proc nearscur1 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:mov 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,'$'call 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,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,chxch1: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,放在sis: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,ahmul blmov bx,axscur sculea dx,stu_array[bx].namesadd dx,2mov ah,09int 21hscur3 scubindec ranknumcrlfmov sum[si],0pop bxretfmax endp调试过程使用说明:根据界面输入字母即可调用全部功能总结:这学期通过学习汇编程序设计,使我认识到它是计算机语言里的第一个语言。