8051汇编实现排序——选择排序

//无符号数选择排序
MIN		    EQU	30H
MIN_PLACE_L EQU	31H
MIN_PLACE_H EQU	32H
AFTER_NUM   EQU	33H
TEMP		EQU	34H
ORG	   	  0000H
LJMP	  MAIN
ORG		  0100H
MAIN:
//测试数据准备2100H~2109H填入0AH~01H
MOV		DPTR,	#2100H
MOV		R7,		#10
TEST_LOOP1:
MOV		A,		R7
MOVX	@DPTR,	A
INC		DPTR
DJNZ	R7,		TEST_LOOP1


MOV		R7,		#9
MOV		AFTER_NUM,#9
MOV		DPTR,	#2100H //从第1个数开始
SELECT_LOOP1:
MOVX	A,		@DPTR
MOV		MIN,	A
MOV		MIN_PLACE_L,	DPL
MOV		MIN_PLACE_H,	DPH	
PUSH	DPL	    //保护此时的DPTR
PUSH	DPH

		MOV		R6,		AFTER_NUM		
		SELECT_LOOP2:
		INC		DPTR
		MOVX	A,		@DPTR
		CJNE	A,		MIN,		N_EQU	
		CONTINUE_THIS_SELECT:	
		DJNZ	R6,		SELECT_LOOP2

DEC 	AFTER_NUM
//当前值与最小值交换
POP		DPH
POP		DPL	
MOVX	A,		@DPTR
MOV		TEMP,   A
PUSH	DPL
PUSH	DPH
MOV		DPL,    MIN_PLACE_L
MOV		DPH,    MIN_PLACE_H	
MOVX	A,		@DPTR
POP		DPH
POP		DPL	
MOVX	@DPTR,	A
PUSH	DPL
PUSH	DPH
MOV		DPL,    MIN_PLACE_L
MOV		DPH,    MIN_PLACE_H	
MOV		A,		TEMP
MOVX	@DPTR,	A
POP		DPH
POP		DPL
INC		DPTR
DJNZ	R7,		SELECT_LOOP1
DONE:
SJMP	$

N_EQU:
JNC		NO_NEW_MIN//A<TEMP,C=1
//记录最小值位置和大小
MOV		MIN,	A
MOV		MIN_PLACE_L,	DPL
MOV		MIN_PLACE_H,	DPH	
NO_NEW_MIN:		
LJMP	CONTINUE_THIS_SELECT//A>TEMP,C=1

END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值