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

📄 bsort.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 ASM
字号:
;三字节浮点数冒泡排序算法
ADDR	EQU	2000H	;三字节浮点数数组首址。
NUMB	EQU	0120H	;浮点数个数。
TEMP1	EQU	30H	;浮点数暂存区1的首址。
TEMP2	EQU	33H	;浮点数暂存区2的首址。
EXC	BIT	00H	;交换标志。

	ORG	0000H
	LJMP	TEST
	
	ORG	0100H
TEST:	MOV	DPTR,#ADDR	;将测试数据传送到片外RAM中。
	MOV	P2,DPH
	MOV	R0,DPL
	MOV	DPTR,#NUMB
	MOV	R2,DPH
	MOV	R3,DPL
	MOV	DPTR,#LIST
	MOV	A,R3
	JZ	TEST1
	INC	R2
TEST1:	MOV	R4,#3
TEST2:	CLR	A
	MOVC	A,@A+DPTR
	MOVX	@R0,A
	INC	DPTR
	INC	R0
	CJNE	R0,#0,TEST3
	INC	P2
TEST3:	DJNZ	R4,TEST2
	DJNZ	R3,TEST1
	DJNZ	R2,TEST1
	LCALL	BUBB		;调用冒泡排序算法。
STOP:	LJMP	STOP

BUBB:	MOV	R6,#HIGH(NUMB);初始化交换次数为浮点数总个数。
	MOV	R7,#LOW(NUMB)
BUBB1:	CLR	EXC	;开始一轮冒泡操作前,初始化交换标志。
	CJNE	R7,#0,BUBB2;本轮交换次数比上一轮少一次。
	DEC	R6
BUBB2:	DEC	R7
	MOV	A,R6	;取本轮交换次数。
	MOV	R4,A
	MOV	A,R7
	MOV	R5,A
	ORL	A,R6
	JZ	BUBBE	;比较次数为零,排序结束。
	MOV	A,R5	;调整本轮比较次数的控制计数器。
	JZ	BUBB3
	INC	R4
BUBB3:	MOV	DPTR,#ADDR;取数据区首址。
BUBB4:	MOV	R0,#TEMP1;读取一个浮点数。
	LCALL	LOAD
	PUSH	DPH	;保存下一个浮点数的地址。
	PUSH	DPL
	LCALL	LOAD	;再读取一个浮点数。
	POP	DPL	;恢复这个浮点数的地址。
	POP	DPH
	MOV	R0,#TEMP2;指向这两个浮点数的片内副本。
	MOV	R1,#TEMP1
	LCALL	FCMP	;比较浮点数的大小(参阅浮点子程序库)。
	JNC	BUBB6	;顺序正确。
	SETB	EXC	;顺序不正确,设立交换标志。
	MOV	R0,#TEMP1;存放到后一个数据的片外地址中。
	LCALL	SAVE	
	MOV	A,#0FAH	;将指针退回到前一个数据的地址。
	ADD	A,DPL
	MOV	DPL,A
	JC	BUBB5
	DEC	DPH
BUBB5:	LCALL	SAVE	;将后一个浮点数存放到前一个数据的片外地址中。
BUBB6:	DJNZ	R5,BUBB4;进行完本轮的比较。
	DJNZ	R4,BUBB4
	JB	EXC,BUBB1;本轮操作中发生过交换,则需要进行下一轮操作。
BUBBE:	RET		;否则,排序结束。

LOAD:	MOV	R3,#3	;将一个三字节浮点数复制到片内RAM中。
LOAD1:	MOVX	A,@DPTR
	MOV	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	R3,LOAD1
	RET

SAVE:	MOV	R3,#3	;将一个三字节浮点数存放到片外RAM中。
SAVE1:	MOV	A,@R0
	MOVX	@DPTR,A
	INC	R0
	INC	DPTR
	DJNZ	R3,SAVE1
	RET

FCMP:	MOV	A,@R0		;浮点数比较子程序
	XRL	A,@R1
	JNB	ACC.7,CMP2
	MOV	A,@R0
	RLC	A
	MOV	A,#0FFH
	RET
CMP2:	MOV	A,@R1
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	B,A
	MOV	A,@R0
	MOV	C,ACC.7
	MOV	F0,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	CLR	C
	SUBB	A,B
	JZ	CMP6
	RLC	A
	JNB	F0,CMP5
	CPL	C
CMP5:	MOV	A,#0FFH
	RET
CMP6:	INC	R0
	INC	R0
	INC	R1
	INC	R1
	CLR	C
	MOV	A,@R0
	SUBB	A,@R1
	MOV	B,A	
	DEC	R0
	DEC	R1
	MOV	A,@R0
	SUBB	A,@R1
	DEC	R0
	DEC	R1
	ORL	A,B
	JZ	CMP7
	JNB	F0,CMP7
	CPL	C
CMP7:	RET

LIST:	DB	0BH,94H,0A7H,0F3H,94H,0EBH
	DB	78H,9DH,66H,7AH,0ACH,0C8H
	DB	7AH,99H,03H,8EH,0A0H,66H
	DB	76H,8CH,0D5H,8CH,9AH,0B0H
	DB	00H,0D6H,1EH,76H,0C3H,0D2H
	DB	7DH,0FAH,5AH,0BH,0CBH,55H
	DB	0F1H,0EAH,0BCH,0DH,0D7H,9CH
	DB	85H,0F3H,9AH,75H,0F3H,50H
	DB	0FBH,0EAH,0AH,0F9H,0C1H,5AH
	DB	89H,0ABH,4AH,05H,0E9H,4DH
	DB	80H,0A9H,0ACH,85H,0B5H,9EH
	DB	84H,0B3H,0D6H,0F4H,0FAH,0D8H
	DB	0FAH,0DBH,0FH,0F9H,0E1H,0E6H
	DB	7DH,0BCH,0DEH,8DH,9BH,0D8H
	DB	0F0H,0FBH,0DH,7EH,0E1H,0A5H
	DB	0FDH,0B4H,0B9H,8DH,97H,37H
	DB	0F0H,0E6H,0F7H,7AH,0DEH,0F9H
	DB	8BH,0DFH,28H,73H,0E5H,1FH
	DB	7FH,0A3H,0EEH,8FH,0FDH,0C4H
	DB	82H,0B8H,9FH,0F1H,93H,0E5H
	DB	0FEH,0FCH,0BEH,7CH,97H,0D1H
	DB	0F9H,0FAH,33H,7EH,0C6H,6FH
	DB	0FBH,0CDH,0F2H,0DH,0BEH,57H
	DB	03H,0CAH,0E2H,0F6H,0DCH,43H
	DB	0FH,88H,72H,75H,8EH,59H
	DB	0EH,0CBH,20H,04H,0E4H,1BH
	DB	07H,83H,7BH,85H,0EFH,74H
	DB	02H,0EEH,9CH,81H,0D3H,80H
	DB	87H,0F0H,1EH,77H,83H,0C6H
	DB	0F9H,0F8H,0D3H,08H,9AH,79H
	DB	0F1H,0CFH,3BH,7CH,0E7H,75H
	DB	0DH,0EEH,0AFH,87H,0D5H,0F2H
	DB	83H,0BEH,5DH,77H,0CBH,0BCH
	DB	0FAH,0F7H,8BH,0FH,0F1H,79H
	DB	0F5H,0AFH,30H,0FBH,0E6H,06H
	DB	88H,0C0H,0CEH,87H,99H,0D5H
	DB	03H,0BAH,0B8H,70H,0D7H,19H
	DB	0FCH,0E3H,30H,7DH,0E6H,19H
	DB	8BH,0C3H,27H,81H,0E4H,0FBH
	DB	03H,9FH,66H,81H,0ECH,0C7H
	DB	72H,98H,0FDH,8FH,9FH,0ADH
	DB	76H,0F5H,0B7H,7CH,0B6H,0E7H
	DB	0FFH,0DCH,0E6H,0FAH,9CH,0D7H
	DB	7BH,9AH,0E6H,7EH,0DCH,0DAH
	DB	7EH,9BH,49H,7DH,0E9H,3BH
	DB	7EH,0A7H,61H,8DH,0ECH,2EH
	DB	84H,85H,0CEH,83H,0B9H,0D9H
	DB	06H,0BBH,20H,0F2H,0E4H,0FH
	DB	0FCH,81H,0F2H,8DH,0BEH,4BH
	DB	02H,0C9H,73H,0F0H,0AEH,79H
	DB	0FH,0CFH,3EH,84H,0E7H,0D5H
	DB	07H,0FAH,0BFH,87H,0D7H,0F0H
	DB	0F3H,0FEH,19H,7DH,0C3H,3CH
	DB	0FBH,0E7H,90H,0FH,0F2H,07H
	DB	81H,0C0H,0FAH,0F3H,9FH,57H
	DB	09H,0EAH,0E1H,70H,0DCH,2FH
	DB	8FH,85H,0F8H,75H,0BFH,0EH
	DB	0EH,0E1H,0D6H,0F2H,0BAH,0D9H
	DB	8FH,0DBH,34H,0F0H,0E6H,9BH
	DB	7DH,0D3H,7FH,8DH,0EFH,0FDH
	DB	73H,0FFH,0B4H,89H,0F6H,9BH
	DB	0F7H,0D3H,70H,0FFH,0EEH,0CH
	DB	7BH,0C1H,98H,89H,0B3H,1EH
	DB	07H,0E3H,0D6H,0F0H,0FAH,0C9H
	DB	89H,0D9H,3BH,0F1H,0A7H,63H
	DB	7DH,0ECH,76H,8CH,8EH,0C5H
	DB	83H,0D8H,0B7H,06H,96H,0FAH
	DB	77H,0DFH,51H,7CH,0EAH,34H
	DB	7BH,0C6H,9EH,8FH,0D3H,0CAH
	DB	05H,0F9H,49H,73H,0A9H,20H
	DB	0F9H,0A4H,09H,8CH,81H,2DH
	DB	84H,0A5H,0A6H,02H,0B4H,0C5H
	DB	80H,98H,0B3H,0F2H,96H,70H
	DB	7AH,0CEH,0EH,7CH,0C1H,0DEH
	DB	0BH,0BBH,0D2H,07H,0FAH,4BH
	DB	0F0H,0C9H,70H,0FDH,0AEH,04H
	DB	0DH,0C0H,8EH,84H,91H,0CDH
	DB	07H,0B9H,0AAH,70H,0B5H,54H
	DB	0F8H,0AAH,8AH,0FCH,0D1H,4CH
	DB	8AH,0A9H,9BH,75H,0B3H,79H
	DB	88H,0EFH,39H,0F4H,0E7H,38H
	DB	89H,0E7H,00H,87H,0E0H,0EH
	DB	83H,81H,0DCH,83H,0BBH,90H
	DB	00H,0F2H,03H,0F0H,0C0H,61H
	DB	0FDH,8CH,38H,09H,87H,12H
	DB	00H,0E2H,54H,06H,0CAH,9FH
	DB	83H,0D3H,0FAH,01H,0FFH,46H
	DB	75H,0E8H,0C5H,0F9H,98H,0B6H
	DB	8FH,96H,0DCH,74H,0DBH,8FH
	DB	7CH,0F1H,0E4H,7BH,0BCH,80H
	DB	0FDH,90H,0BH,0F8H,81H,7EH
	DB	7EH,0AFH,0D4H,08H,0FAH,88H
	DB	80H,0D1H,18H,0F7H,0A3H,0EH
	DB	7DH,0E1H,0C9H,88H,0B9H,39H
	DB	81H,0A7H,39H,0F0H,0E7H,22H
	DB	8CH,0E4H,48H,83H,89H,09H
	DB	83H,0A1H,29H,02H,0A5H,3DH
	DB	84H,0A7H,0A8H,80H,0F5H,1CH
	DB	82H,0A3H,95H,0F3H,0F2H,0B4H
	DB	8AH,0D6H,8EH,0F1H,0D1H,0DEH
	DB	79H,0BBH,0D5H,7BH,0FAH,0ADH
	DB	0F8H,0D5H,0B1H,0FDH,0B6H,2AH
	DB	7DH,0C5H,57H,0FAH,0AAH,0ECH
	DB	0BH,0DDH,85H,82H,0B0H,0B7H
	DB	75H,96H,0F7H,0FEH,0DEH,0ECH
	DB	78H,0DDH,87H,7BH,0B0H,0ECH
	DB	7FH,9DH,9DH,0FEH,0B3H,0AAH
	DB	78H,0F5H,45H,0FEH,0A8H,0ACH
	DB	0F9H,95H,9FH,8AH,0B3H,0E9H
	DB	74H,0FDH,35H,0FAH,0A6H,0A7H
	DB	0F9H,0D4H,0EEH,8EH,9DH,0DDH
	DB	73H,0BBH,0A3H,7AH,0F4H,79H
	DB	0FEH,8FH,24H,0FDH,0E4H,8CH
	DB	0AH,91H,9DH,87H,0B3H,0A1H
	DB	72H,0F4H,37H,0F8H,86H,0F2H
	DB	0F9H,0DEH,52H,0AH,0CAH,56H
	DB	73H,0CAH,0C9H,0FH,0D9H,2EH
	DB	05H,0A5H,0C4H,75H,0B8H,9BH
	DB	8CH,93H,6DH,0F2H,0EDH,0AAH
	DB	7CH,0B5H,47H,89H,0A8H,0E7H
	DB	0F6H,9CH,0EAH,8AH,9DH,59H
	DB	74H,0ABH,33H,7EH,0E6H,7FH
	DB	8EH,0CFH,0F4H,85H,0FEH,98H
	DB	03H,0D3H,06H,0F7H,0E0H,0CBH
	DB	7FH,99H,66H,89H,0ACH,0C1H
	DB	70H,98H,33H,8CH,86H,6DH
	DB	76H,0CDH,0A6H,0CH,0B4H,0D9H
	DB	03H,9BH,2CH,0F6H,0E5H,80H
	DB	7AH,0B0H,05H,8DH,80H,0A7H
	DB	0F2H,94H,0E9H,08H,9DH,20H
	DB	70H,0A4H,14H,7AH,82H,99H
	DB	8EH,0D3H,3BH,02H,0E7H,7BH
	DB	71H,0EFH,7CH,89H,0EFH,86H
	DB	83H,0F0H,0DAH,87H,9BH,4EH
	DB	0F7H,0E9H,0CEH,78H,0B9H,0CBH
	DB	8DH,0B9H,6FH,0F4H,0ADH,0F4H
	DB	0FCH,0BEH,9BH,8CH,0D3H,78H
	DB	0F6H,0EFH,16H,7FH,0E2H,0CFH
	DB	89H,0D9H,0F1H,87H,0BEH,3BH
	DB	71H,0C7H,6AH,0FCH,0EDH,45H
	DB	0FH,0A8H,0A4H,83H,94H,8CH
	DB	86H,91H,84H,74H,0B0H,9AH
	DB	7AH,93H,52H,0F8H,0EAH,58H
	DB	78H,0CBH,05H,89H,0E0H,0A6H
	END

⌨️ 快捷键说明

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