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