您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 用汇编语言编写的排序程序
用汇编语言编写的排序程序一实验目的………………………………………………3二题目…………………………………………………..3三算法分析……………………………………………..3四流程图及算法…………………………………………5五源程序附录a、参考文献一实验目的:1、进一步熟悉汇编语言的代码;2、学会分析算法并构造流程图;3、能够完成简单的子程序设计;4、学会查找程序的算法。二题目将以地址DATA开始的10个无符号字数据按从大到小的顺序重新排列三算法分析排序算法采用冒泡法,假定待排序数组中有X1,X2,X3,…X10共十个无符号数据,冒泡排序法的具体做法是:最多有九次外循环。每次外循环均从底部开始进行两两比较,若后者大于前者,两者位置交换,反之不变。然后两两比较向前推移,直到本次外循环应完成的两两比较次数(成为内循环次数达到为止)。此时,本次外循环结束,最大的数冒到本次外循环的顶部。第一次外循环,第一次外循环,两两比较的次数为n-1次,最大数据冒到X1的位置;第二次外循环,两两比较次数为n-2次,剩余最大数据冒到X2位置;以此类推,第n-1次外循环,两两比较次数为1次,剩余最大数据项冒到Xn-1的位置。若再一次外循环结束后,经判断本次外循环一次位置交换也未发生过或仅在底部发生过一次交换,则本次外循环结束,数的顺序已排妥,余下的外循环不用进行了。开始设大循环次数DX设小循环变量CX设交换标志BX=DX置变址值取ejej=ej-1交换交换标志=CX修改变址值CX=CX-1CX=0BX=DX?结束DX=DX-1流程图如上所示。根据流程图编写程序:如下:;程序模板SSEGSEGMENTPARASTACK'stack'dw100hdup(0);初始化堆栈大小为100SSEGENDSDSEGSEGMENTDATADW150,12,54,89,73,152,45,68,98,65COUNTEQU$-DATABUFODB6DUP(?),'$'DSEGENDSESEGSEGMENT;附加段:在此处添加程序所需的数据ESEGENDSCSEGSEGMENTassumecs:CSEG,ds:DSEG,es:ESEG,ss:SSEGDISPPROC;显示DI所指ASCII字符串的子程序PUSHDXPUSHAXMOVDX,DIMOVAH,09HINT21HMOVDL,','MOVAH,2INT21HPOPAXPOPDXRETDISPENDPDATCHPROCFAR;转换数值成为ASCII串的子程序PUSHDX;入口参数在AX中,要转换的数在DI中PUSHCX;出口参数在DI中,是结果缓冲区指针PUSHBXMOVCX,10MOVBX,AXDLOP1:DECDIXORDX,DXDIVCXORDL,30HMOV[DI],DLCMPAX,0JNZDLOP1POPBXPOPCXPOPDXRETDATCHENDPMAINPROCFAR;主程序入口movax,dsegmovds,axmovax,esegmoves,axSTART:XORAX,AXMOVDX,AX;主程序MOVCX,AXMOVDX,COUNT/2;DX,被排序数据个数LOP1:DECDX;DX,大循环变量(大循环次数)MOVCX,DX;CX,小循环变量(两两比较次数)MOVBX,DX;设置交换标志LEASI,BUFOSUBSI,2LOP2:MOVAX,[SI]CMPAX,[SI-2]JBEPASSXCHG[SI-2],AXMOV[SI],AXMOVBX,CXPASS:SUBSI,2LOOPLOP2CMPBX,DXJEDLAST;数的顺序已排妥,转DLASTJMPLOP1DLAST:MOVCX,COUNT/2;显示的数据个数LEASI,DATA;数据的缓存区首地址LOP3:MOVAX,[SI]MOVDI,OFFSETBUFOADDDI,LENGTHBUFOCALLDATCHCALLDISPADDSI,2LOOPLOP3movah,1int21hmovax,4c00h;程序结束,返回到操作系统系统int21hMAINENDPCSEGENDSENDMAIN结果:
本文标题:用汇编语言编写的排序程序
链接地址:https://www.777doc.com/doc-5171671 .html