📄 selsort.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 + -