您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 四川大学微机原理冒泡法排序实验报告
《微机原理与接口技术实验报告》学院:电气信息学院班级:电力老师:学号:姓名:目录1.实验目的…………………………………………………………12.实验内容…………………………………………………………13.程序流程图………………………………………………………24.程序清单与注释…………………………………………………45.运行结果…………………………………………………………106.实验心得…………………………………………………………111一、实验目的:经过第一次试验,我们初次了解了DEBUG调试程序强大功能。1.学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。2.理解并掌握各种指令的功能,编写完整的汇编源程序。3.进一步熟悉DEBUG的调试命令。二、实验内容:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。对于5(N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。每一遍的排序由若干次邻元素的排序组成。4遍排序中,邻元素的排序依次为4,3,2,1遍。完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DECCX)排序遍数本遍排序前第一次排序后第二次排序后第三次排序后第四次排序后1300,250,280,240,260250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,3002250,280,240,260,300250,280,240,260,300250,240,280,260,300250,240,260,280,3003250,240,260,280,300250,240,260,280,300240,250,260,280,3004240,250,260,280,300240,250,260,280,300实验要求:1.编制程序,从键盘输入300,250,280,240,260这五个数,并思考如何输入任意五个数,五个数可以有一位数,二位数,三位数,四位数,五位数,混合输入比较大小;2.对这组数用冒泡法进行排序,并输出原始数据及排序后数据,两两数据之间用空格分隔;3.利用DEBUG调试工具,用D0命令,查看排序前后,内存数据的变化,以及会用调试命令查看程序运算中寄存器中的值;4.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;5.用压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平均值按位逐个输出(即输出263);6.用移位指令将平均值以二进制串的形式输出。7.设计程序要有模块化的思想,用子程序实现不同的功能;8.所有数据输出前要用字符串的输出指令,进行输出提示(如:zuidazhishi:300等),所有数据结果能清晰地显示在电脑屏幕上。2三、程序流程图:1.主程序MAIN:否是开始初始化键盘输入数据调用INPUT子程序输入是否正确显示原始数据调用OUTPUT子程序显示错误输入显示冒泡排序后的数据调用SORT子程序显示平均值二进制串Binary调用OUTPUT子程序显示最小程序Min显示最大值Max显示其余数平均数值Average调用ONE子程序调用ONE子程序调用ONE子程序调用ONE子程序结束32.冒泡排序子程序:SORT否是否是否是COUNT1--------外循环次数COUNT2--------内循环次数I---------数组下标进入初始化COUNT1=N-1SI=0COUNT2=COUNT1Ai≥Ai+1?Ai与Ai+1两数交换SI=SI+2COUNT2=COUNT2-1COUNT2=0??COUNT1=COUNT1-1COUNT2=0??结束4四、程序清单与注释:NAMEBUBBLE_SORTDATASEGMENTARRAYDW5DUP(?)COUNTDW5TWODW2FLAG1DW0FLAG2DB0FAULTDW-1CRDB0DH,0AH,'$'STR1DB'PleaseinputfivenumbersseperatedwithspaceandfinishedwithEnter:','$'STR2DB'Theoriginalnumbers:','$'STR3DB'Thesortednumbers:','$'STR4DB'TheMin:','$'STR5DB'TheMax:','$'STR6DB'TheAverage:','$'STR7DB'Thebinarysystemoftheaverage:','$'STR8DB'Inputerror!Pleaseinputagain!','$'DATAENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATA,ES:DATASTART:PUSHDSANDAX,0PUSHAXMOVAX,DATAMOVDS,AXLEADX,STR1MOVAH,09HINT21HCALLCRLFREIN:CALLINPUTCMPAX,FAULTJEREINLEADX,STR2MOVAH,09HINT21HCALLOUTPUTCALLSORTLEADX,STR3MOVAH,09HINT21H5CALLOUTPUTANDSI,0ANDBX,0MOVBX,ARRAY[SI]LEADX,STR4MOVAH,09HINT21HCALLONECALLCRLFLEADX,STR5MOVAH,09HINT21HMOVBX,ARRAY[SI+8]CALLONECALLCRLFLEADX,STR6MOVAH,09HINT21HANDDX,0MOVAX,ARRAY[SI+2]ADDAX,ARRAY[SI+4]ADCAX,ARRAY[SI+6]MOVCX,COUNTDECCXDECCXDIVCXMOVBX,AXCALLONECALLCRLFLEADX,STR6MOVAH,09HMOVCX,16LL1:ANDDX,0DIVTWOPUSHDXLOOPLL1MOVCX,16LL2:POPDXADDDL,30HMOVAH,2INT21HLOOPLL2MOVAH,4CHINT21H6MAINENDPCRLFPROCLEADX,CRMOVAH,09HINT21HRETCRLFENDPINPUTPROCMOVCX,COUNTANDSI,0NEXT1:CALLDTBDECCXCMPDL,20HJESTOCMPDL,0DHJEEXIT2CALLCRLFERROR:LEADX,STR8MOVAH,09HINT21HCALLCRLFMOVAX,FAULTJMPEXIT3STO:MOVARRAY[SI],BXADDSI,2JMPNEXT1EXIT2:MOVARRAY[SI],BXCALLCRLFEXIT3:RETINPUTENDPDTBPROCANDBX,0ANDFLAG1,0CHAR:MOVAH,01HINT21H7MOVDL,ALCMPAL,2DHJNZNEXT2MOVFLAG1,1JMPCHARNEXT2:SUBAL,30HJLNEXT3CMPAL,09HJGNEXT3CBWXCHGAX,BXMOVCX,10MULCXXCHGAX,BXADDBX,AXJMPCHARNEXT3:CMPFLAG1,1JNZEXIT1NEGBXEXIT1:RETDTBENDPOUTPUTPROCCALLCRLFMOVDI,COUNTANDSI,0GO1:MOVBX,ARRAY[SI]TESTBX,8000HJZGO2MOVDL,2DHMOVAH,02HINT21HNEGBXGO2:CALLONEMOVDL,2DHMOVAH,02HINT21HADDSI,2DECDIJNZGO1CALLCRLFRET8OUTPUTENDPONEPROCPUSHBXPUSHCXPUSHSIPUSHDIMOVCX,10000CALLBTDMOVCX,1000CALLBTDMOVCX,100CALLBTDMOVCX,10CALLBTDMOVCX,1CALLBTDADDDL,FLAG2CMPDL,30HJNEQUIT3MOVAH,02HINT21HQUIT3:POPDIPOPSIPOPCXPOPBXANDFLAG2,0RETONEENDPBTDPROCMOVAX,BXANDDX,0DIVCXMOVBX,DXMOVDL,ALADDDL,30HCMPFLAG2,0JNEQUIT1CMPDL,30H9JEQUIT2MOVFLAG2,1QUIT1:MOVAH,02HINT21HQUIT2:RETBTDENDPSORTPROCCLDMOVCX,COUNTDECCXLOO1:MOVDI,CXANDSI,0LOO2:MOVAX,ARRAY[SI]CMPAX,ARRAY[SI+2]JLLOO3XCHGAX,ARRAY[SI+2]MOVARRAY[SI],AXLOO3:ADDSI,2LOOPLOO2MOVCX,DILOOPLOO1RETSORTENDPCODEENDSENDSTART10五、运行结果:1.对300、250、280、240、260五个数据进行冒泡排序,运行结果如下:2、对5802、129、30、7、1233五个数据进行冒泡排序,运行结果如下:3.对-1、23、189、-234、6五个数据进行冒泡排序,运行结果如下:114.当输入不合法时,显示如下:六、实验心得:在本次汇编语言程序设计实验中,我们运用了循环结构对冒泡排序进行了汇编设计。首先,编写了对给定数据进行冒泡排序的算法设计,以便熟悉冒泡排序的逻辑结构,理清设计思路。本来,一直以为汇编语言和C语言是差不多的,但是经过初次汇编语言编程,才发现,要用汇编语言编出完整算法是一件很不简单的事情,某一个小小的疏漏都会导致一大堆错误出现。比如;十六进制的输入时要在后面加上H;;甚至是,做除法,必须要将DX清零。这些小错误,经过多次实践,终于记到了。这个算法程序比较复杂,为了使程序更加简洁明了,我对其进行了模块化设计,利用“CALL”指令调用子程序,这样明显非常好用。为了防止输入无用和输出时遗漏零,引用了首位符号标志来进行判定。在这一阶段,我也遇到了很大的困难,例如在输入完数据回车后,程序显示输入错误,经过仔细排查后才发现,在2号DOS功能调用时,少写了“INT21H”;还有子程序结束时,没有写上“RET”;命名过程名时与关键字重复等等。接下来我还对算法程序进行进一步优化。为了实现数据对齐,我增加了CRLF子程序,方便实现回车换行功能。为了在输入不合法时,进行错误提示我定义了出错标志等等。在整个上机实验过程中,我对各条语句的含义都有了更深刻的理解,编写程序和独立解决问题的能力都有所加强。与此同时,我还认识到自己有很多的不足,在以后的上机实验中,要多锻炼,对汇编语言编程进一步的掌握和学习。
本文标题:四川大学微机原理冒泡法排序实验报告
链接地址:https://www.777doc.com/doc-6463757 .html