




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
综合性实验报告实 验 报 告 课程名称 汇 编 语 言 实验学期 2014 至 2015 学年 第 1 学期学生所在系部 计算机学院网络工程系 年级 三年级 专业班级 网络B121 学生姓名 学号 任课教师 实验成绩 计算机学院制 汇 编 语 言课程综合性实验报告实验题目显示学生名次表一、实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序、子程序、宏指令编程方法,提高汇编语言程序设计能力的应用水平。二、设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 2012三、实验内容 编制一程序,要求接收从键盘输入的一个班的学生的学号、姓名、成绩,对学生的成绩进行排序,最后把学号、姓名、学生成绩、名次显示出来。 实验要求:1.必须画流程图。2.本程序涉及汇编语言的多重循环、子程序及宏,其中 成绩输入、计算学生名次、显示学生名次都分别用子程序,也可用宏处理。3.要求用菜单选择。具体要求:输入1是数据录入并输出(包括姓名、学号、成绩);输入2是排序后的数据输出(包括姓名、学号、成绩、名次);输入3是可以按学号查找某学生,并输出其成绩,选择修改或不改成绩。四、实验结果及分析1.已实现的实验功能:数据录入并输出(包括姓名、学号、成绩)排序后的数据输出(包括姓名、学号、成绩、名次)可以按学号查找某学生,并输出其成绩2.程序思路:程序中设定的名字是英文的,需要小于9位字母,学号位数为8位,学生人数为3个,可以通过改变p的值改变学生人数。1、本程序包括一个主程序和九个子程序。子程序包括INPUT键盘输入、COPY数据转存、CHANGE十进制数ASCII码转二进制、SORT按成绩排序、PRINT0成绩未排名输出、PRINT成绩排名后输出、CCIN学号查找,存储输入学号和BJ进行串比较并输出姓名成绩。2、姓名和成绩输入分别用DOS中被调用的10号功能实现字符串输入。在输入最后字符后,要将回车符改为$,以便输出时直接用9号功能显示姓名和成绩。3、用buffer0、buffer1和buffer2作为输入的学号、姓名和成绩的缓存区,然后将所有学号、人名和成绩用串传送指令转到sid、smane和score1中保存。4、将score1中成绩的十进制数ASCII码转换为二进制数score2.5、将score2中的成绩排序,同时将保存在mingci中的输入次序号也一起交换,以次序号作为排序指针,在sid、smane和score1中查找相应的人名和成绩。6、打印排序名单时,从mingci中取出次序号作为位移量,到sid、smane和score1中取出姓名和对应的成绩用9号功能显示。排序后mingci中先取出的次序号一定是成绩最高的人的,依次类推。7、将ccsid1作为输入要查找的学号的缓存区,然后学号串传送给ccsid2,同时按照mingci中存储的次序依次将sid中的学号存入ccid中,并将其与ccid2进行串比较,如果匹配相同将mingci中的数据保存,从而输出其姓名和成绩,如果不匹配就退出程序。3.程序截图:1.菜单2.输入3.排序后输出4.查找4.关键代码解释mov cx,d+1lea si,buff0+2lea di,sidadd di,sign0cldrep movsbmov cx,dmov ax,$lea di,buff0+2rep stosbbuff0 db d,?,d dup(0),$ ;学号缓冲区sid db p dup(d+1 dup(0) ;保存学号buff0为输入学号的缓冲区,?中保存着输入的数字个数,最后以$结尾方便输出时在此终止,不会读取到其他学号区域。在sid保存的每个学号长度都是相同的,只需要用mingci中的输入次序乘以间隔值sign0,就可以得到每个学号的启示地址,从而输出,其他输入输出同理。mov cx,pdec cxloop1:push cxmov bx,0mov si,0loop2:mov ax,score2bxcmp ax,score2bx+m+1jge nextxchg ax,score2bx+m+1mov score2bx,axmov al,mingcisixchg al,mingcisi+1mov mingcisi,alnext:add bx,m+1inc siloop loop2pop cxloop loop1子程序change的目的是把分数转换成二进制数存入score2,方便比较,而子程序sort通过双重循环对score2中各个数值的比较,从改变mingci中的各个输入序数的排列位置,从而达到对各个学生按照分数进行排序的目的。mov cx,pmov bx,0kd: push cxmov al,mingcibxmov z,alinc bxmov o,bxdec almov dl,10mul dlmov cx,10lea si,sidadd si,axlea di,ccidcldrep movsblea si,ccid2lea di,ccidcldmov cx,10repe cmpsbjz kd1pop cxmov bx,oloop kd如上的代码在子程序bj中,通过对mingcibx取值,使用循环按照顺序取出每个学生的学号存入ccid中,而需要查找的学号存放在ccid2中,然后循环cx次,每都将ccid与ccid2进行串比较,如果两个串相匹配,则跳到kd1同时将保存着输入次序的z赋值给l进行输出,从而达到学号查询学生姓名和成绩的目的。流程图: 主程序: 排序子程序:子程序sort主程序开始cx=p-1初始化,输出菜单Y=1?保存外循环数Nai=score2Call inputaiai+1?Y=2?Call print0NYscore2中成绩互换Y=3?mingci中名次互换NNi=i+1Call sortCall print0内循环结束?Y=4?N恢复外循环次数外循环结束?NCall ccinCall bjRET返回程序结束实验体会:这学期开设的汇编语言课程使我了解了计算机的组成和其内部程序的执行原理,通过汇编语言,我们可以通过基本的指令改变计算机寄存器的值以及读写内存从而实现我们的所想要达到的功能,学习汇编用语言与学习高级语言的不同之处是要学习如何深入到计算机的内部进行控制。同时在编程过程中我们要区分哪些寄存器能在这种寻址方式下使用,在此次程序设计中要使用到大量的寄存器进行数据的存储,比较,交换和输出。在如此复杂的程序设计中,我们可以通过使用子程序和模块化结构使得功能得以划分。使得复杂的程序变简单,变清晰,让我们方便的读懂代码。使用主程序的调用和子程序嵌套,使得写代码时思路更加清晰,也不会导致各个功能之间寄存器的使用不至于混乱,同时让我们阅读程序时一目了然,方便对代码的修改和检错。本程序中变量p可以控制输入的人数,同时定义各个数据的缓存区间和存储区间,同时也是能很方便的将个个数据从等长的存储区间里读取出来。十进制码要和二进制码间相互转换方便进行比较,这些又体现在计算机内部数据的存储都是以二进制存在的,学习汇编语言,最基础的就是对数据的处理,这涉及到输入后对数据的运算和处理,对数据没有正确的处理会导致程序运行的最终结果与期望值不一样,同时,学习汇编语言时最重要的是灵活的运用汇编指令和程序来控制计算机各个组成部件工作,完成一系列的工作。在这次实验中,加深了我对汇编语言的理解,通过解决实验中出现的每个问题,让我对计算机内部存储方式有了更深了的理解,每一步的输入、存储、转换、输出,都对应着相应的地址指针运算,确定各个源地址和目的地址。每个数据都有自己的存储空间和地址,我们可以很清楚的了解每一个数据的变化和地址的转移。教 师 评 价评定项目ABCD评定项目ABCD算法正确操作熟练程序结构合理实验结果正确功能完善文字流畅、报告规范其他: 评价教师签名: 2014 年12月 10 日DATAS SEGMENTmenu db 0ah,0dh,MENU:,0ah,0dh,1.INPUT.,0ah,0dh,2.PRINT BEFROE SORT.,0ah,0dh,3.PRINT AFTER SORT.,0ah,0dh,4.SELET FROM ID.,0ah,0dh,5.EXIT!,0ah,0dh,$ifor db 0ah,0dh,before sort:$ ifor0 db 0ah,0dh,after sort:$ ifor3 db 0ah,0dh,input id:$ ifor1 db 0ah,0dh,input name:$ ifor2 db 0ah,0dh,input sorce:$ error db 0ah,0dh,error$ ws1 db id:$ ws2 db name:$ ws3 db sorce:$ d equ 9 ;学号长度(8位+回车符) n equ 8 ;姓名长度 m equ 4 ;成绩长度(3位+回车符) p equ 3 ;输入的人数 q equ 3 ;成绩位数 buff0 db d,?,d dup(0),$ ;学号缓冲区 buff1 db n,?,n dup(0),$ ;姓名缓冲区 buff2 db m,?,m dup(0),$ ;成绩缓冲区 sid db p dup(d+1 dup(0) ;保存学号 sname db p dup(n+1 dup(0) ;保存姓名 score1 dw p dup(m+1 dup(0) ;保存成绩 score2 dw p dup(m+1 dup(0) ;以ascii码保存成绩便于比较 ccid1 db d,?,d dup(0),$ ccid2 db d+1 dup(0) ccid db d+1 dup(0) mingci db p dup(0) x dw ? y db ? z db ? o dw ? l db ? sign0 dw 0 sign1 dw 0 sign2 dw 0 cout db 1 DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,es:datasstart:main proc far MOV AX,DATAS MOV DS,AX mov es,ax mov bx,0 mov cx,0nem:lea dx,menumov ah,9int 21hMOV AH,1 INT 21H SUB AL,30H MOV y,al cmp y,1 ja jet1 call input jmp nemjet1:cmp y,2ja jet2call print0jmp nemjet2:CMP Y,3JA jet3 call sort call print jmp nemjet3:cmp y,4ja out1call ccincall bj ;此处输入代码段代码out1: MOV AH,4CH INT 21Hmain endp;输入学号,姓名,成绩input procinc bxcmp bx,pja exitlea dx,ifor3mov ah,9int 21hlea dx,buff0mov ah,10int 21hmov al,buff0+1add al,2mov ah,0mov si,axmov buff0si,0lea dx,ifor1mov ah,9int 21hlea dx,buff1mov ah,10int 21hmov al,buff1+1add al,2mov ah,0mov si,axmov buff1si,0lea dx,ifor2mov ah,9int 21hlea dx,buff2mov ah,10int 21hmov al,buff2+1add al,2mov ah,0mov si,axmov buff2si,0mov mingcibx-1,blcmp bx,1jz let1add sign0,d+1add sign1,n+1add sign2,qlet1:call copyjmp inputexit:retinput endp;数据转存copy procmov cx,d+1lea si,buff0+2lea di,sidadd di,sign0cldrep movsbmov cx,dmov ax,$lea di,buff0+2rep stosbmov cx,n+1lea si,buff1+2lea di,snameadd di,sign1cldrep movsbmov cx,nmov ax,$lea di,buff1+2rep stosbmov cx,m+1lea si,buff2+2lea di,score1add di,sign2cldrep movsblea si,buff2+2mov di,sign2call changeretcopy endp;把成绩转换为2进制数,便于比较change procmov x,0mov cx,si-1and cx,000fhrept2:mov al,sicmp al,30hjl exit1cmp al,39hjg exit1and ax,000fhxchg ax,xmov dx,10mul dxadd x,axinc siloop rept2mov ax,xmov score2di,axmov x,0add sign2,2exit1:retchange endp;输出排序前的名单print0 proclea dx,iformov ah,9int 21hmov cx,pmov bx,0mov ax,0mov di,0rept3:mov dl,0ahmov ah,2int 21hmov dl,0dhint 21hlea dx,ws1mov ah,9int 21hmov ax,0mov bx,0mov al,mingcididec almov bl,10mul bllea dx,sidadd dx,axmov ah,9int 21hmov dl,0ahmov ah,2int 21hmov dl,0dhint 21hlea dx,ws2mov ah,9int 21hmov ax,0mov bx,0mov al,mingcididec almov bl,9mul bllea dx,snameadd dx,axmov ah,9int 21hmov dl,0ahmov ah,2int 21hmov dl,0dhint 21hlea dx,ws3mov ah,9int 21hmov ax,0mov bx,0mov al,mingcididec almov bl,5mul bllea dx,score1add dx,axmov ah,9int 21hinc didec cxcmp cx,0jbe exitp2jmp rept3exitp2:retprint0 endp;按程序排序sort procmov cx,pdec cxloop1:push cxmov bx,0mov si,0loop2:mov ax,score2bxcmp ax,score2bx+m+1jge nextxchg ax,score2bx+m+1mov score2bx,axmov al,mingcisixchg al,mingcisi+1mov mingcisi,alnext:add bx,m+1inc siloop loop2pop cxloop loop1retsort endp;输出排序后的名单print proclea dx,ifor0mov ah,9int 21hmov cx,pmov bx,0mov ax,0mov di,0rept31:mov dl,0ahmov ah,2int 21hmov dl,0dhint 21hmov dl,coutmov ah,2int 21hinc coutmov dl,0ahmov ah,2int 21hmov dl,0dhint 21hlea dx,ws1mov ah,9int 21hmov ax,0mov bx,0mov al,mingcididec almov bl,10mul bllea dx,sidadd dx,axmov ah,9int 21hmov dl,0ahmov ah,2int 21hmov dl,0dhint 21hlea dx,ws2mov ah,9int 21hmov ax,0mov bx,0mov al,mingcididec almov bl,9mul bllea dx,snameadd dx,axmov ah,9int 21hmov dl,0ahmov ah,2int 21hmov dl,0dhint 21hlea dx,ws3mov ah,9int 21hmov ax,0mov bx,0mov al,mingcididec almov bl,5mul bllea dx,score1add dx,axmov ah,9int 21hinc didec cxcmp cx,0jbe exitpjmp rept31exitp:retprint en
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 提高护理文书书写品管圈
- 苏州市苏州实验中学2025年高三年级第六次月考生物试题含解析
- 沈阳师范大学《动画场景设计》2023-2024学年第二学期期末试卷
- 枣强中学高二下学期第三次月考数学(理)试题
- 手术室常用护理操作技术
- 2025大学生应如何审慎签订劳动合同以确保自身权益
- 2025物料提升机租赁合同模板
- 2025年详尽工作时间规定合同制员工劳动合同
- 2025职业院校食堂餐饮服务外包合同协议
- 2025深圳市水果种植订购合同范本
- 2025年濮阳职业技术学院高职单招语文2019-2024历年真题考点试卷含答案解析
- 2025年高考思辨作文备考之17例高级思辨素材
- (甘肃二诊)2025年甘肃省高三月考试卷(4月)物理试卷(含官方答案)
- 2025年全国国家版图知识竞赛题库及答案(中小学组)
- 2025年重庆渝开发股份有限公司招聘笔试参考题库含答案解析
- MOOC 成长中的音乐徜徉-浙江师范大学 中国大学慕课答案
- 深圳市失业人员停止领取失业保险待遇申请表空表
- 强电(电气照明)系统施工工艺流程(共18页)
- 纪检监察日常工作系列表格模板
- 近年财务状况表
- 建标 110-2021 综合医院建设标准
评论
0/150
提交评论