《汇编语言综合实验报告格式.doc》由会员分享,可在线阅读,更多相关《汇编语言综合实验报告格式.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实 验 报 告 课程名称 汇 编 语 言 实验学期 2014 至 2015 学年 第 1 学期学生所在系部 计算机学院网络工程系 年级 三年级 专业班级 网络B121 学生姓名 学号 任课教师 实验成绩 计算机学院制 汇 编 语 言课程综合性实验报告实验题目显示学生名次表一、实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序、子程序、宏指令编程方法,提高汇编语言程序设计能力的应用水平。二、设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 2012三、实验内容 编制一程序,要求接收从键盘输入的一个班的学生的学号、姓名、成绩,对学生的成绩进
2、行排序,最后把学号、姓名、学生成绩、名次显示出来。 实验要求:1.必须画流程图。2.本程序涉及汇编语言的多重循环、子程序及宏,其中 成绩输入、计算学生名次、显示学生名次都分别用子程序,也可用宏处理。3.要求用菜单选择。具体要求:输入1是数据录入并输出(包括姓名、学号、成绩);输入2是排序后的数据输出(包括姓名、学号、成绩、名次);输入3是可以按学号查找某学生,并输出其成绩,选择修改或不改成绩。四、实验结果及分析1.已实现的实验功能:数据录入并输出(包括姓名、学号、成绩)排序后的数据输出(包括姓名、学号、成绩、名次)可以按学号查找某学生,并输出其成绩2.程序思路:程序中设定的名字是英文的,需要小
3、于9位字母,学号位数为8位,学生人数为3个,可以通过改变p的值改变学生人数。1、本程序包括一个主程序和九个子程序。子程序包括INPUT键盘输入、COPY数据转存、CHANGE十进制数ASCII码转二进制、SORT按成绩排序、PRINT0成绩未排名输出、PRINT成绩排名后输出、CCIN学号查找,存储输入学号和BJ进行串比较并输出姓名成绩。2、姓名和成绩输入分别用DOS中被调用的10号功能实现字符串输入。在输入最后字符后,要将回车符改为$,以便输出时直接用9号功能显示姓名和成绩。3、用buffer0、buffer1和buffer2作为输入的学号、姓名和成绩的缓存区,然后将所有学号、人名和成绩用串
4、传送指令转到sid、smane和score1中保存。4、将score1中成绩的十进制数ASCII码转换为二进制数score2.5、将score2中的成绩排序,同时将保存在mingci中的输入次序号也一起交换,以次序号作为排序指针,在sid、smane和score1中查找相应的人名和成绩。6、打印排序名单时,从mingci中取出次序号作为位移量,到sid、smane和score1中取出姓名和对应的成绩用9号功能显示。排序后mingci中先取出的次序号一定是成绩最高的人的,依次类推。7、将ccsid1作为输入要查找的学号的缓存区,然后学号串传送给ccsid2,同时按照mingci中存储的次序依次将
5、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为输入学号的缓冲区,?中保存着输入的数字个数,最后以$结尾方便输出
6、时在此终止,不会读取到其他学号区域。在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 loop2po
7、p 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
8、 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?ming
9、ci中名次互换NNi=i+1Call sortCall print0内循环结束?Y=4?N恢复外循环次数外循环结束?NCall ccinCall bjRET返回程序结束实验体会:这学期开设的汇编语言课程使我了解了计算机的组成和其内部程序的执行原理,通过汇编语言,我们可以通过基本的指令改变计算机寄存器的值以及读写内存从而实现我们的所想要达到的功能,学习汇编用语言与学习高级语言的不同之处是要学习如何深入到计算机的内部进行控制。同时在编程过程中我们要区分哪些寄存器能在这种寻址方式下使用,在此次程序设计中要使用到大量的寄存器进行数据的存储,比较,交换和输出。在如此复杂的程序设计中,我们可以通过使用子程
10、序和模块化结构使得功能得以划分。使得复杂的程序变简单,变清晰,让我们方便的读懂代码。使用主程序的调用和子程序嵌套,使得写代码时思路更加清晰,也不会导致各个功能之间寄存器的使用不至于混乱,同时让我们阅读程序时一目了然,方便对代码的修改和检错。本程序中变量p可以控制输入的人数,同时定义各个数据的缓存区间和存储区间,同时也是能很方便的将个个数据从等长的存储区间里读取出来。十进制码要和二进制码间相互转换方便进行比较,这些又体现在计算机内部数据的存储都是以二进制存在的,学习汇编语言,最基础的就是对数据的处理,这涉及到输入后对数据的运算和处理,对数据没有正确的处理会导致程序运行的最终结果与期望值不一样,同
11、时,学习汇编语言时最重要的是灵活的运用汇编指令和程序来控制计算机各个组成部件工作,完成一系列的工作。在这次实验中,加深了我对汇编语言的理解,通过解决实验中出现的每个问题,让我对计算机内部存储方式有了更深了的理解,每一步的输入、存储、转换、输出,都对应着相应的地址指针运算,确定各个源地址和目的地址。每个数据都有自己的存储空间和地址,我们可以很清楚的了解每一个数据的变化和地址的转移。教 师 评 价评定项目ABCD评定项目ABCD算法正确操作熟练程序结构合理实验结果正确功能完善文字流畅、报告规范其他: 评价教师签名: 2014 年12月 10 日DATAS SEGMENTmenu db 0ah,0d
12、h,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,er
13、ror$ 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
14、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 fa
15、r 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
16、 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 21h
17、lea 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 stos
18、bmov 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 exit1
19、cmp 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,0mo
20、v 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
21、 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,mingcis
22、ixchg 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
23、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
24、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 endp;按学号查找,输入学号并存储ccin proclea dx,ifor3mov ah,9int 21hlea dx,ccid1mov ah,10int 21hmov al,ccid1+1add al,2mov ah,0mov si,axmov ccid1
25、si,0mov cx,d+1lea si,ccid1+2lea di,ccid2cldrep movsbretccin endp;进行串比较并输出姓名成绩bj procmov 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 kdkd1:mov
26、al,zmov l,almov bx,0mov ax,0mov dl,0ahmov ah,2int 21hmov dl,0dhint 21hlea dx,ws2mov ah,9int 21hmov ax,0mov bx,0mov al,ldec almov cl,9mul cllea 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,ldec almov cl,5mul cllea dx,score1add dx,axmov ah,9int 21hretbj endpCODES ENDSend start