8051汇编实现排序——堆排序

//无符号数堆排序
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值