;;入口:待排序的N个单字节无符号整数所在的RAM首址存于R3,N存于R4;
;;返回:由小至大排序完毕的N个数据存于原RAM块。
QUE: MOV A, R3
MOV R0, A ;;R0←RAM首址
MOV A, R4
MOV R7, A ;;R7←N
CLR PSW.5 ;;交换标志清零,表示未交换数
MOV A, @R0 ;;A←RAM中首个数
LP1: INC R0 ;;RAM指针加1
MOV R2, A ;;送前数于R2暂存
CLR C ;;借位清零
SUBB A, @R0 ;;A←(A)-(C)-((R0))
MOV A, R2 ;;恢复前数于A
JC LP2 ;;若有借位,表示后数较大,无须交换,转LP2
SETB PSW.5 ;;若无借位,表示前数≧后数,交换标志置1
XCH A, @R0 ;;(A),((R0))交换
DEC R0 ;;RAM指针-1
XCH A, @R0 ;;将较小的数冒泡上移
INC R0 ;;RAM指针加1
LP2: MOV A, @R0 ;;A←下一个数据
DJNZ R7, LP1 ;;若待比较的数据个数未递减至零,转LP1继续比较
RET
关键字:
51单片机
冒泡排序
汇编语言
编辑:什么鱼 引用地址:
http://news.eeworld.com.cn/mcu/ic521187.html