汇编语言版学生管理系统

合集下载

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

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

北京邮电大学计算机学院《微机原理与接口技术》学生信息管理系统实验报告姓 名: 许伟林学 号: 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 第三版

深入理解计算机系统 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版卜艳萍)参考答案汇编语言程序设计教程(第3版)习题参考答案第1章汇编语言基础知识思考与练习1. 计算机系统分哪几个层次?简述计算机系统的硬件结构。

1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层硬件系统是指构成计算机系统的物理实体或物理装置。

它由控制器、运算器、存储器、输入设备和输出设备等部件构成。

2. 简述用汇编语言进行程序设计的必要性。

1) 程序要具有较快的执行时间,或者只能占用较小的存储容量。

例如,操作系统的核心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。

2) 程序与计算机硬件密切相关,程序要直接、有效地控制硬件。

例如,I/O接口电路的初始化程序段,外部设备的低层驱动程序等。

3) 大型软件需要提高性能、优化处理的部分。

例如计算机系统频繁调用的子程序、动态连接库等。

4) 没有合适的高级语言或只能采用汇编语言的时候。

例如,开发最新的处理器程序时,暂时没有支持新指令的编译程序。

5) 汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等。

3. 汉字编码主要分哪几类?每类的功能如何?汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。

1) 为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用西文标准键盘上的字母数字串表示汉字的编码。

目前,汉字输入编码方法主要有三种:数字编码、拼音编码和字形编码。

2) 汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标码。

无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标识每个汉字。

3) 汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息处理系统内部存储、处理、传输汉字用的编码。

4) 字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。

汇编个人信息管理系统

汇编个人信息管理系统

汇编实验实验名称:简单个人信息管理系统,要求有添加、列出、查找、删除、退出等基本功能实验目的:使学生能够很好的掌握汇编语言,对汇编语言有更深入的了解实验代码:DATA SEGMENTA DB 5 DUP (10 DUP(20H),5 DUP(20H),8 DUP(20H),5DUP(20H),1 DUP(20H),5 DUP(20H),3 DUP(20H),2 DUP(20H),'$')B DB 39 DUP(20H),'$'CAIDAN DB'**********************************************************',10,13 DB ' please choose this following choices ',10,13DB ' (1) L:list record (2) S:seacher record ',10,13DB ' (3) A:add record (4) D:delete record ',10,13DB ' (5) Q:quit ',10,13DB'**********************************************************',10,13,'$' ID DB 10 DUP(?)NAME1 DB 8 DUP(?)SEX DB ?AGE DB 3 DUP(?)ID1 DB 'please input the id:$'NAME2 DB 'please input the name:$'SEX1 DB 'please input the sex:$'AGE1 DB 'please input the age:$'EXIST DB 'the id is existing:$'CHOICE DB 'the choice is:$'HID DB 'search success!$'ADDS DB 'add success!$'NEX DB 'the ID not exists!$'DELETE DB 'please input the delete ID:$'SUD DB 'ARE YOU SURE TO DELETE IT?(Y/N)$'C DB 'press any key to continue...$'DELETES DB 'delete success!$'LISTS DB 'list success!$'SEARCH DB 'please input the search id:$'FLIST DB 'the list is full!$'NLIST DB 'the list is null!$'ROW DW 0NUMBER DW 0XIANSHI1 DB ' ID NAME SEX AGE',10,13,24H DATA ENDSCRLF MACROPUSH DXPUSH AXMOV AH,2MOV DL,10INT 21HMOV DL,13INT 21HPOP AXPOP DXENDMXIANSHI MACROPUSH DXPUSH AXMOV DL,ALMOV AH,2INT 21HPOP AXPOP DXENDMCRLF1 MACRO PPPUSH DXPUSH AXLEA DX,PPMOV AH,9INT 21HPOP AXPOP DXENDMCRLF2 MACRO XX: MOV AH,7INT 21HCMP AL,30HJB XCMP AL,39HJA XMOV DL,ALMOV AH,2INT 21HMOV ID[SI],ALINC SILOOP XENDMCODE SEGMENTASSUME DS:DATA,CS:CODE,ES:DATASTART: MOV AX,DATAMOV DS,AXMOV ES,AX;开始;**************************************************** BEGIN: CRLFCRLF1 CAIDANCRLFCRLF1 CHOICEBEGIN1: MOV AH,7INT 21HCMP AL,'A'JE ADDIDJMP NEXTFULL1: CRLF1 FLISTCRLFJMP CONTINUE1;输入IDADDID: XIANSHIB2: MOV AH,7INT 21HCMP AL,13JE C1JMP B2C1: CRLFMOV CX,10MOV SI,0CMP ROW,4JA FULL1CRLF1 ID1CRLF2 IN2;ID是否重复MOV DX,0 ;比较次数 MOV BX,-40COMPARE: ADD BX,40CMP DX,ROWJE STOREINC DXMOV CX,10LEA SI,IDLEA DI,A[BX]CLDREPZ CMPSBJNZ COMPARECRLFCRLF1 EXISTCRLFJMP CONTINUE1CONTINUE1: CRLF1 CMOV AH,7INT 21HCRLFJMP BEGIN;存入ID;******************************************************************* STORE: MOV NUMBER,BXLEA SI,IDLEA DI,A[BX]MOV CX,10CLDREP MOVSBB1: MOV AH,7INT 21HCMP AL,13JE NJMP B1; 存入姓名;******************************************************************** N: CRLFCRLF1 NAME2NA: MOV AH,7INT 21HCMP AL,'A'JB NACMP AL,'Z'JA NAXIANSHIMOV A[BX+15],ALMOV CX,7MOV SI,0NA1: MOV AH,7INT 21HCMP AL,13JE SE1JB NACMP AL,'Z'JA NAMOV A[BX+SI+16],ALINC SIXIANSHILOOP NA1;存入性别;************************************************SE1: CRLFCRLF1 SEX1SE2: MOV AH,7INT 21HCMP AL,'F'JE SE3CMP AL,'M'JE SE3JMP SE2SE3: XIANSHICRLFMOV A[BX+28],AL;存入年龄;****************************************************** CRLF1 AGE1AG1: MOV AH,7INT 21HCMP AL,'0'JBE AG1CMP AL,'9'JA AG1XIANSHIMOV A[BX+34],ALMOV CX,2MOV SI,0AG2: MOV AH,7INT 21HJE ADDS1CMP AL,'0'JB AG2CMP AL,'9'JA AG2MOV A[BX+SI+35],ALINC SIXIANSHILOOP AG2ADDS1: CRLFCRLF1 ADDSCRLFINC ROWJMP CONTINUE1;********************************************************************* NEXT: CMP AL,'Q'JE EXITCMP AL,'L'JE LIST2JMP NEXT1NLIST1: CRLF1 NLISTCRLFJMP CONTINUE1EXIT: XIANSHIMOV AX,4C00HINT 21H;显示;******************************************************************* LIST2: XIANSHIB3: MOV AH,7INT 21HCMP AL,13JE C2JMP B3C2: CRLFJB NLIST1CRLF1 XIANSHI1MOV BX,-40MOV CX,0BACK: CMP CX,ROWJE ACT2ADD BX,40CRLF1 A[BX]CRLFINC CXJMP BACKLISTS1: CRLF1 LISTSCRLFJMP CONTINUE1NEXT1: CMP AL,'S'JE SEARCH1JMP NEXT2ACT2: JMP CONTINUE1NLIST2: JMP NLIST1;查找ID这个是我负责的模块;*************************************************************** SEARCH1: XIANSHI ;调用7号功能,如果输入是S是则调用宏XIANSHI显示SB4: MOV AH,7 ;显示完S后回车INT 21HCMP AL,13JE C3JMP B4C3: CRLF ;调用宏CRLF显示回车换行CMP ROW,0 ;row是记录人数的即表的行数,当人数等于零就为空表跳到NLIST2,显示表空JE NLIST2CRLF1 SEARCH ;显示表头MOV CX,10MOV SI,0CRLF2 IN3 ;输入IDB8: MOV AH,7 ;输入回车INT 21HCMP AL,13JE C7JMP B8C7: CRLF比较思路:dx记录比较次数,比较完一次就加一,然后进行字符串匹配,如果匹配,剧显示查找功能,如果不比配就继续比较,当比较的次数等于行数时,就比较完所有的ID,此时,要查找的ID不存在MOV DX,0 ;比较次数MOV BX,-40COMPARE1: ADD BX,40CMP DX,ROWJE OUTPUT1INC DXMOV CX,10LEA SI,IDLEA DI,A[BX]CLDREPZ CMPSBJNZ COMPARE1CRLF1 HIDCRLFCRLF1 XIANSHI1CRLF1 A[BX]CRLFJMP CONTINUE1OUTPUT1: CRLF1 NEXCRLFJMP CONTINUE1NEXT2: CMP AL,'D'JE DELETE1JMP BEGIN1JMP ACTNLIST3: JMP NLIST2OUTPUT2: JMP OUTPUT1;****************************************************************** ;删除IDDELETE1: XIANSHIB5: MOV AH,7INT 21HCMP AL,13JE C4JMP B5C4: CRLFCMP ROW,1JB NLIST3CRLF1 DELETEMOV CX,10MOV SI,0CRLF2 IN4B7: MOV AH,7INT 21HCMP AL,13JE C6JMP B7C6: CRLFMOV DX,0 ;比较次数MOV BX,-40COMPARE2: ADD BX,40CMP DX,ROWJE OUTPUT2INC DXMOV CX,10LEA SI,IDLEA DI,A[BX]CLDREPZ CMPSBJNZ COMPARE2CRLF1 SUDCRLFMOV AH,7INT 21HCMP AL,'Y'JE DELETE2CMP AL,'N'JE ACTDELETE2: LEA DI,A[BX]MOV BX,NUMBERLEA SI,A[BX]MOV CX,40CLDREP MOVSBLEA DI,A[BX]LEA SI,BMOV CX,40CLDREP MOVSBSUB NUMBER,40DEC ROWCRLF1 DELETESCRLFACT: JMP CONTINUE1;******************************************************* CODE ENDSEND START实验运行结果:。

学生成绩管理系统设计实验(汇编语言)

学生成绩管理系统设计实验(汇编语言)

实验六学生成绩管理系统设计实验一、实验目的1、熟悉汇编语言程序结构;2、熟悉INT 21H的文件操作功能调用;3、熟悉INT 21H的1、9号功能和INT 10H常用功能的使用方法;4、掌握多子程序复杂问题程序设计方法;5、掌握利用汇编语言实现字符串的输入输出程序设计方法;6、了解多模块程序设计方法。

二、实验原理我们把可以多次调用、具有通用性、能完成特定功能的程序段编写成的独立程序模块称为子程序。

子程序是把一个程序划分成若干模块所用的主要手段,它便于独立设计、测试程序和编制程序文件。

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

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

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

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

2、程序流程图3、程序代码程序代码如下:DATAS SEGMENTMSG1 DB '1. Append a record$'MSG2 DB '2. Display a record$'MSG3 DB '3. Modify a record$'MSG4 DB '4. Delete a record$'MSG5 DB '5. Create file$'MSG6 DB '6. Return DOS$'MSGC DB 'Please input 1--6:$'MSGE DB 'Error!$'MSGC1 DB 'Please input filename:$'MAXLEN DB 25ACTLEN DB ?STRING DB 25 DUP(?)MAXLEN1 DB 25ACTLEN1 DB ?STRING1 DB 25 DUP(?)PATHNM DB 'D:\chengji\2009\\',23 DUP(?)PATH DB 'D:\chengji\2009\2009doc.dat',00MSGA1 DB 'Please input XH:$'MSGA2 DB 'Please input XM:$'MSGA3 DB 'Please input SX:$'MSGA4 DB 'Please input YW:$'MSGA5 DB 'Please input WY:$'HANDLE DW ?MSGXH DB 'Xuehao: $'MSGXM DB 'Xingming: $'MSGSX DB 'Shuxue:$'MSGYW DB 'Yuwen: $'MSGWY DB 'Waiyu: $'BUFFER DB 2048 DUP(' ')MSGRT DB 'Press any key to return!$'DELSTR DB 33 DUP(' ') DATAS ENDSSTACKS SEGMENT STACKDB 256 DUP(?)STACKS ENDS CODES SEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;******************************** ;主程序MAIN PROC FARS:;清屏CALL CLS ;逐行输出提示信息MOV AH,02HMOV DH,9MOV DL,30INT 10HMOV AH,9LEA DX,MSG1INT 21HMOV AH,02HMOV DH,10MOV DL,30INT 10HMOV AH,9LEA DX,MSG2INT 21HMOV AH,02HMOV DH,11MOV DL,30INT 10HMOV AH,9LEA DX,MSG3INT 21HMOV AH,02HMOV DH,12MOV DL,30INT 10HMOV AH,9LEA DX,MSG4INT 21HMOV AH,02HMOV DH,13MOV DL,30INT 10HMOV AH,9LEA DX,MSG5INT 21HMOV AH,02HMOV DH,14MOV DL,30INT 10HMOV AH,9LEA DX,MSG6INT 21H;提示输入MOV AH,02HMOV DH,15MOV DL,30INT 10HMOV AH,9LEA DX,MSGCINT 21H;从键盘读入一个数字MOV AH,02HMOV DH,15MOV DL,48INT 10HMOV AH,1INT 21H;按数字对应子程序CMP AL,31HJZ CAPPENDCMP AL,32HJZ CDISPLAYCMP AL,33HJZ CMODIFYCMP AL,34HJZ CDELETECMP AL,35HJZ CCREATECMP AL,36HJZ E;若输入不是1-6数字,则提示错误MOV AH,02HMOV DH,16MOV DL,30INT 10HMOV AH,9LEA DX,MSGEINT 21HCCREATE:CALL CREATEJMP SCDELETE:CALL DELETEJMP SCMODIFY:CALL MODIFYJMP SCDISPLAY:CALL DISPLAYJMP SCAPPEND:CALL APPENDJMP SE:MOV AH,4CHINT 21HMAIN ENDP;******************************** ;CREATE程序CREATE PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIPUSH DI;清屏CALL CLS;提示输入文件名MOV AH,2MOV DH,12MOV DL,20INT 10HMOV AH,9LEA DX,MSGC1INT 21H;从键盘读入文件名字符串MOV AH,0AHLEA DX,MAXLENINT 21H;将文件名字符串加到ASCIZ字符串末尾MOV CX,0MOV CL,ACTLENLEA SI,STRINGLEA DI,PATHNMADD DI,16LCREATE:MOV AL,BYTE PTR [SI]MOV [DI],ALINC DIINC SILOOP LCREATE;在ASCIZ字符串末尾加00MOV BYTE PTR [DI],0;按ASCIZ字符串创建文件MOV AH,3CHLEA DX,PATHNMMOV CX,0INT 21HPOP DIPOP SIPOP DXPOP CXPOP AXRETCREATE ENDP;******************************** ;APPEND程序APPEND PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DI;清屏CALL CLS;打开文件(只写)MOV AH,3DHMOV AL,01HLEA DX,PATHINT 21HMOV HANDLE,AX;提示输入学号MOV AH,02HMOV DH,10MOV DL,30INT 10HMOV AH,9LEA DX,MSGA1INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,4CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入姓名MOV AH,02HMOV DH,11MOV DL,30INT 10HMOV AH,9LEA DX,MSGA2INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,15CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入语文成绩MOV AH,02HMOV DH,12MOV DL,30INT 10HMOV AH,9LEA DX,MSGA3INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入数学成绩MOV AH,02HMOV DH,13MOV DL,30INT 10HMOV AH,9LEA DX,MSGA4INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;提示输入外语成绩MOV AH,02HMOV DH,14MOV DL,30INT 10HMOV AH,9LEA DX,MSGA5INT 21H;从键盘读入字符串MOV AH,0AHLEA DX,MAXLENINT 21H;在字符串末尾补足空格MOV DX,3CALL FILL;在字符串末尾加回车、换行INC SIMOV BYTE PTR [BX+SI],0DHINC SIMOV BYTE PTR [BX+SI],0AHADD ACTLEN,2;将文件指针定位至文件末尾MOV AH,42HMOV AL,2MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;写入文件MOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETAPPEND ENDP;******************************** DISPLAY PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入学号MOV AH,02HMOV DH,10MOV DL,28INT 10HMOV AH,9LEA DX,MSGXHINT 21H;从键盘读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(只读)MOV AH,3DHMOV AL,00HLEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针定位至文件开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;将文件载入缓存MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中找到对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JZ OUTPUT;若未找到,则提示错误MOV AH,9LEA DX,MSGEINT 21HJMP DEND;显示对应信息OUTPUT:MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGXMINT 21HADD SI,5MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,12 MOV DL,28INT 10HMOV AH,9LEA DX,MSGYW INT 21HADD SI,16MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,13 MOV DL,28INT 10HMOV AH,9LEA DX,MSGSX INT 21HADD SI,4MOV AH,9MOV DX,SIINT 21HMOV AH,02H MOV DH,14 MOV DL,28INT 10HMOV AH,9LEA DX,MSGWY INT 21HADD SI,4MOV AH,9MOV DX,SIINT 21HMOV AH,2MOV DH,15MOV DL,28INT 10HMOV AH,9LEA DX,MSGRTINT 21HMOV AH,1INT 21HDEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETDISPLAY ENDP;******************************** MODIFY PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入学号MOV AH,02HMOV DH,10MOV DL,28INT 10HMOV AH,9LEA DX,MSGXHINT 21H;从键盘读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(读写)MOV AH,3DHMOV AL,10LEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针定位至文件开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;将文件载入缓存MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中找到对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JZ REVISEXM;若未找到,则提示错误MOV AH,9LEA DX,MSGEINT 21HJMP MEND;修改姓名REVISEXM:MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGXMINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DH ;若为回车,则将指针指向下一字段JNZ XMCONTADD SI,5JMP REVISEYWXMCONT:PUSH SIMOV DX,15CALL FILLPOP SIADD SI,5LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改语文成绩REVISEYW:MOV AH,02HMOV DH,12MOV DL,28INT 10HMOV AH,9LEA DX,MSGYWINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJNZ YWCONTADD SI,16JMP REVISESXYWCONT:PUSH SIMOV DX,3CALL FILLPOP SIADD SI,16LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改数学成绩REVISESX:MOV AH,02HMOV DH,13MOV DL,28INT 10HMOV AH,9LEA DX,MSGSXINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJNZ SXCONTADD SI,4JMP REVISEWYSXCONT:PUSH SIMOV DX,3CALL FILLPOP SIADD SI,4LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21H;修改外语成绩REVISEWY:MOV AH,02HMOV DH,14MOV DL,28INT 10HMOV AH,9LEA DX,MSGWYINT 21HMOV AH,0AHLEA DX,MAXLENINT 21HCMP BYTE PTR [STRING],0DHJZ MENDPUSH SIMOV DX,3CALL FILLPOP SIADD SI,4LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21HMOV AH,40HMOV BX,HANDLEMOV CX,0MOV CL,ACTLENLEA DX,STRINGINT 21HMEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETMODIFY ENDP;******************************** ******************************** **************DELETE PROC NEARPUSH AXPUSH DX;清屏CALL CLS;提示输入姓名MOV AH,02HMOV DH,11MOV DL,28INT 10HMOV AH,9LEA DX,MSGA2INT 21H;读入姓名字符串MOV AH,0AHLEA DX,MAXLEN1INT 21H;提示输入学号MOV AH,02HMOV DH,12MOV DL,28INT 10HMOV AH,9LEA DX,MSGA1INT 21H;读入学号字符串MOV AH,0AHLEA DX,MAXLENINT 21H;打开文件(读写)MOV AH,3DHMOV AL,10LEA DX,PATHINT 21HMOV HANDLE,AX;将文件指针指向开头MOV AH,42HMOV AL,0MOV BX,HANDLEMOV CX,0MOV DX,0INT 21H;载入文件MOV AH,3FHMOV BX,HANDLEMOV CX,2048LEA DX,BUFFERINT 21H;在缓存中搜索学号对应记录LEA SI,BUFFERLEA DI,STRINGMOV CX,AXCALL SEARCHCMP DX,0JNZ DELEND;比较该记录对应姓名是否与输入的相同PUSH SIADD SI,5LEA DI,STRING1MOV CX,0MOV CL,ACTLEN1MOV DX,0LCHECK:MOV AL,[SI]MOV AH,[DI]CMP AL,AHJZ LCONTIMOV DX,1JMP DELERRLCONTI:INC SIINC DILOOP LCHECKPOP SICMP DX,0JZ DEL;姓名不对应则提示错误DELERR:MOV AH,9LEA DX,MSGEINT 21HJMP DELENDDEL:;将文件指针定位至该记录开始处LEA BX,BUFFERMOV DX,SISUB DX,BXMOV AH,42HMOV AL,00MOV BX,HANDLEMOV CX,00INT 21H;将该记录覆盖为空格MOV AH,40HMOV BX,HANDLEMOV CX,33LEA DX,DELSTRINT 21HDELEND: ;关闭文件MOV AH,3EHMOV BX,HANDLEINT 21HPOP DXPOP AXRETDELETE ENDP;******************************** ;清屏程序CLS PROC NEARPUSH AXPUSH BXPUSH CXPUSH DX;屏幕初始化MOV AH,6MOV AL,0MOV BH,7MOV CX,0MOV DX,2479HINT 10H;重定位光标MOV DX,0MOV AH,2INT 10HPOP DXPOP CXPOP BXPOP AXRETCLS ENDP;******************************** ;搜索程序;若找到对应记录,则将DX赋为0,并将SI指向该记录首地址;否则DX 赋为1。

计算机导论 第3章 计算机软件系统

计算机导论  第3章 计算机软件系统

二、发展过程
软件的发展受到应用和硬件发展的推劢和制约,其发展过程大致可 分为三个阶段:
第一阶段 1946-1958 第一个程序出现→实用 的高级程序设计语言出 现,这期间重点考虑程 序本身,尚未出现软件 一词。
第二阶段 1956-1968 实用的高级程序设计语 言出现→软件工程出现 ,这期间出现软件一词 ,融程序及其有关的文 档于一体。 软件危机
三、常用的操作系统
操作系统是现代计算机必丌可少的系统软件, 它是计算机的灵魂所在。 1.操作系统的诞生--盘古开天地 最初的操作系统出现在IBM704大型机上. 微型计算机的操作系统则诞生于20世纨70年代-CP/M。它能够进行文件管理,具有磁盘驱劢装置,
可控制磁盘的I/O,显示器的显示以及打印的输出。
UNIX发展简图
UNIX系统的框架结构
5.诱人的小企鹅--Linux 1991年,芬兰赫尔辛基大学的21岁学生Linus Torvolds在学习操作系统时,将自己开发的Linux系统源 程序完整地上传到FTP服务器上,供大家下载测试。
Operating Systems: Design and Implementation Andrew S. Tanenbaum & Albert S. Woodhull
第三阶段 1968以后 软件工程出现→现在, 1968年大西洋公约学 术会议提出软件工程。
三、软件的分类
软件主要分为系统软件和应用软件。 系统软件又分为:操作系统、语言处理系统、数 据库管理系统、软件工具等。 应用软件又包括:应用软件包和用户程序。

系统软件:居于计算机系统中最靠近硬件的 一层,其他软件一般通过系统软件发挥作用。如 操作系统、编译程序、网络软件系统、数据库系 统、人机交互软件系统等。 此外还包括一些支 撑软件,如环境数据库、各种接口软件和工具组 等。 应用软件:特定应用领域专用的软件。

汇编语言程序设计教程(第二版)习题参考答案

汇编语言程序设计教程(第二版)习题参考答案

汇编语言程序设计教程(第二版)习题参考答案第1章计算机基础知识1.计算机的应用分哪几个方面,请举例说明书中未提到的领域的计算机应用。

科学计算、数据处理、计算机控制、计算机辅助设计、人工智能、企业管理、家用电器、网络应用。

书中未提及的如:远程教育、住宅小区控制、飞行系统控制与管理等。

2.简述计算机的发展过程,请查阅相关资料,列出微机的发展过程。

电子管、晶体管、集成电路、大规模集成电路以IBM为例,微机的发展:4004、8008、8080、8086/8088、80286、80386、80486、Pentium 系列3.计算机的字长是怎么定义的,试举例说明。

计算机能同时处理二进制信息的位宽定义为计算机的字长。

如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。

4.汇编语言中的基本数据类型有哪些?数值型数据和非数值型数据。

非数值数据如字符、字符串、逻辑值等。

(1)7BCH=011110111100B=1980D(2)562Q=101110010B=370D(3)90D=01011010B=5AH(4)1110100.111B=164.7Q=74.EH30H~39H 41H~5AH 61H~7AH9.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值?用相应进制的数值加上进制标记即可。

二进制用B,如10101010B八进制用Q,如437Q。

十进制用D或不用,如54D,或54。

十六进制用H,如27A8H10.完成下列二进制数的加减运算。

(1)10101010 + 11110000 (2)11001100 + 01010100=110011010 =100100000(3)11011010 - 01010010 (4)11101110 - 01001101=10001000 =1010000111.完成下列十六进制数的加减运算。

(1)0FEA9 - 8888=7621H (2)0FFFF - 1234=EDCBH(3)0EAC0 + 0028=EAE8H (4)3ABC + 1678=5134H12.完成下列BCD码的运算。

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

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

学生成绩治理体系【2 】目次设计内容1设计目标1设计请求2设计剖析2子程序剖析6操作解释9程序代码10总结33参考文献33设计内容设计一个学生成绩治理程序,请求能实现以下功效:1)各科成绩的录入,修正和删除.2)按姓名查询每个学生各门课的成绩.3)显示查询成果.4)统计个分数段的人数.5)打印学生成绩.设计目标用汇编数据的录入.修正和删除操作.设计请求进修若何用汇编说话进行数据处理.设计剖析1.总体构造全部程序采用主程序挪用子程序的办法.主程序完成菜单的显示,子程序完成一个自力功效办法的实现.各子程序的实现办法扼要描写如下:1)设计INSERT(录入)子程序,先打开文件SCORE.TXT,并置文件指针到文件尾,然后挪用GET_REC子程序接收用户的输入,再把用户的输入写入文件,最后封闭文件返回主程序.2)设计Delete(删除)子程序,先打开文件,再挪用宏GETIN得到要删除的学生的姓名,然后读文件中的记载,直到其记载的名字与所输入的名字雷同为止,把文件指针撤退退却8个字符(即4门课成绩所占的空间),写入8个“0”字符,封闭文件返回主程序.3)设计List(阅读)子程序时,先打开文件,然后读一个记载,并经由过程挪用宏SHOW_ITEM将其显示到屏幕上,入文件指针没有到达文件尾,则持续读记载并显示,当指针到达文件尾时,则封闭文件返回主程序.4)设计Modify(修正)子程序时,先打开文件SCORE.TXT,通用GER_REC得到要修正的记载,然后读文件中的记载,并与用户输入的记载做比较(只比较记载中的名字部分),若不同则吨下一笔记载,若雷同则将文件指针撤退退却23个字符(一个记载为23个字符的长度),然后把用户输入的记载写入文件,最后封闭文件返回主程序.5)设计Count(统计)子程序时,先打开文件,然后读记载,比较记载的第16个字符,数学成绩的高位),并统计,直到文件指针到达文件尾,最后封闭文件挪用宏SHOW_ITEM显示统计成果,返会主程序.6)设计Query(查询)子程序时,先打开文件,经由过程挪用宏GETIN得到要查找学生的姓名,然后读文件记载,并同要查找的学生姓名比较,若雷同则输出,若不同持续读文件记载,最后显示查询成果,封闭文件返回程序.别的还有打印的分数段人数统计,这些联合后面的子程序功效剖析做具体介绍.图1是本设计显示记载的界面图1 学生成绩治理体系界面程序流程图如图2所示进口A ) List 流程图B ) Insert 流程图YNYNNY在大型的程序中,为了使程序清楚.可读性好,一般会大量应用宏和子程序,是以,充分懂得这些宏和子程序,才能控制程序的编制办法.2.宏的剖析本题中应用了下列宏,其感化如下: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,BUFFER2LEA DI.BUFFER1MOV 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 management system',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 dl,36mov bh,0int 10hendmset_p2 macro ;设光标于(12,2)mov ah,2mov dh,12mov dl,2mov bh,0int 10hendmset_p3 macro ;设光标于(1,30)mov ah,2mov dh,1mov dl,30mov bh,0int 10hendmclear macro ;清全部屏幕mov al,0mov cl,0mov ch,0mov dh,24mov dl,79mov bh,7mov ah,6int 21hendmclear1 macro ;清右上记载输入区mov al,0mov bh,7mov ch,4mov cl,36mov dh,10mov dl,79mov ah,6int 10hendmclear2 macro ;清下半部分记载显示区mov al,0mov bh,7mov ch,12mov cl,0mov dh,24mov dl,79int 10hendmnewline macro ;回车换行push axpush dxmov dl,0dhmov ah,2int 21hmov ah,2int 21hpop dxpop axendmshow_item macro addrs ;在指定地位显示记载local iloop,w10push bxpush cxmov bx,0iloop: mov dl,addrs[bx] ;显字符串mov ah,2int 21hinc bxcmp bx,15jl iloopmov cx,4w10: mov dl,' 'mov ah,2int 21hmov dl,' 'mov ah,2int 21hmov dl,' 'int 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:data start: mov ax,datamov ds,axmov ah,0 ;设显示模式80*25mov al,3int 10hclearshow mess1show mess2show mess13show mess3show mess4show mess5show mess6show mess7show mess8show mess9newlineshow mess10set_p3w: mov ah,7int 21hcmp al,'i'jnz n1call insertjmp wn1: cmp al,'m'jnz n2call modifyjmp wn2: cmp al,'d'jnz n3call deletejmp wn3: cmp al,'q'jnz n4call queryjmp wn4: cmp al,'c'jnz n5call cotjmp wn5: cmp al,'p'jnz n6call printjmp wn6: cmp al,'l'jnz n7call listjmp wn7: cmp al,'e'jz exitfjmp wexitf: mov ah,4chint 21hretmain endpinsert proc nearpush axpush bxpush cxpush dxmov dx,offset fnamemov al,2mov ah,3dh ;打开文件int 21hmov bx,axclear1set_p1 4call get_recmov cx,0 ;指针移到文件尾mov dx,0mov al,2mov ah,42hint 21hmov cx,23 ;写文件mov dx,offset buffer1mov ah,40hint 21hmov ah,3eh ;封闭文件int 21hset_p3pop dxpop cxpop bxpop axretinsert endpget_rec proc nearpush axpush bxgetin buffer2,15 ;输入姓名mov bx,0mov cx,15continue: mov al,buffer2[bx]mov buffer1[bx],alinc bxloop continueset_p1 5getin buffer2,2 ;输入数学成绩mov al,buffer2mov buffer1[bx],alinc bxmov 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+1inc 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 21hset_p2getin buffer1,15 ;取姓名到buffr1中lea dx,mess11mov ah,9int 21hb: mov ah,3fh ;读文件mov cx,23 ;读23个字节(记载长度mov dx,offset buffer2 ;放在buffer2中int 21hlea si,buffer2lea di,buffer1mov cx,15 ;轮回次数c: mov al,byte ptr[si]cmp al,byte ptr[di] ;比较buffer1和buffer2jnz b ;不同则转binc siinc diloop cmov [buffer2+23],'$'show_item buffer2mov ah,3ehint 21hpop dxpop cxpop 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 ;读取输入内容放在buffer1 read: mov dx,offset buffer2mov cx,23mov ah,3fh ;读文件,记载内容放在buffer2 int 21hlea si,buffer2 ;比较姓名是否雷同lea di,buffer1mov cx,15c5: mov dl,byte ptr[si]cmp dl,byte ptr[di]jnz readinc siinc diloop c5mov bx,handlemov ah,42h ;回移文件指针mov al,1mov cx,0ffffhmov dx,-23int 21hmov cx,23mov dx,offset buffer1mov ah,40h ;写入修正记载int 21hmov ah,3ehint 21hjmp exit2exit1: set_p2show err1exit2: set_p3pop dxpop cxpop bxpop axretmodify endpdelete proc nearpush axpush bxpush cxpush dxclear1set_p1 4mov dx,offset fnamemov al,2mov ah,3dh ;打开文件int 21hmov bx,axmov handle,axgetin buffer1,15 ;读取键盘输入放在buffer1 read5: 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] 西安:西安电子科技大学出版社,2007.35、王成瑞等.汇编说话程序设计[M] 北京:高级教导出版社,2003。

汇编语言程序设计 基于arm体系结构 pdf

汇编语言程序设计 基于arm体系结构 pdf

汇编语言程序设计基于arm体系结构pdf1. 引言1.1 概述汇编语言程序设计是计算机科学中重要的一环,它提供了对底层硬件的直接控制能力。

在这个数字化时代,我们生活在嵌入式系统和移动设备无处不在的时代。

ARM体系结构作为一种广泛应用于嵌入式系统和移动设备中的处理器架构,需求人员必须具备ARM汇编语言的基本开发技巧。

1.2 文章结构本文将深入探讨ARM体系结构下汇编语言程序设计的基础知识及其实践应用。

文章分为五个主要部分:- ARM体系结构概述:简要介绍ARM体系结构的发展历程、关键特点以及应用领域。

- 汇编语言基础知识:详细讲解ARM汇编语言中数据类型与运算指令、寄存器与内存访问、分支和循环指令等基本概念。

- ARM汇编语言程序设计实例解析:通过实例解析阐述ARM汇编语言程序结构与组成部分、寄存器使用示范以及内存访问案例分析等内容。

- 实践应用与未来展望:分享ARM汇编语言在嵌入式系统开发中的应用实例,并展望ARM技术的发展趋势和面临的挑战。

- 总结与建议:对文章进行总结,并给出学习ARM汇编语言程序设计的建议。

1.3 目的本文旨在帮助读者全面了解ARM体系结构下汇编语言程序设计的基本原理和操作方法。

通过学习此类知识,读者可以掌握ARM汇编语言的核心概念和技巧,提升在嵌入式系统、移动设备等领域中的开发能力。

同时,本文也将分享一些实践经验和未来发展趋势,为读者提供更多参考和启示。

无论是初学者还是有一定经验的开发人员,都可以从本文中获益并得到有益的指导。

2. ARM体系结构概述:2.1 发展历程:ARM(Advanced RISC Machine)体系结构起源于上世纪80年代末,最初由英国公司Acorn Computer开发。

早期的ARM处理器主要用于个人电脑领域。

随着技术的不断进步和市场需求的扩大,ARM逐渐应用于各种移动设备和嵌入式系统中,并取得了巨大成功。

2.2 关键特点:ARM体系结构有一些关键特点使其在市场上受到广泛认可。

汇编试验报告-学生信息管理系统

汇编试验报告-学生信息管理系统

学生信息管理系统1.实验类别使用汇编语言编程2.实验内容和实验目的学生的信息包括姓名、班级、学号和成绩,其中成绩精确到1位小数。

编写程序实现以下功能:(1)可以录入学生的信息,成绩以十进制形式录入,并显示;(2)可以按成绩进行排序显示;(3)可以统计平均成绩;(4)可以统计不及格、60~70、70~80、80~90、90~100各分数段的人数。

3.实验设备环境Windows 7 操作系统的pc 机,使用 QASM270编译器环境下编写。

4.实验实现过程及方法首先数据采用二维数组的形式进行存储,分为学生信息部分与成绩部分。

然后将输入学生数也保存在一个一维数组中。

然后再信息的存储过程中,对于字符串输入进行转换,以二进制的形式存储在数据段中。

然后采用冒泡排序,对于数据段中的人员信息进行排序。

以成绩为参数。

然后再对每个人员成绩进行遍历,统计各个数据层次中人员数,然后再成绩遍历的同时,将平均成绩也同时求出,在求平时成绩的时候,首先先将整数部分乘 10 然后再加上小数部分,以便于后续的输出。

将排序后的人员信息及成绩显示出来,然后将平均成绩也同时打印出来,还有各个分数层次中的人员数也都一并显示出来。

下面是一些主要代码来实现上述过程:; 数据部分NUMBER DB 3 DUP(0);第一个存个/ 十位 (ASCII码 ) ,第二个存个位(ASCII码 ) ,第三个存学生数( 二进制);用 20字节单元表示学生信息, 0-19 中: 0对应最大字符, 1对应实际输入, 2-18 对应输入信息, 19对应 '$'INFORMATION DB99 DUP(20 DUP(0)); 用 7字节单元来存分数, 0-6 中, 0-4 对应输入字符, 5对应输入整数部分的二进制数, 6 对应于小数部分的二进制数GRADE DB99 DUP(7 DUP(0))AVERAGE_GRADE_BUFFER DB 2 DUP(0);第一个存整数部分( 二进制形式) ,STORE_STUDENT_NUM; 存储学生总数, 结果送cx 中STORE_STUDENT_INFORMATION;存储学生信息STORE_STUDENT_GRADE存;储每个学生成绩SORT_DISPLAY ;;采用冒泡排序显示结果FIND_RESULT ;显示平均成绩和分段人数关键算法的流程图:关于分段人数与总成绩的计算冒泡排序算法:处理计算计算总成绩Y< 60?A++NY< 70?B++NY< 80?C++NY< 90?D++NY 处理排序冒泡i=0Ki<=Ki+1Y N交换i++N i=counte rY返回<=100E++N错误返回5.效果图输入三人信息,班级学好姓名,然后输入此人成绩。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

关键字:学生成绩管理,插入,查找,删除,退出,修改;目录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系统开发背景学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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调试过程使用说明:根据界面输入字母即可调用全部功能总结:这学期通过学习汇编程序设计,使我认识到它是计算机语言里的第一个语言。

相关文档
最新文档