;;入口:待排序的N個單字節無符號整數所在的RAM首址存于R3,N存于R4;
;;返回:由小至大排序完畢的N個數據存于原RAM塊。
QUE: MOV A, R3
MOV R0, A ;;R0←RAM首址
MOV A, R4
MOV R7, A ;;R7←N
CLR PSW.5 ;;交換標志清零,表示未交換數
MOV A, @R0 ;;A←RAM中首個數
LP1: INC R0 ;;RAM指針加1
MOV R2, A ;;送前數于R2暫存
CLR C ;;借位清零
SUBB A, @R0 ;;A←(A)-(C)-((R0))
MOV A, R2 ;;恢復前數于A
JC LP2 ;;若有借位,表示后數較大,無須交換,轉LP2
SETB PSW.5 ;;若無借位,表示前數≧后數,交換標志置1
XCH A, @R0 ;;(A),((R0))交換
DEC R0 ;;RAM指針-1
XCH A, @R0 ;;將較小的數冒泡上移
INC R0 ;;RAM指針加1
LP2: MOV A, @R0 ;;A←下一個數據
DJNZ R7, LP1 ;;若待比較的數據個數未遞減至零,轉LP1繼續比較
RET
|