最簡(jiǎn)短且高效的排序程序
要求使用MCS-51單片機(jī),進(jìn)行數(shù)據(jù)排序。
1.對(duì)8個(gè)數(shù)據(jù)進(jìn)行遞增排序;
2.需要排序的數(shù)據(jù)存在內(nèi)部數(shù)據(jù)存儲(chǔ)器30H-37H地址單元中,分別為34H,56H,23H,90H,32H,68H,09H,75H;
3.排序后數(shù)據(jù)存在內(nèi)部數(shù)據(jù)存儲(chǔ)器30H-37H地址單元中。
最佳答案:
;-----------------------------------------------------
ORG0000H
MOV30H,#34H
MOV31H,#56H
MOV32H,#23H
MOV33H,#90H
MOV34H,#32H
MOV35H,#68H
MOV36H,#09H
MOV37H,#75H
CALLSORT
SJMP$
;-----------------------------------------------------
SORT:;最簡(jiǎn)短、高效的排序程序.
MOVB,#7;第一輪排序時(shí),比較7次.
S1:MOVR0,#30H;數(shù)據(jù)區(qū)的起始地址.
CLRPSW.5;清除"交換"標(biāo)志位.
MOVR7,B
S2:MOVA,@R0;取前一個(gè)數(shù).
INCR0
CLRC
SUBBA,@R0;減后一個(gè)數(shù),前<后時(shí),Cy=1
S3:JCS4;有借位時(shí),不用交換,轉(zhuǎn)移.
MOVA,@R0;取后一個(gè)數(shù),準(zhǔn)備交換.
DECR0
XCHA,@R0;交換到前一個(gè).
INCR0
XCHA,@R0;交換到后一個(gè).
SETBPSW.5;設(shè)定"交換"標(biāo)志位.
S4:DJNZR7,S2;繼續(xù)本輪比較.
JNBPSW.5,ENDS;如本輪沒(méi)有進(jìn)行過(guò)交換,可提前結(jié)束.
DJNZB,S1;下一輪,比較次數(shù)少一次.
ENDS:RET
;-----------------------------------------------------
END
;=====================================================
;=====================================================
后記:
這個(gè)排序程序,是做而論道經(jīng)過(guò)多年的精心研究編寫出來(lái)的,在各種書籍、網(wǎng)文中,從沒(méi)有與此相同的程序。
本程序有如下一些特點(diǎn):
1.使用了“冒泡法”。
2.可檢測(cè)序列是否已經(jīng)排好,具有提前退出循環(huán)的能力。
3.程序中使用了寄存器ACC、B、R0、R7,以及PSW,占用硬件資源最少。
4.程序結(jié)構(gòu)簡(jiǎn)單,運(yùn)行時(shí),花費(fèi)的時(shí)間最短。
5.文字標(biāo)注清晰明確,便于理解和修改程序。
修改時(shí),只需改動(dòng)開(kāi)始的兩行,即可修改參加排序數(shù)據(jù)的個(gè)數(shù)和起始地址。
另外,把S3:JCS4,改為JNC,即成為遞減排序。
大家可以看看其它類似的排序程序,肯定找不到比做而論道編寫的更簡(jiǎn)單高效的了。
;=====================================================