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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

四川大学微机原理冒泡法排序实验报告.docx

1、四川大学微机原理冒泡法排序实验报告微机原理与接口技术实验报告学 院: 电气信息学院 班 级: 电力 老 师: 学 号: 姓 名: 1.实验目的12.实验内容13.程序流程图24.程序清单与注释45.运行结果106.实验心得111、实验目的:经过第一次试验,我们初次了解了DEBUG调试程序强大功能。1.学习汇编语言循环结构语句的特点,重点掌握冒泡排序的方法。2.理解并掌握各种指令的功能,编写完整的汇编源程序。3.进一步熟悉DEBUG的调试命令。二、实验内容:用冒泡的方法对一组数据元素排序,它的基本方法是:将相邻的两个元素通过比较进行排序,通过多次,多遍的邻元素排序,实现整个一组数的排序。对于5(

2、N)个元素,整个排序通过4遍(=N-1)邻元素排序完成。每一遍的排序由若干次邻元素的排序组成。4遍排序中,邻元素的排序依次为4,3,2,1遍。完成第一遍排序后,最大数沉底,已经到达它应占据的位置,不需要参加下一遍的排序。外循环的次数为CX=4次(N-1),内循环的次数为4,3,2,1(DEC CX)排序遍数本遍排序前第一次排序后第二次排序后第三次排序后第四次排序后1300,250,280,240,260250,300,280,240,260250,280,300,240,260250,280,240,300,260250,280,240,260,3002250,280,240,260,3002

3、50,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、命令,查看排序前后,内存数据的变化,以及会用调试命令查看程序运算中寄存器中的值;4.去掉最大和最小的两个值,求出其余值的平均值,并输出最大值,最小值和平均值;5.用压栈PUSH和出栈POP指令“先进后出”的特点,设计算法将平均值按位逐个输出(即输出263);6.用移位指令将平均值以二进制串的形式输出。7.设计程序要有模块化的思想,用子程序实现不同的功能;8.所有数据输出前要用字符串的输出指令,进行输出提示(如:zui da zhi shi : 300等),所有数据结果能清晰地显示在电脑屏幕上。3、程序流程图:开始初始化键盘输入数据调用INPUT子程序输入是否正确显示原始数据调用OUTPUT子程

5、序显示错误输入显示冒泡排序后的数据调用SORT子程序显示平均值二进制串Binary调用OUTPUT子程序显示最小程序Min显示最大值Max显示其余数平均数值Average调用ONE子程序调用ONE子程序调用ONE子程序调用ONE子程序结束 1.主程序MAIN: 否 是2.冒泡排序子程序:SORT 否 是 否 是 否结束 是4、程序清单与注释:NAME BUBBLE_SORTDATA SEGMENTARRAY DW 5 DUP()COUNT DW 5TWO DW 2FLAG1 DW 0FLAG2 DB 0FAULT DW -1CR DB 0DH,0AH,$STR1 DBPlease input

6、five numbers seperated with space and finished with Enter:,$STR2 DBThe original numbers:,$STR3 DBThe sorted numbers:,$STR4 DBThe Min:,$STR5 DBThe Max:,$STR6 DBThe Average:,$STR7 DBThe binary system of the average:,$ STR8 DBInput error!Please input again!,$DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:

7、CODE,DS:DATA,ES:DATASTART: PUSH DS AND AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,09H INT 21H CALL CRLFREIN: CALL INPUT CMP AX,FAULT JE REIN LEA DX,STR2 MOV AH,09H INT 21H CALL OUTPUT CALL SORT LEA DX,STR3 MOV AH,09H INT 21H CALL OUTPUT AND SI,0 AND BX,0 MOV BX,ARRAYSI LEA DX,STR4 MOV AH,

8、09H INT 21H CALL ONE CALL CRLF LEA DX,STR5 MOV AH,09H INT 21H MOV BX,ARRAYSI+8 CALL ONE CALL CRLF LEA DX,STR6 MOV AH,09H INT 21H AND DX,0 MOV AX,ARRAYSI+2 ADD AX,ARRAYSI+4 ADC AX,ARRAYSI+6 MOV CX,COUNT DEC CX DEC CX DIV CX MOV BX,AX CALL ONE CALL CRLF LEA DX,STR6 MOV AH,09H MOV CX,16LL1: AND DX,0 DI

9、V TWO PUSH DX LOOP LL1 MOV CX,16LL2: POP DX ADD DL,30H MOV AH,2 INT 21H LOOP LL2 MOV AH,4CH INT 21HMAIN ENDPCRLF PROC LEA DX,CR MOV AH,09H INT 21H RETCRLF ENDPINPUT PROC MOV CX,COUNT AND SI,0NEXT1: CALL DTB DEC CX CMP DL,20H JE STO CMP DL,0DH JE EXIT2 CALL CRLFERROR: LEA DX,STR8 MOV AH,09H INT 21H C

10、ALL CRLF MOV AX,FAULT JMP EXIT3STO: MOV ARRAYSI,BX ADD SI,2 JMP NEXT1EXIT2: MOV ARRAYSI,BX CALL CRLFEXIT3: RETINPUT ENDPDTB PROC AND BX,0 AND FLAG1,0CHAR: MOV AH,01H INT 21H MOV DL,AL CMP AL,2DH JNZ NEXT2 MOV FLAG1,1 JMP CHARNEXT2: SUB AL,30H JL NEXT3 CMP AL,09H JG NEXT3 CBW XCHG AX,BX MOV CX,10 MUL

11、 CX XCHG AX,BX ADD BX,AX JMP CHARNEXT3: CMP FLAG1,1 JNZ EXIT1 NEG BXEXIT1: RETDTB ENDPOUTPUT PROC CALL CRLF MOV DI,COUNT AND SI,0GO1: MOV BX,ARRAYSI TEST BX,8000H JZ GO2 MOV DL,2DH MOV AH,02H INT 21H NEG BXGO2: CALL ONE MOV DL,2DH MOV AH,02H INT 21H ADD SI,2 DEC DI JNZ GO1 CALL CRLF RETOUTPUT ENDPON

12、E PROC PUSH BX PUSH CX PUSH SI PUSH DI MOV CX,10000 CALL BTD MOV CX,1000 CALL BTD MOV CX,100 CALL BTD MOV CX,10 CALL BTD MOV CX,1 CALL BTD ADD DL,FLAG2 CMP DL,30H JNE QUIT3 MOV AH,02H INT 21HQUIT3: POP DI POP SI POP CX POP BX AND FLAG2,0 RETONE ENDPBTD PROC MOV AX,BX AND DX,0 DIV CX MOV BX,DX MOV DL

13、,AL ADD DL,30H CMP FLAG2,0 JNE QUIT1 CMP DL,30H JE QUIT2 MOV FLAG2,1QUIT1: MOV AH,02H INT 21HQUIT2: RETBTD ENDPSORT PROC CLD MOV CX,COUNT DEC CXLOO1: MOV DI,CX AND SI,0LOO2: MOV AX,ARRAYSI CMP AX,ARRAYSI+2 JL LOO3 XCHG AX,ARRAYSI+2 MOV ARRAYSI,AXLOO3: ADD SI,2 LOOP LOO2 MOV CX,DI LOOP LOO1 RETSORT E

14、NDPCODE ENDS END START五、运行结果:1.对300、250、280、240、260五个数据进行冒泡排序,运行结果如下:2、对5802、129、30、7、1233五个数据进行冒泡排序,运行结果如下:3.对-1、23、189、-234、6五个数据进行冒泡排序,运行结果如下:4.当输入不合法时,显示如下:六、实验心得:在本次汇编语言程序设计实验中,我们运用了循环结构对冒泡排序进行了汇编设计。首先,编写了对给定数据进行冒泡排序的算法设计,以便熟悉冒泡排序的逻辑结构,理清设计思路。本来,一直以为汇编语言和C语言是差不多的,但是经过初次汇编语言编程,才发现,要用汇编语言编出完整算法是一

15、件很不简单的事情,某一个小小的疏漏都会导致一大堆错误出现。比如;十六进制的输入时要在后面加上H;甚至是,做除法,必须要将DX清零。这些小错误,经过多次实践,终于记到了。这个算法程序比较复杂,为了使程序更加简洁明了,我对其进行了模块化设计,利用“CALL”指令调用子程序,这样明显非常好用。为了防止输入无用和输出时遗漏零,引用了首位符号标志来进行判定。在这一阶段,我也遇到了很大的困难,例如在输入完数据回车后,程序显示输入错误,经过仔细排查后才发现,在2号DOS功能调用时,少写了“INT 21H”;还有子程序结束时,没有写上“RET”;命名过程名时与关键字重复等等。接下来我还对算法程序进行进一步优化。为了实现数据对齐,我增加了CRLF子程序,方便实现回车换行功能。为了在输入不合法时,进行错误提示我定义了出错标志等等。在整个上机实验过程中,我对各条语句的含义都有了更深刻的理解,编写程序和独立解决问题的能力都有所加强。与此同时,我还认识到自己有很多的不足,在以后的上机实验中,要多锻炼,对汇编语言编程进一步的掌握和学习。

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

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