微原课设 冒泡排序.docx

上传人:b****5 文档编号:7820989 上传时间:2023-01-26 格式:DOCX 页数:12 大小:50.52KB
下载 相关 举报
微原课设 冒泡排序.docx_第1页
第1页 / 共12页
微原课设 冒泡排序.docx_第2页
第2页 / 共12页
微原课设 冒泡排序.docx_第3页
第3页 / 共12页
微原课设 冒泡排序.docx_第4页
第4页 / 共12页
微原课设 冒泡排序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

微原课设 冒泡排序.docx

《微原课设 冒泡排序.docx》由会员分享,可在线阅读,更多相关《微原课设 冒泡排序.docx(12页珍藏版)》请在冰豆网上搜索。

微原课设 冒泡排序.docx

微原课设冒泡排序

课程设计任务书

学生姓名:

专业班级:

指导教师:

工作单位:

题目:

冒泡排序

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

键盘输入一组十进制数,用冒泡排序由小到大排序后输出显示

 

时间安排:

1.9课设题目,设计内容;

1.9—1.10查资料,算法、方案设计。

1.1—1.13(硬)软件设计

1.14—1.15调试程序

1.16—1.17写课设报告

1.18答辩

 

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

1课程设计题目及要求

题目:

冒泡排序

题目要求:

键盘输入一组十进制数,用冒泡排序由小到大排序后输出显示

程序设计要求:

1)遵循模块化、结构化的程序设计方法。

2)要求程序必须正确。

3)程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。

4)要求程序结构合理,语句使用得当。

5)适当追求编程技巧和程序运行效率。

 

2课题分析及设计思路

冒泡排序:

依次比较相邻的两个数,将小数放在前面,大数放在后面。

即在第一趟:

首先比较第1个和第2个数,将小数放前,大数放后。

然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

至此第一趟结束,将最大的数放到了最后。

在第二趟:

仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。

如此下去,重复以上过程,直至最终完成排序。

此次课程设计中,冒泡排序是从大到小进行排序.通过主程序对子程序的调用来完成输入输出,排序,循环,转化等功能。

 

3程序主要流程图

 

4程序主要代码与分析

datasegment

numdw50dup(?

countdw10

flag1db0;符号标志

flag2db0;首位0标志

mess1  DB'INPUT10NUMBERS',0AH,0DH,'$'   

mess2 DB'ERRORS',0AH,0DH,'$'

mess3  DB'SOURCE:

',0AH,0DH,'$'

mess4DB'RESULT:

',0AH,0DH,'$'

dataends

prognamsegment

mainprocfar

assumecs:

prognam,ds:

data

start:

pushds;把原数据存放到段寄存器

subax,ax

pushax

movax,data

movds,ax

redo:

callinput;输入原始数据

cmpax,-1d ;判断是否出错

jeredo;出错,退出

leadx,mess3

movah,09;9号调用,显示字符串,请求输出数据

int21h

calloutput;输出原始数据

callbubblesort ;对原始数据进行冒泡排序

leadx,mess4

movah,09;9号调用,显示字符串,请求输出数据

int21h

calloutput;输出排序后的数据

movah,7

int21h

movah,4ch

int21h

mainendp

inputproc;输入原始数据

leadx,mess1

movah,09

int21h;9号调用,显示字符串,请求输入数据

callcrlf;回车,换行

movsi,0

movcx,count

enter1:

calldecibin

deccx

cmpdl,',';进行分隔符判断,以逗号为分隔符

jestore

cmpdl,13;进行换行判断

jeexit2

jneerror

store:

movnum[si],bx;将BX中的二进制数存储到num中

addsi,2

   jmpenter1

error:

callcrlf;输出报错信息

leadx,mess2

movah,09;9号调用,显示字符串,输入数据

int21h

callcrlf

movax,-1d  ;以AX中的值作为出错标志

jmpexit3

exit2:

movnum[si],bx;将BX中内容存入以num为首的存储单元中

callcrlf;回车换行

exit3:

ret

inputendp

bubblesortproc;将num[]中存储的数进行冒泡排序

movcx,count;初始化计数器CX

deccx

lg1:

movdi,cx;保存CX的值

movsi,0

lg2:

movax,num[si];相邻的两数进行比较大小

cmpax,num[si+2]

jlelg3

xchgax,num[si+2];进行数据交换

movnum[si],ax

lg3:

addsi,2

looplg2;判断CX==0,循环

movcx,di;还原CX的值

looplg1;判断CX==0,循环

ret

bubblesortendp

outputproc;将num[]里的数据以十进制输出在屏幕上

callcrlf;回车,换行

movsi,0

movdi,count

next1:

movbx,num[si]

testbx,8000h;判断正负

jznext4

movdl,'-'

movah,2;2号调用,显示单字符负号'-'

int21h

negbx;求补

next4:

callbinidec;将BX中的二进制数用十进制在屏幕上输出

movdl,','

movah,02;2号调用,输出分隔符','

int21h

addsi,2

decdi

jnznext1

callcrlf

ret

outputendp

decibinproc;从键盘中取得十进制数转化为二进制,并存入BX中

movbx,0

   movflag1,0;符号位标志flag1,0为正数,1为负数

newchar:

movah,1;1号调用,单字符输入,送入al

int21h

movdl,al

cmpal,2dh;与符号减号'-'的ASCII码作比较

jnznext2

movflag1,1

jmpnewchar

next2:

subal,30h

jlnext3

cmpal,9d

jgnext3

cbw

xchgax,bx

movcx,10d

mulcx

xchgax,bx

addbx,ax

jmpnewchar

next3:

cmpflag1,1

jneexit1

negbx;对bx中的内容进行求补

exit1:

ret

decibinendp

binidecproc;将BX中的二进制数以十进制形式输出在屏幕上

pushbx

pushcx

pushsi

pushdi

movcx,10000d

calldec_div

movcx,1000d

calldec_div

movcx,100d

calldec_div

movcx,10d

calldec_div

movcx,1d

calldec_div

adddl,flag2

cmpdl,30h;判断这个数是否是0,以免没有输出0

jnelg6

movah,02h

int21h

lg6:

popdi

popsi

popcx

popbx

movflag2,0;还原0标志

ret

binidecendp

dec_divproc;将BX中的需转换的十进制数,输出在屏幕上

movax,bx

movdx,0

divcx

movbx,dx

movdl,al

adddl,30h;转换成ASCII码

cmpflag2,0

jnelg4

cmpdl,30h;判断十进制数是否为0,以判断是否输出

jelg5

movflag2,1

lg4:

movah,02h;2号调用,输出十进制数

int21h

lg5:

ret

dec_divendp

crlfproc;向终端发出回车、换行符,完成一次回车换行操作

movdl,0ah

movah,02h;显示功能

int21h

movdl,0dh;回车

movah,02h;显示功能

int21h

ret

crlfendp

prognamends

endstart

 

5正向排序程序截图

5.1正常输入一组十进制数(10个)的输出情况

5.2当输入不合法时,程序自动跳转到初始位置,并提示输入错误、要求重新输入

5.3当输入一组数不足10个时,会自动补零并排序

6小结及体会

通过本次课程设计,我收获颇多。

第一,通过上机编程调试,我更深刻地认识到了汇编语言和高级语言的不同点。

首先是寻址方式的不同:

汇编语言是低级语言,在编写程序的时候会把根据不同的情况指定使用不同的寻址方式,能够对内存和CPU里的通用寄存器直接操纵;而C语言是高级语言,可以实现跨平台。

编写程序无需指定CPU的指令执行情况,一段程序可以在不同体系结构的计算机上使用;其次,在本次冒泡法排序中可以明显看到,汇编语言实现循环控制是给计数器CX赋值来控制循环次数,每完成一次循环计数器CX自动减1;而用C语言实现循环时不仅要通过变量赋初值来控制循环次数,还要自行设定变量运算方式和跳出循环的条件。

第二,就设计结构而言,本次课设还是采用功能分解、逐步求精的思想,一步步的实现要求的功能,并在一些已有的程序上作进一步的改进,来达到要求实现的的功能。

比如,先写好主程序,完成整体的结构流程;再分写子程序,把输入数据、十进制转换为二进制、冒泡排序、二进制转换为十进制、输出数据、换行操作等问题分块处理,这样一来复杂问题就逐渐分解了,程序执行的效率大大提高,同时也更易修改。

第三,由于汇编语言运用的不太熟练,对程序反复进行修改,发现汇编语言由于语句在程序中放置的位置不同也会是不同的效果,对汇编语言有了进一步的认识。

通过上网查阅资料,我也了解到了更多的语法功能,学习到了更多的解题思路。

总而言之,通过这次课程设计,我更加深刻地懂得了理论与实际结合的重要性。

只有课本上的知识是远远不够的,我们只有把书本上学到的知识和实际结合起来,才能真正的解决问题,从而提高自己的实际动手能力和独立思考能力。

 

参考文献

【1】彭虎等编著.微机原理与接口技术(第二版).北京:

电子工业出版社,2008

【2】全国计算机等级考试三级教程——PC技术.北京:

高等教育出版社,2011

【3】沈美明,温东禅.IBM-PC汇编语句程序设计(第2版).北京:

清华大学出版社,2001

【4】任向明,卢惠林.汇编语言程序设计实用教程.北京:

清华大学出版社,2009

【5】马力妮.80x86汇编语言程序设计.北京:

机械工业出版社,2004

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

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

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