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

📄 inssort.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 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	INSSORT	;调用插入排序算法
STOP:	LJMP	STOP

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

INSSORT:MOV	R3,#1	;默认第一个元素已经排序。
	MOV	R2,#N-1	;需要继续排序处理的元素为N-1个。
LOOP:	MOV	A,R3	;取当前已经排序的元素个数。
	MOV	R4,A	;作为本次比较次数的上限。
	ADD	A,#DATS	;加上数据区首址。
	MOV	R0,A	;得到待排序元素的地址。
	DEC	A	;前面一个地址。
	MOV	R1,A	;是已经排序区域的最后一个元素的地址。
	MOV	B,@R0	;保存待排序元素的数值。
LOOP1:	MOV	A,@R1	;取一个已经排序的数据元素。
	SETB	C
	SUBB	A,B	;和待插入的排序元素比较。
	JC	LOOP2	;不大于待插入的排序元素,不必后移。
	MOV	A,@R1	;大于待插入的排序元素,读取其数值。
	MOV	@R0,A	;后移一个位置。
	DEC	R0	;调整指针,准备继续比较。
	DEC	R1
	DJNZ	R4,LOOP1;处理完全部已经排序的元素。
LOOP2:	MOV	@R0,B	;将待排序的元素插入到空出的位置上。
	INC	R3	;已经排序的元素个数增加一个。
	DJNZ	R2,LOOP	;处理完N-1个数据元素。
	RET		;全部排序完毕。
	END



⌨️ 快捷键说明

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