汇编实现简单选择排序的方法示例
上阵子重温数据结构,差不多更新到排序。这学期学了汇编语言,其中有几个实验便是实现内部排序算法。以下是实现简单选择排序的程序设计:
S0SEGMENTSTACK DW20DUP(?) TOPLABELWORD S0ENDS S1SEGMENT TIPDB"Inputtennumberandseparatethenumberswithspace:",0DH,0AH,24H ARYDW20DUP(0) CRLFDB0DH,0AH,24H NDW0 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 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;DI位于数组的第二元素的位置 MOVBP,9;SI移动的次数和每一次比较的次数,第一次为9 GO:MOVCX,BP;每一次比较的循环次数 MOVBX,[SI];第一个数 CMPA:CMPBX,[DI];比较后面的数是否比当前的小 JBECON;大于就比较下一个 MOVBX,[DI];将寄存器中的值替换为最小的值 MOVAX,DI;AX存放最小值的偏移地址 CON:ADDDI,2 LOOPCMPA CMPAX,0;如果AX为0,则表示后面的值没有比当前值小 JENO;此时SI加一,移动到第二个数下一次循环比较开始 CHANGE:MOVDX,[SI];78-83行替换当前值与最小值 PUSHDX MOV[SI],BX POPDX MOVDI,AX MOV[DI],DX NO:ADDSI,2 MOVDI,SI ADDDI,2 CALLPRINT DECBP;循环的次数减一 XORAX,AX;清除AX的内容,以便76行判断 CMPBP,1 JNEGO 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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。