微原课设 冒泡排序Word格式文档下载.docx
- 文档编号:20949141
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:12
- 大小:50.52KB
微原课设 冒泡排序Word格式文档下载.docx
《微原课设 冒泡排序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微原课设 冒泡排序Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
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'
mess3 DB'
SOURCE:
'
mess4DB'
RESULT:
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,7
int21h
movah,4ch
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:
输出报错信息
leadx,mess2
9号调用,显示字符串,输入数据
callcrlf
movax,-1d ;
以AX中的值作为出错标志
jmpexit3
exit2:
将BX中内容存入以num为首的存储单元中
回车换行
exit3:
ret
inputendp
bubblesortproc;
将num[]中存储的数进行冒泡排序
movcx,count;
初始化计数器CX
deccx
lg1:
movdi,cx;
保存CX的值
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[]里的数据以十进制输出在屏幕上
回车,换行
movdi,count
next1:
movbx,num[si]
testbx,8000h;
判断正负
jznext4
movdl,'
-'
movah,2;
2号调用,显示单字符负号'
negbx;
求补
next4:
callbinidec;
将BX中的二进制数用十进制在屏幕上输出
movah,02;
2号调用,输出分隔符'
,'
decdi
jnznext1
callcrlf
outputendp
decibinproc;
从键盘中取得十进制数转化为二进制,并存入BX中
movbx,0
movflag1,0;
符号位标志flag1,0为正数,1为负数
newchar:
movah,1;
1号调用,单字符输入,送入al
movdl,al
cmpal,2dh;
与符号减号'
的ASCII码作比较
jnznext2
movflag1,1
jmpnewchar
next2:
subal,30h
jlnext3
cmpal,9d
jgnext3
cbw
xchgax,bx
movcx,10d
mulcx
addbx,ax
jmpnewchar
next3:
cmpflag1,1
jneexit1
对bx中的内容进行求补
exit1:
decibinendp
binidecproc;
将BX中的二进制数以十进制形式输出在屏幕上
pushbx
pushcx
pushsi
pushdi
movcx,10000d
calldec_div
movcx,1000d
movcx,100d
movcx,1d
calldec_div
adddl,flag2
cmpdl,30h;
判断这个数是否是0,以免没有输出0
jnelg6
movah,02h
lg6:
popdi
popsi
popcx
popbx
movflag2,0;
还原0标志
binidecendp
dec_divproc;
将BX中的需转换的十进制数,输出在屏幕上
movax,bx
movdx,0
divcx
movbx,dx
movdl,al
adddl,30h;
转换成ASCII码
cmpflag2,0
jnelg4
判断十进制数是否为0,以判断是否输出
jelg5
movflag2,1
lg4:
movah,02h;
2号调用,输出十进制数
lg5:
dec_divendp
crlfproc;
向终端发出回车、换行符,完成一次回车换行操作
movdl,0ah
显示功能
movdl,0dh;
回车
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文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微原课设 冒泡排序 冒泡 排序