ORG 0000H
LJMP SORT
ORG 50H
DB 55H,66H,0AAH,44H,77H,22H,88H,00H,33H,55H,99H
SORT: ;最简短、高效的排序程序.
MOV B, #0AH ;第一轮排序时,比较0AH次.
S1: MOV R0, #50H ;数据区的起始地址.
CLR PSW.5 ;清除"交换"标志位.
MOV R7, B
S2: MOV A, @R0 ;取前一个数.
INC R0
CLR C
SUBB A, @R0 ;减后一个数,前<后时,Cy=1
S3: JNC S4 ;无借位时,不用交换,转移.
MOV A, @R0 ;取后一个数,准备交换.
DEC R0
XCH A, @R0 ;交换到前一个.
INC R0
XCH A, @R0 ;交换到后一个.
SETB PSW.5 ;设定"交换"标志位.
S4: DJNZ R7, S2 ;继续本轮比较.
JNB PSW.5, ENDS ;如本轮没有进行过交换,可提前结束.
DJNZ B, S1 ;下一轮,比较次数少一次.
ENDS:
SJMP $
END
LJMP SORT
ORG 50H
DB 55H,66H,0AAH,44H,77H,22H,88H,00H,33H,55H,99H
SORT: ;最简短、高效的排序程序.
MOV B, #0AH ;第一轮排序时,比较0AH次.
S1: MOV R0, #50H ;数据区的起始地址.
CLR PSW.5 ;清除"交换"标志位.
MOV R7, B
S2: MOV A, @R0 ;取前一个数.
INC R0
CLR C
SUBB A, @R0 ;减后一个数,前<后时,Cy=1
S3: JNC S4 ;无借位时,不用交换,转移.
MOV A, @R0 ;取后一个数,准备交换.
DEC R0
XCH A, @R0 ;交换到前一个.
INC R0
XCH A, @R0 ;交换到后一个.
SETB PSW.5 ;设定"交换"标志位.
S4: DJNZ R7, S2 ;继续本轮比较.
JNB PSW.5, ENDS ;如本轮没有进行过交换,可提前结束.
DJNZ B, S1 ;下一轮,比较次数少一次.
ENDS:
SJMP $
END
