汇编语言显示学生名次表实验报告讲解

上传人:最**** 文档编号:114716045 上传时间:2019-11-12 格式:DOC 页数:21 大小:435.50KB
返回 下载 相关 举报
汇编语言显示学生名次表实验报告讲解_第1页
第1页 / 共21页
汇编语言显示学生名次表实验报告讲解_第2页
第2页 / 共21页
汇编语言显示学生名次表实验报告讲解_第3页
第3页 / 共21页
汇编语言显示学生名次表实验报告讲解_第4页
第4页 / 共21页
汇编语言显示学生名次表实验报告讲解_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《汇编语言显示学生名次表实验报告讲解》由会员分享,可在线阅读,更多相关《汇编语言显示学生名次表实验报告讲解(21页珍藏版)》请在金锄头文库上搜索。

1、湖北科技学院计算机学院 汇编语言课程设计 课题题目: 显示学生名次表 学生姓名: 学 号: 班 级: 2013年 12 月26日一、 实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。二、 设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 2010三、实验内容实验内容: 编制一程序,要求接收从键盘输入的一个班的学生成绩和学号,对学生的成绩进行排序,再按学号顺序和学生名次顺序分别把学生成绩显示出来。四、实验结果及分析实验功能:从键盘输入学生姓名和成绩,按照成绩的高低排名显示输出。程序

2、中设定的名字是英文的,需要小于9位字母,学生人数为3个。程序思路:1、本程序包括一个主程序和五个子程序。子程序包括INPUT键盘输入、COPY数据转存、CHANGE十进制数ASCII码转二进制、SORT按成绩排序和PRINT打印班级名单。2、用变量p控制输入的学生的个数。本程序中,p=3。3、姓名和成绩输入分别用DOS中被调用的10号功能实现字符串输入。在输入最后字符后,要将回车符改为0,以便输出时直接用9号功能显示姓名和成绩。4、用buffer1和buffer2作为键入的姓名和成绩的缓存区,然后将所有人名和成绩用串传送指令转到smane和score1中保存,打印输出是可以使用。5、将scor

3、e1中成绩的十进制数ASCII码转换为二进制数score2. 6、将score2中的成绩排序,同时将保存在mingci中的输入次序号也一换,以次序号作为排序指针,在smane和score1中查找相应的人名和成绩。7、打印排序名单时,从mingci中取出次序号作为位移量,到smane和score1中取出姓名和对应的成绩用9号功能显示。排序后mingci中先取出的次序号一定是成绩最高的人的,其他类推。程序代码、代码解析及流程图主程序: 流程图:START:main proc farMOV AX,DATAS MOV DS,AX mov es,ax mov bx,0 mov cx,0 call inp

4、ut call sort call print mov ah,4ch int 21hmain endp数据段定义:DATAS SEGMENT infor0 db 0ah,0dh,sort= $ infor1 db 0ah,0dh,input name: $ infor2 db 0ah,0dh,input score:$ n equ 15 ;姓名长度 m equ 4 ;成绩长度(3位+回车) p equ 4 ;输入的人数(4个 q equ 3 ;成绩位数 buff1 db n,?,n dup(0),$ ;姓名缓冲区,加$以便输出 buff2 db n,?,n dup(0),$ ;成绩缓冲区 sn

5、ame db p dup(n+1 dup(0) ;保存姓名 score1 dw p dup(m+1 dup(0) ;保存成绩 score2 dw p dup(m+1 dup(0) mingci db p dup(0) ;名次 x dw ? sign1 dw 0 sign2 dw 0 cont db 1 ;计数DATAS ENDS子程序(INPUT) 1:输入姓名、成绩input proc inc bx ;输入次数统计 cmp bx,p ;输入次数 ja exit lea dx,infor1 ;显示提示1 mov ah,9 int 21h lea dx,buff1 ;输入姓名 mov ah,10

6、 int 21h mov al,buff1+1 ;实际输入个数,al add al,2 ;+2,包含buffer1的0,1号单元 mov ah,0 mov si,ax ;回车od所在位置,跟在最后一个字符后 mov buff1si,0 ;将od换为0,便于输出显示 lea dx,infor2 ;显示提示2 mov ah,9 int 21h lea dx,buff2 ;输入成绩 mov ah,10 int 21h mov al,buff2+1 ;实际输入个数 add al,2 ;个数+2,包含0,1单元找到od mov ah,0 mov si,ax mov buff2si,0 ;将od换为0,便

7、于输出显示 mov mingcibx-1,bl ;bx为输入次数,保存输入次序 cmp bx,1 ;第一次输入转let1 jz let1 add sign1,n+1 ;姓名间隔为n+1 add sign2,q ;成绩间隔为qlet1: call copy ;子程序嵌套 jmp inputexit: retinput endp流程图: 子程序2(COPY):数据转存copy proc mov cx,n+1 ;姓名长度+1(包含$) lea si,buff1+2 lea di,sname ;姓名传送到sname add di,sign1 ;加上间隔值 cld rep movsb mov cx,n

8、mov ax,$ ;用$覆盖姓名区,清除已输入的姓名 lea di,buff1+2 rep stosb mov cx,m+1 ;成绩位数+1(包含s) lea si,buff2+2 lea di,score1 ;成绩传送到scorel add di,sign2 ;加上间隔值 cld rep movsb lea si,buff2+2 mov di,sign2 call change ;二进制成绩,scorel2 retcopy endp流程图:子程序3(CHANGE):十进制数ASCII码二进制change proc mov x,0 mov cx,si-1 ;成绩的位数,cx and cx,00

9、0fh ;保留低4位rept2: mov al,si ;按位取出成绩 cmp al,30h ;是否在09之间 jl exit1 cmp al,39h jg exit1 and ax,000fh ;去掉ASCII码 xchg ax,x mov dx,10 ;将ax中前一次形成的数扩大10倍 mul dx add x,ax ;保存到x inc si loop rept2 mov ax,x ;按十进制形成的成绩以二进制保存 mov score2di,ax ;二进制成绩送入score2 mov x,0 add sign2,2 ;下一个成绩单exit1: retchange endp 流程图 子程序4(SPORT):按成绩排序 sort proc mov cx,p ;数组长度 dec cxloop1:push cx ;保存外循环次数 mov bx,0 mov si,0loop2:mov ax,score2bx cmp ax,score2bx+m+1 ;m+1=5 jge next ;降序 xchg ax,score2bx+m+1;交换成绩 mov score2bx,ax mov al,mingci

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号