汇编语言综合实验_第1页
汇编语言综合实验_第2页
汇编语言综合实验_第3页
汇编语言综合实验_第4页
汇编语言综合实验_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上华北科技学院综合性实 验 报 告 课程名称 汇 编 语 言 实验学期 2017 至 2018 学年 第 1 学期学生所在系部 计算机学院网络工程系 年级 三年级 专业班级 网络B15- 学生姓名 学号 任课教师 实验成绩 计算机学院制 汇 编 语 言课程综合性实验报告开课实验室:基础实验室一 日期:2022年4月28日实验题目学生成绩排序一、实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序、子程序、宏指令编程方法,提高汇编语言程序设计能力的应用水平。二、设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 201

2、5三、实验内容 编写程序,接收从键盘输入某班学生的学号、姓名、成绩,对学生的成绩进行排序,最后把学号、姓名、学生成绩、名次显示出来。四、实验结果及分析代码功能该代码的功能是实现对已经输入的学生按成绩进行排序,输入时按学号输出时按照成绩的由小到大输出,在成绩交换位置时成绩对应的姓名和学号也会跟随一起变化使姓名和分数对应显示。变量的定义缓冲区和存储单元的定义这个过程是个关键的过程,因为在程序中汇涉及到使用单元空间的单元值,如果不能明确的定义变量和缓冲区,在输入学生信息,输出学生信息都不能达到想要的效果,而且在程序中执行循环时也会因为赋值不准确导致程序出现错误,而且这种错误系统不会提示,这就意味着查

3、找问题很困难,增加了编码的难度和工作量。宏定义及其使用在进行编码时为了使代码量减少,应该适当定义一些宏,此程序定义了 5 个宏,hong1 实现的功能是定义了回车换行因为在对学生成绩输出时会用到换行而且是反复的使用,因此定义回车换行的宏可以减少一定的代码量。hong1 macro ;-定义回车换行的宏!MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HEndmhong2 定义的功能是提示信息和输入的功能,这个宏的定义主要用在对学生成绩的输入上,和相关信息的显示,而且这个宏用到了传参因为在调用 10 号功能和 9 号功能都能用这一个程序。hong

4、2 macro opr1,opr2 ;-定义输入输出!lea dx,opr1mov ah,opr2int 21hendm其中opr1是传递的缓冲区的亚元,opr2是传递功能号的亚元。Hong3定义空格的宏,这个宏的定义是为了在学生成绩输出时能显示的更加美观一些。hong3 macro ;-定义空格!mov dl,20hmov ah,2int 21hendmhong4定义的清楚回车键的宏,因为信息输入用的是10号功能,在信息输入结束时是以回车键结束的,而且程序中涉及到了信息的转存,如果将回车键也一同转存到新的存储单元中,在用2号功能实现对学生信息的显示时碰到回车键,就会出现终止的错误,因此在转存

5、前就先对缓冲区里的回车键进行清空。hong4 macro opr1,opr2 ;-清楚缓冲区里的回车键!mov al,0pr1add al,2mov ah,0mov si,axmov buff1si,0因为定义了姓名、分数、学号三个缓冲区,因此应定义带有参数的宏,以方便对三个不同的缓冲区时只需用不同的参数就能实现相同的功能。Hong5定义的转存的宏,程序中有将缓冲区里的数据转存到一个大的存储单元中,以方便实现成绩的比较和最后学生所有信息的输出,因为姓名、成绩、学号都需转存,而且转存后还要进行对缓冲区的内容进行清空,这些都是操作的代码出了存储区和计算单元的个数其他的内容都是相同因此定义这个宏会减

6、少很多代码的输入。hong5 macro opr1,opr2,opr3,opr4mov cx,opr1lea si,opr2 ;传送姓名lea di,opr3add di,opr4cldrep movsbmov cx,opr1mov ax,0lea di,opr3endm宏的引用虽然能够减少大量的代码但是在调用宏时应注意对应位置参数的传递以免出现错误导致程序不能正常运行。其次是在程序不能将程序都用宏调用,如果那样在读代码时就会造成理解困难因为只有变量、缓冲区和存储单元再有就是宏。读者不能明白其中的格式,因此在调用宏时用该保留一个具体的程序段以方便读者了解具体的代码格式也方便查找错误。功能实现的

7、过程输入过程用宏定义调用9号功能提示信息“input name”,接着调用10号功能将输入的姓名存入缓冲区buff1,这就完成了姓名的输入,用同样的方法和调用宏完成分数和学号的输入分别存入buff2、buff3,这就完成了一个学生信息的输入,其中要记得将回车键清0,然后调用转存的子程序。再执行LOOP循环完成一定量学生信息的输入。转存实现的是将输入的姓名、分数、学号存入到定义好的足够长的存储单元中,再转存时需要注意单元地址的计算,其中包括首地址的计算和传递两个字符串时之间的间隔,转存不逊要循环,因为没输入一次程序会自动调用转存的子程序完成转存的功能,但是在转存的同时需要注意对缓冲区的清0的操作

8、因为如果没有及时的对缓冲区清0,下一次向缓冲区里输入信息时,原有信息将会被覆盖,如果输入的字符长度小于上一次输入字符的长度,那么这次转存的数据将是刚刚输入的数据和上一次没有被覆盖的数据这就会时输出错误。因此转存时,关键注意的就是地址的计算和对缓冲区清0的操作。对存储单元里的分数进行排序,采用的排序的方法是冒泡排序,存储单元里的数据没有转换为十进制的两位数,因此在执行比较时就只能将他看做是十位和个位分别进行比较。我定义的分数的单元三个,因此比较时单元地址的间隔为三,而且是单元地址从0开始,如果十位相等,就对地址加1进行各位的比较,一次进行,然后对满足条件的单元进行互换,采用xchg伪指令,这时也

9、要执行相关数据的姓名和学号,在开始时就饿首先给di、si赋给初值为0,然后和分数的地址单单元一起进行循环,但是这两个寄存器循环时相加的值非别是10和3,因为姓名的间隔是10个单元,而学好的间隔是3个单元,在进行循环时应该注意到计数器cx的保存,因为在执行分数的交换时会用到cx这时cx赋给的值是P-1而在进行姓名和学好进行交换时,分别赋给的值是数据的单元间隔就是和此时对的保护就会用到入栈,出栈。但是比较的程序要进行循环因为冒泡排序只能比较相邻两个数字的大小,因此此时会涉及到外循环,就是对计数器的保护,采用入栈出栈的方式。这样才能保证程序的顺利进行。这个子程序主要用到的就是交换的指令代码如下:MO

10、V AL,SCOREBXxchg al,scorebx+3mov scorebx,almov al,scorebx+1在进行姓名和学好的交换过程中也只用到这段代码,只是将其中的存储单元的名和中括号里的寄存器改变成为不一样的就能够执行了。学生信息的输出,这段子程序主要用到的就是号功能,虽然号功能每次只能显示一个字符,但是经过多次的循环显示会达到与号功能一样的效果,这段程序中需要注意的也是地址的计算,只是单纯的从存储单元里显示出来不需要什么计算地址从开始循环相应的存储区单元的个数即可,程序中还加上了名次,方法比较简单执行循环每次加用好功能显示,就能达到想要的结果。(4)排序流程图交换子程序比较十位

11、比较个位交换分数交换姓名、学号寄存器加间隔大于小于小于(5)程序运行结果图(6)总结与体会在这次的综合实验中,遇到了很多细节问题,首先就是在进行循环没有及时的对计数器进行入栈保存,以至于在输出时显示的不是学生的信息而是乱码,其次就是对寄存器的值没有能够正确的把握,因为在循环中没有给计数器赋予正确的值则在转存、比较、输出时都会出现错误,而且这些错误不容易发现,因此在编程时应仔细计算循环的次数,即计数器的初值。遇到的最大的问题就是对姓名和学号的交换,因为姓名和学号的循环是基于分数交换的基础上的,因此在分数交换的同时进行姓名和学号的交换成为了这个程序的关键,这里出现的问题也是最不好解决的的,最后终于

12、实现了在分数交换的同时姓名和学好也一切跟着进行了交换。这次试验我学到了很多的知识,首先就是对书上的一些基础知识进行了巩固,指令、伪指令、宏、子程序的运用在程序中都用到了。全面的对学过的知识进行了综合性的复习。而且在边学程序时也会锻炼思维能力,因为很多的地址单元和寄存器的值都是通过计算才能保证程序正常运行的,还有就是培养动脑的能力,因为同样的功能可以有集中不同的方法,就像分数的比较上,可以先将它们转化为十进制的两位数再进行比较,也可以通过一位一位的比较实现对两位数大小的比较。最后就是为了减少程序中的代码量。适当的调用宏,既能够使读程序的人易于理解,也能方便自己修改。总之,这次综合实验是自己获益匪

13、浅。教 师 评 价评定项目ABCD评定项目ABCD算法正确操作熟练程序结构合理实验结果正确功能完善文字流畅、报告规范其他: 评价教师签名: 2017 年12月 3日源代码:DATAS SEGMENT mess0 db 0ah,0dh,'num name score xuehao$' ; mess1 db 0ah,0dh,'input name :$' mess2 db 0ah,0dh,'input score:$' mess3 db 0ah,0dh,'input xuehao:$' mess4 db 'xueshengch

14、engjipaixu$' p equ 3;输入的人数 buff1 db 10,?,10 dup(0);姓名缓冲区,加$符号以便输出时使用 buff2 db 3,?,3 dup(0);成绩缓冲区 buff3 db 4,?,4 dup(?) sname db p dup(10 dup(0);保存姓名 score db p dup(3 dup(0);保存成绩 xuehao db p dup(4 dup(0) sing1 dw 0 sing2 dw 0 sing3 dw 0 count db '1'计数 ;此处输入数据段代码 DATAS ENDSSTACKS SEGMENT ;

15、此处输入堆栈段代码STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS hong1 macro ;定义回车换行的宏 mov dl,0ah mov ah,2 int 21h mov dl,0dh mov ah,2 int 21h endm hong2 macro opr1,opr2 ;定义输入输出 lea dx,opr1 mov ah,opr2 int 21h endm hong3 macro ;定义空格 mov dl,20h mov ah,2 int 21h endm hong4 macro opr1,opr2 ;清楚缓存区里的

16、回车键 mov al,opr1 add al,2 mov ah,0 mov si,ax mov opr2,0 endm hong5 macro opr1,opr2,opr3,opr4 ;传送姓名 mov cx,opr1 lea si,opr2 lea di,opr3 add di,opr4 cld rep movsb mov cx,opr1 mov ax,0 lea di,opr3 endm START: MOV AX,DATAS MOV DS,AX mov es,ax mov bx,0; mov cx,0 hong2 mess4,9 hong1 call input;调用子程序1 call

17、bijiao call print mov ah,4ch int 21h ;子程序1,输入姓名、成绩,学号input proc inc bx;输入次数统计 cmp bx,p;输入次数>p? ja exit hong2 mess1,9 ;宏调用提示和输入姓名 lea dx,buff1;显示提示1 mov ah,10 int 21h mov al,buff1+1;实际输入个数放入AL add al,2;+2,包含buff1的0,1单元号 mov ah,0 mov si,ax;回车0d所在位置,跟在最后一个字符后 mov buff1si,0;将0d换为0,便于输出显示 hong2 mess2,

18、9 ;宏调用提示和输入分数 hong2 buff2,10 hong4 buff2+1,buff2si ;宏调用清空回车键 hong2 mess3,9 ;宏调用提示和输入学号 hong2 buff3,10 hong4 buff3+1,buff3si ;宏调用清空回车键 cmp bx,1 jz let5 add sing1,10 add sing2,3 add sing3,4 let5:call zhuancun jmp input exit: ret input endp ;转存子程序 zhuancun proc mov cx,10 lea si,buff1+2 ;传送姓名 lea di,sna

19、me add di,sing1 cld rep movsb mov cx,10 ;将缓存区清空 mov ax,0 lea di,buff1+2 rep stosb hong5 3,buff2+2,score,sing2 hong5 4,buff3+2,xuehao,sing3 ret zhuancun endp ;比较子程序 bijiao proc mov cx,p loop1:push cx ;保存外循环 mov di,0 mov si,0 mov bx,0 mov cx,p-1 bj1:mov al,scorebx ;比较十位 cmp al,scorebx+3 jle bj2 add bx

20、,3 add si,10 add di,4 dec cx jnz bj1 jmp out1 bj2:jl bj3 ;比较个位 mov al,scorebx+1 cmp al,scorebx+4 jl bj3 add bx,3 add si,10 add di,4 dec cx jnz bj1 jmp out1 bj3:mov al,scorebx ;进行交换两个数字的位置 xchg al,scorebx+3 mov scorebx,al mov al,scorebx+1 xchg al,scorebx+4 mov scorebx+1,al push si push cx mov cx,10 lp1: mov al,snamesi xchg al,snamesi+10 mov snamesi,al inc si dec cx jnz lp1 pu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论