//无符号数选择排序
MIN EQU 30H
MIN_PLACE_L EQU 31H
MIN_PLACE_H EQU 32H
AFTER_NUM EQU 33H
TEMP EQU 34H
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
//测试数据准备2100H~2109H填入0AH~01H
MOV DPTR, #2100H
MOV R7, #10
TEST_LOOP1:
MOV A, R7
MOVX @DPTR, A
INC DPTR
DJNZ R7, TEST_LOOP1
MOV R7, #9
MOV AFTER_NUM,#9
MOV DPTR, #2100H //从第1个数开始
SELECT_LOOP1:
MOVX A, @DPTR
MOV MIN, A
MOV MIN_PLACE_L, DPL
MOV MIN_PLACE_H, DPH
PUSH DPL //保护此时的DPTR
PUSH DPH
MOV R6, AFTER_NUM
SELECT_LOOP2:
INC DPTR
MOVX A, @DPTR
CJNE A, MIN, N_EQU
CONTINUE_THIS_SELECT:
DJNZ R6, SELECT_LOOP2
DEC AFTER_NUM
//当前值与最小值交换
POP DPH
POP DPL
MOVX A, @DPTR
MOV TEMP, A
PUSH DPL
PUSH DPH
MOV DPL, MIN_PLACE_L
MOV DPH, MIN_PLACE_H
MOVX A, @DPTR
POP DPH
POP DPL
MOVX @DPTR, A
PUSH DPL
PUSH DPH
MOV DPL, MIN_PLACE_L
MOV DPH, MIN_PLACE_H
MOV A, TEMP
MOVX @DPTR, A
POP DPH
POP DPL
INC DPTR
DJNZ R7, SELECT_LOOP1
DONE:
SJMP $
N_EQU:
JNC NO_NEW_MIN//A<TEMP,C=1
//记录最小值位置和大小
MOV MIN, A
MOV MIN_PLACE_L, DPL
MOV MIN_PLACE_H, DPH
NO_NEW_MIN:
LJMP CONTINUE_THIS_SELECT//A>TEMP,C=1
END
8051汇编实现排序——选择排序
最新推荐文章于 2024-07-26 00:00:00 发布