ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:184.61KB ,
资源ID:1830149      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1830149.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(汇编语言显示学生名次表实验报告.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

汇编语言显示学生名次表实验报告.docx

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中保存,打印

3、输出是可以使用。5、将score1中成绩的十进制数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 mo

4、v cx,0 call input 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

5、(0),$ ;成绩缓冲区 sname db p dup(n+1 dup(0) ;保存姓名 score1 dw p dup(m+1 dup(0) ;保存成绩 score2 dw p dup(m+1 dup(0) mingci db p dup(0) ;名次 x dw ? sign1 dw 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

6、;输入姓名 mov ah,10 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 buff

7、2si,0 ;将od换为0,便于输出显示 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

8、movsb mov cx,n 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 ;成绩的

9、位数,cx and cx,000fh ;保留低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

10、 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,mingcisi xchg al,mingcisi+1 ;交换成绩 mov mingcisi,alnext:add bx,m+1 ;下一个成绩 inc si loop loop2

11、pop cx ;恢复外循环次数 loop loop1 ret sort endp 子程序子程序5(PRINT):打印排序名单 print proc lea dx,infor0 ;显示结果提示 mov ah,9 int 21h mov cx,p mov bx,0 mov ax,0 mov di,0rept3: mov dl,0ah ;回车换行 mov ah,2 int 21h mov dl,0dh int 21h mov dl,cont ;显示名次序号 mov ah,2 int 21h inc cont mov dl,0ah ;回车换行 mov ah,2 int 21h mov dl,0dh i

12、nt 21h mov ax,0 mov al,mingcidi ;取名次 dec al ;位置-1,因为地址从0开始 mov bl,9 ;姓名位置=al9(包含$) mul bl lea dx,sname add dx,ax ;偏移地址+姓名位移量 mov ah,9 ;显示名字 int 21h mov dl,0ah ;回车换行 mov ah,2 int 21h mov dl,0dh int 21h mov ax,0 mov bx,0 mov al,mingcidi ;取名次 dec al ;地址从0开始 mov bl,5 ;成绩位移量=al5(包含$) mul bl lea dx,score1

13、 add dx,ax ;显示成绩 mov ah,9 int 21h inc di loop rept3 retprint endpcodes endsEND START 流程图运行结果:实验体会:在复杂的程序设计中,采用模块化结构可以划分功能、分界程序,使得程序有复杂变简单,变清晰。主程序和子程序之间嵌套使用,使得写代码时思路更清楚明白,读代码时方便快捷清晰明了。这点跟高级编程语言类似。而此程序中变量p可以跟踪并控制输入的人数、输名字要预留缓存区、十进制码要和二进制码间相互转换,这些又体现了编程低级语言的特点。学习汇编语言,重要的事掌握如何通过汇编指令和程序来控制计算机各个组成部件工作,完成一

14、系列任务。因此,学习汇编用语言与学习高级语言的不同之处是要学习如何深入到计算机的内部进行控制。通过这次实验,加深了我对汇编语言的理解。每一步的输入、存储、转换、输出,都需要一条条的汇编指令执行。而且每一步都有自己的源和目标的地址,每个数据都有自己的存储空间和地址,我们可以很清晰的“跟踪”每一个数据的变化和地址的转移。程序:DATA 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 m,?,m dup(0),$ ;成绩缓冲区 sname db p dup(n+1 dup(0) ;保存姓名 score

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1