;E CHAR D:30H=9, 11H, 5, 31H, 20H, 16H,1, 1AH, 3FH, 8
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: ;比较循环次数,每次选择比较后,次数递减
;10个数字,第一轮需要比较9次,以后每轮次数递减
MOV R7, #09H
MOV R2, #30H ;起始地址为30H
LP1:
MOV R6, 07H ;R6为内循环
MOV A, R2 ;准备两个指针,R1,R2
MOV R0, A
MOV A,R2
MOV R1,A
INC R1
LP2:
MOV A,@R0 ;取R0中寄存的数
CLR C ;清进位标志
SUBB A, @R1 ;和后面一个数比较,判断大小
JC LP3 ;若C置位,则表示@R0小于@R1,不需要交换两个数
MOV A, R1;否则交换位置
MOV R0,A
LP3:
INC R1
DJNZ R6, LP2 ;进行内循环,若(R6)=0,往下执行
MOV A,R2
MOV R1,A
MOV A,@R1
XCH A,@R0
MOV @R1,A
MOV A,R2
MOV R1,A ;完成一轮比较,依次将最小数寄存在A中锁定
INC R2 ;进行下一位数比较
DJNZ R7, LP1;一轮过后,已经把最小的放第一个了,所以循环次数-1
SJMP $
END