⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selsort.asm

📁 单片机程序设计基础 随书光盘
💻 ASM
字号:
;选择排序算法
DATS	EQU	30H	;待排序数据区首址。
N	EQU	8	;待排序数据元素(单字节)个数。

	ORG	0000H
	LJMP	TEST
	
	ORG	100H	
TEST:	MOV	DPTR,#LIST	;设置单字节表格
	MOV	R0,#DATS
	MOV	R2,#N
COPY:	CLR	A
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	R2,COPY
	LCALL	SELSORT		;调用选择排序算法
STOP:	LJMP	STOP

LIST:	DB	53H,87H,12H,9AH
	DB	2FH,3CH,0A8H,0BCH

SELSORT:MOV	R0,#DATS;从第一个位置开始。
	MOV	R2,#N-1	;需要处理的元素为N-1个。
LOOP:	MOV	B,@R0	;取当前位置元素作为最小值的初始值。
	MOV	A,R0
	MOV	R3,A	;取当前位置作为最小值的位置。
	INC	A
	MOV	R1,A	;取下一个位置作为比较的开始。
	MOV	A,R2
	MOV	R4,A	;控制比较次数。
LOOP1:	MOV	A,@R1	;取一个数据元素。
	CLR	C
	SUBB	A,B	;和当前最小值比较。
	JNC	LOOP2	;不小于当前最小值。
	MOV	B,@R1	;保存新的最小值。
	MOV	A,R1
	MOV	R3,A	;保存新的最小值的地址。
LOOP2:	INC	R1	;调整指针。
	DJNZ	R4,LOOP1;比较完全部未排序元素。
	MOV	A,R3
	MOV	R1,A	;取当前最小值的地址。
	MOV	A,@R1	;将当前最小值和指定位置的数据元素进行交换。
	XCH	A,@R0
	XCH	A,@R1
	INC	R0	;处理下一个位置。
	DJNZ	R2,LOOP	;处理完前N-1个位置。
	RET		;全部排序完毕。

	END


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -