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