冒泡排序(正向+逆向)汇编语言课程设计

上传人:小** 文档编号:46208669 上传时间:2021-12-11 格式:DOC 页数:18 大小:294KB
返回 下载 相关 举报
冒泡排序(正向+逆向)汇编语言课程设计_第1页
第1页 / 共18页
冒泡排序(正向+逆向)汇编语言课程设计_第2页
第2页 / 共18页
冒泡排序(正向+逆向)汇编语言课程设计_第3页
第3页 / 共18页
点击查看更多>>
资源描述
信息工程学院课程设计报告设计题目:汇编冒泡排序算法分析 名称:微机原理与接口课程设计班级:信息工程学院通信0902姓 名:杨 旭学 号:2009012325设计时间:2011-12-16 至 2011-12-25指导教师:徐明娟评 语:评阅成绩:评阅教师:、课程设计的性质和目的:通过课程设计,进行程设计方法和技能的基本训练,巩固在课堂上学到的有 关软件程序设计的基本知识和基本方法, 通过实际动手能力的培养, 进一步熟悉 汇编语言的结构和使用方法, 达到能独立阅读、 编制和调试一定规模的汇编语言 程序的水平。二、课程设计的要求:1、遵循模块化、结构化的程序设计方法。2、要求程序必须正确。3、程序简明易懂,多运用输入输出提示,有出错信息及必要的注释。4、要求程序结构合理,语句使用得当。5、适当追求编程技巧和程序运行效率。三、主要仪器设备及软件:PC机、MAS汇编软件。四、课程设计题目及要求:题目:汇编冒泡排序算法分析要求:用汇编语言编写冒泡排序的算法, 并比较冒泡排序正向和逆向排序的 算法的优缺点和适用情况。五、课题分析及设计思路:冒泡排序:依次比较相邻 的两个数, 将小数放在前面, 大 数放在后面。 即在第一趟: 首先比较 第 1 个和第 2 个数,将小数放前,大 数放后。然后比较第 2 个数和 第 3 个数,将小数放前,大数放后,如 此继续,直至比较最后两 个数,将小数 放前,大数放后。至此第一趟结 束,将最大的数放到了最 后。在第二趟 :仍从第一对数开始比较(因为 可能由于第 2个数和 第 3 个数的交换, 使得第 1 个数不再小于 第 2 个数 ),将小数放前 ,大数放 后,一直比较 到倒数第二个数(倒数第一的位 置上已经是最大的 ),第 二趟结束,在 倒数第二的位置上得到一个新的 最大数(其实在整个数列 中是第二大的 数)。如此下去 ,重复以上过程,直至最终完成 排序。冒泡排序可分 为正向和逆向两种排序 . 通过主程序对子程序的 调用来 完成输入输出 ,排序,循环,转化等功能。3六、程序主要流程图:七、程序主要代码与分析(关键代码要有注释)BUF为首址的字符区存放10个无符号数,从大到小进行排序(逆向) data segmentbuf dw 3,-4,6,7,9,2,-8,-10,20,0 data ends code segmentassume cs:code,ds:data start:mov ax,datamov ds,axmov cx ,10dec cx lop1:mov dx,cxmov bx,0 lop2:mov ax,bufbx cmp ax,bufbx+2 jge lop3 xchg ax ,bufbx+2 mov bufbx,axIop3:add bx,2 dec cx jne Iop2 mov cx ,dx loop Iop1 mov ah,4ch int 21h code ends end start逆向排序程序截图:将 4,6,7,9,2,0, 3,8,10,20 按降序排序第一轮:4*交6菸换71920381020647 9交换寸21038102064792不交换03i81020649720 3交换811020649720381020不交换649720381020交换649723081020L交换649723801020649723810020“交换第二轮:64 *723810200交换69 4723810200d ki t交换697 423810200J ki k不交换697 423810200i k门交换、697 432810200仆i t交换697 438210200A交换697 438102200交换697 438102020i i.不交换如此下去最终排序为:20,10,9,8,7,6,4,3,2,0冒泡正向排序:data segme ntnumdw50 dup(?)countdw10flag1db0;符号标志flag2db0;首位0标志mess1db*Please in put tenin tegers(-32768-32767)*,13,10 db *seperate them with comma and endin put with En ter :*$mess2db*I nput error!Please in putagai n!*$mess3db *The source nu mbers are asfollows:*$mess4db *The sorted nu mbers are asfollows:*$data endsprog nam segme ntmai n proc farassume cs:prog nam,ds:datastart:pushds;:把原数据存放到段寄存器subax,axpushaxmovax,datareamovds,ax输入原始数 据cmpax,-1djeredoleadx,mess3movah,09int21hcalloutputcallbubblesortleadx,mess4movah,09int21hcalloutputmovah,4chmain endpint21hinputprocleadx,mess1movah,09int21hcallcrlfmovsi,0movcx,countenter:calldecibinredo:call input; 判 断是否出错; 出错 ,退出;9 号调用,显示字符串, 请求输出数据; 输出原始 数据; 对原始数据进行 冒泡排序;9 号调用,显示字符 串,请求输出数据; 输出排序 后的数据; 输入原始数据store:error:deccxcmpdl,; 进行分隔符判断,以逗号为分隔符jestorecmpdl,13 ;进行换行 判断jeexit2jneerrormovnumsi,bx ;将BX中的二进制数存储到num中addsi,2jmpentercall crlf; 输出报错信 息leadx,mess2movah,09;9 号调用,显示字符串 ,输入数据;9 号调用,显示字符串 ,请求输入数据 ; 回车,换行int call21h crlfmov jmpax,-1dexit3;以AX中的值作为出错标志exit2:movnumsi,bx ;将BX中内容存入以num为首的存储单兀中callcrlf; 回车 换行exit3:retinputendpbubblesortproc; 将 num 中存储的数进行冒泡排序movcx,count; 初始化计数 器 CXdeccxlg1:movdi,cx;保存CX的值movsi,0lg2:movax,numsi; 相邻的两数进行比较大小cmpax,numsi+2jlelg3xchgax,numsi+2; 进行数据 交换movnumsi,axlg3:addsi,2looplg2;判断CX=0循环movcx,di;还原CX的值looplg1;判断CX=0循环retbubblesortendpoutputproc; 将 num 里的 数据以十进制输出在屏幕上call crlf; 回车, 换行movsi,0movdi,countnext1:movbx,numsitestbx,8000h判断正负jznext4movdl,-movah,2;2 号调用 ,显示单字符负号 -int21hnegbx; 求补next4:callbinidec ;将BX中的二进制数用十进制在屏幕上输出movdl,movah,02;2 号调用,输出分隔符 , int21haddsi,2decdijnznext1callcrlfretoutputendpdecibinproc;从键盘中取得 十进制数转化为二进制,并存入BX中movbx,0mov flag1,0;符号位标志 flag1,0 为正数, 1为负数newchar: mov ah,1;1号调用,单字符输入,送入alint21hmovdl,alcmpal,2dh ;与符号减号 - 的 ASCII 码作比较jnznext2movflag1,1jmpnewcharnext2:subal,30hjlnext3cmpal,9djgnext3cbwxchgax,bxmovcx,10dmulcxxchgax,bxaddbx,ax;数据加 rjmpnewcharnext3:cmpflag1,1jneexit1negbx;对bx中的内容进行求补exit1:ret13decibinendpbinidecproc ;将BX中的 二进制数以十进制形式输出在屏幕上pushbxpushcxpushsipushdimov cx,10000dcalldec_divmovcx,1000dcalldec_divmovcx,100dcalldec_divmovcx,10dcalldec_divmovcx,1dcalldec_divadd dl,flag2cmp dl,30h ; 判断这个数是否是 0 ,以免没有输出 0jne lg6movah,02hint21hlg6:popdipopsipopcxpopbxmovflag2,0 ; 还原 0 标志retbinidecendpdec_div proc;将BX中的需转换的十进 制数,输出在屏幕上movax,bxmovdx,0divcxmovbx,dxmovdl,aladddl,30h; 转换成 ASCII 码14cmpflag2,0jne lg4cmpdl,30h; 判断十进制数是否为0,以判断是否输出jelg5movflag2,1lg4:mov ah,02h;2 号调用,输出十进制数int21hlg5:retdec_divendpcrlfproc; 向终端发出回车、 换行符, 完成一次回车换行操作movdl,0ahmovah,02h; 显示功能int21hmovdl,0dh; 回车movah,02h; 显示功能int21hretcrlfendpprognamendsendstart正向排序程序截图:1、正确输出结果 :*Please input ten integersC-32768-32767*seperte them uitli comma and end input with Enter : -5.12.31,3,9,45,-16,97,28,65*The source numb日户乞 are as f Hows:*wb5,12,31,3,9,45,-16,97, 28,65,*The sorted nurnJbeps are as f Hows:* 16,-5,3,9,12,28,31,45,65,97,Press anv key to continue2、当输入不合法时,程序会自动跳到初始位置,并给出了出错提醒,要求重新输 入数据:*Pleae input ten integers*epedate them with comna and end input with Enter :* 4B*Input error*Please input again*Please input ten intogers*eperate them with cotnna and end input uith Enter :*w*3、当输入不足10个数时,就会自动补0:p*Please input ten integers*Pseperate them iith comna and end input with Enter :* 54,12,-9,78,56*The source nunbeps Ai*e as follows :*54.12-9,78,56.0,0,0. 0,0,p*Tie sorted numbers are as FoHous:*卜Y.0乩 0.0乩石,?B rPress anj; kwy to cont inue九、心得体会:经过九天左右的汇编语言课程设计,使我对汇编语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它, 通过 实践,我也发现我的好多不足之处,首先是自己在汇编语言认识上还不足, 通过 学习也有所改进;还有对汇编语言中经常出现的错误也不了解, 通过实践,使我 在这几个方面的认识有所提高。汇编语言比高级语言更加底层,要求用户能够了 解每一个细节性的东西。汇编程序采用指令助记符来完成一个又一个操作,程序 十分简短,但功能却很强大。这次的冒泡排序程序设计中,我不仅复习了冒泡算法,还复习了汇编程序中子程序的使用。就设计结构而言,本次课设还是采用功能分解、逐步求精的思想, 一步步的实现要求的功能,并在一些已有的程序上作进一步的改进, 来达到要求 实现的的功能。就这两点而言,这和高级语言 C+H很像,实现起来的过程也十分 相似。回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可 以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所 学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计 使我懂得了理论与实际相结合是很重要的, 只有理论知识是远远不够的,只有把 所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务, 从而提高自己的实际动手能力和独立思考的能力。实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在 成功后一起体会喜悦的心情。此次设计也让我明白了思路即出路, 有什么不懂不 明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没 有弄不懂的知识,收获颇丰。18
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!