//无符号数堆排序
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV DPTR, #2100H
MOV R7, #0BH
TEST_LOOP1:
MOV A, R7
MOVX @DPTR, A
INC DPTR
DJNZ R7, TEST_LOOP1
MOV DPTR, #2105H
MOV A, #0BH
MOVX @DPTR, A
MOV SIZE, #11
LCALL HEAP_SORT
SJMP $
SIZE DATA 34H
HEAP_SORT:
MOV A, SIZE
CLR C
RRC A
MOV R7, A
MOV R6, A
INC R7
HEAP_SORT_LOOP1:
MOV START_POINTER, R6
MOV END_POINTER, SIZE
DEC END_POINTER
LCALL CREATE_HEAP
DEC R6
DJNZ R7, HEAP_SORT_LOOP1
MOV R7, SIZE
DEC R7
MOV R6, SIZE
DEC R6
DEC R6
HEAP_SORT_LOOP2:
MOV DPL, #0
MOVX A, @DPTR
PUSH ACC
MOV DPL, R7
MOVX A, @DPTR
MOV DPL, #0
MOVX @DPTR, A
POP ACC
MOV DPL, R7
MOVX @DPTR, A
MOV START_POINTER, #0
MOV END_POINTER, R6
LCALL CREATE_HEAP
DEC R6
DJNZ R7, HEAP_SORT_LOOP2
RET
START_POINTER DATA 30H
END_POINTER DATA 31H
TEMP DATA 32H
REG DATA 33H
CREATE_HEAP:
MOV DPL, START_POINTER
MOVX A, @DPTR
MOV TEMP, A
MOV A, START_POINTER
CLR C
RLC A
INC A
MOV R5, A
LOOP:
MOV A, R5
CLR C
CJNE A, END_POINTER, N_EQU1
LJMP JUDGE2
N_EQU1:
JNC NEXT
LOOP_OPER1:
JUDGE1:
MOV DPL, R5
MOVX A, @DPTR
MOV REG, A
INC DPL
MOVX A, @DPTR
CLR C
CJNE A, REG, N_EQU2
LJMP JUDGE2
N_EQU2:
JC JUDGE2
INC R5
JUDGE2:
MOV DPL, R5
MOVX A, @DPTR
CJNE A, TEMP, N_EQU3
LJMP LOOP_OPER2
N_EQU3:
JC NEXT
LOOP_OPER2:
MOV DPL, R5
MOVX A, @DPTR
MOV DPL, START_POINTER
MOVX @DPTR, A
MOV START_POINTER, R5
MOV A, R5
CLR C
RLC A
MOV R5, A
LJMP LOOP
NEXT:
MOV DPL, START_POINTER
MOV A, TEMP
MOVX @DPTR, A
RET
END
8051汇编实现排序——堆排序
最新推荐文章于 2023-11-26 11:03:09 发布