📄 bubsort.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 BUBSORT ;调用冒泡排序算法
STOP: LJMP STOP
LIST: DB 53H,87H,12H,9AH
DB 2FH,3CH,0A8H,0BCH
BUBSORT:MOV R4,#N ;初始化一轮冒泡操作中的比较次数。
SRT1: CLR F0 ;在一轮冒泡操作前,初始化交换标志。
MOV A,R4 ;取上一轮冒泡操作中比较次数。
DEC A ;减少一次。
MOV R4,A ;作为本轮冒泡操作中的比较次数。
MOV R2,A ;控制本轮比较次数。
JZ SRT4 ;比较次数为零,排序结束。
MOV R0,#DATS;取数据区首址。
SRT2: MOV A,@R0 ;读取一个数据。
MOV R3,A ;暂存。
INC R0 ;指向后一个数据。
MOV A,@R0 ;读取。
CLR C
SUBB A,R3 ;和前一个数据比较。
JNC SRT3 ;不小于前一个数据,符合增序要求。
SETB F0 ;小于前一个数据,设置交换标志。
MOV A,R3 ;交换两个数据(冒泡)。
XCH A,@R0
DEC R0 ;指向前一个数据。
XCH A,@R0
INC R0 ;恢复指针,指向后一个数据。
SRT3: DJNZ R2,SRT2 ;处理完这一轮。
JB F0,SRT1 ;这一轮如果发生交换操作,则需要进行下一轮操作。
SRT4: RET ;排序结束。
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -