汇编实现直接插入排序的方法示例
上一篇实现了简单插入排序的算法,这一篇主要实现直接插入排序算法:
S0SEGMENTSTACK DW20DUP(?) TOPLABELWORD S0ENDS S1SEGMENT TIPDB"Inputtennumberandseparatethenumberswithspace:",0DH,0AH,24H ARYDW20DUP(0) CRLFDB0DH,0AH,24H NDW0 EDW0 S1ENDS S2SEGMENT ASSUMESS:S0,DS:S1,CS:S2,ES:S1 PPROCFAR MOVAX,S0 MOVSS,AX LEASP,TOP MOVAX,S1 MOVDS,AX MOVAX,S1 MOVES,AX LEADX,TIP MOVAH,9 INT21H LEASI,ARY XORDX,DX PUSHDX MOVBL,10 MOVCX,10 INPUT:MOVAH,1 INT21H CMPAL,20H;空格分隔字符 JESAVE ;输入十进制数,将数存入SI对应的内存单元 MOVDL,AL MOVAX,[SI] MULBL SUBDL,30H ADDAL,DL MOV[SI],AX JMPINPUT SAVE: ADDSI,2 LOOPINPUT ;数组保存完毕 LEASI,ARY MOVDI,SI ADDDI,2 SUBSI,2 MOVE,SI;E用于存放数组的前一个地址,用来判断遍历结束 ADDSI,2 XORAX,AX;AX用来存插入元素的地址 MOVCX,9;总循环次数 GO:MOVBX,[DI] PUSHSI;第一个数的位置压栈 CMPA:CMPBX,[SI] JASEL ;小于就把AX的值存放当前要插入的位置 MOVAX,SI SUBSI,2 CMPSI,E JNECMPA SEL:CMPAX,0;判断AX是否又被修改过,没有说明当前数比前面的数大 JECON POPSI;取出第一个数字的位置 ;从AX到SI这一段的所有数字往后移动一个位置 CHANGE:MOVDX,[SI] XCHGDX,[SI+2] ;当SI表示的位置在AX前面了,说明移动完成 MOVBP,SI SUBSI,2 CMPAX,BP JNECHANGE MOVSI,AX MOV[SI],BX CON:ADDDI,2;继续下一次 MOVSI,DI SUBSI,2 XORAX,AX;同时需要清空AX CALLPRINT LOOPGO EXIT:MOVAH,4CH INT21H PENDP ;以下为十进制输出数组中的所有数 PRINTPROCNEAR PUSHSI PUSHCX PUSHAX PUSHDX LEADX,CRLF MOVAH,9 INT21H LEASI,ARY MOVCX,10 L1:MOVAX,[SI] MOVN,AX CALLOUTPUT ADDSI,2 MOVDX,20H MOVAH,2 INT21H LOOPL1 POPDX POPAX POPCX POPSI RET PRINTENDP OUTPUTPROCNEAR PUSHAX PUSHBX PUSHCX PUSHDX XORCX,CX MOVAX,N MOVBX,10 L2:XORDX,DX DIVBX PUSHDX INCCX CMPAX,0 JNEL2 L3:POPDX ADDDX,30H MOVAH,2 INT21H LOOPL3 POPDX POPCX POPBX POPAX RET OUTPUTENDP S2ENDS ENDP
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。