; ascending order sorting an array of n element
; compare value at n with n+1th location
; exchange value at n+1th is smaller than nth
; repeat the same for n-1 times for n-1 iteration
; array: 4000H - 4004H
;result: 4000H - 4004H
ORG 0H
ARRAY_ADDR EQU 4000H
ELEMENT_COUNT EQU 5
MAIN:
MOV DPTR,#ARRAY_ADDR ; fill memory
MOV A, #05H
MOVX @DPTR,A
INC DPTR
MOV A, #08H
MOVX @DPTR,A
INC DPTR
MOV A, #07H
MOVX @DPTR,A
INC DPTR
MOV A, #06H
MOVX @DPTR,A
INC DPTR
MOV A, #04H
MOVX @DPTR,A
LCALL SORT
SJMP MAIN
SORT:
MOV R0,#ELEMENT_COUNT ; outer loop
DEC R0
loop: MOV R1,#ELEMENT_COUNT ; inner loop
DEC R1
MOV DPTR,#ARRAY_ADDR
loop1: PUSH DPH
PUSH DPL
MOVX A,@DPTR
MOV B,A
INC DPTR
MOVX A,@DPTR
CJNE A,B,loop2
loop2: JNC loop3
POP DPL ; exchange n with n+1
POP DPH
MOVX @DPTR,A
INC DPTR
MOV A,B
MOVX @DPTR,A
AJMP loop4
loop3: POP DPL
POP DPH
INC DPTR
loop4: DJNZ R1,loop1 ; repeat for next location
DJNZ R0,loop ; next iteration
RET
END
Related topics:
8051 Program - sorting descending order | 8051 Program - bubble sort ascending order | 8051 Program - bubble sort descending order | 8051 Program - pwm | 8051 Program - decimal to hex | 8051 Program - sum of a set of numbers | 8051 Program - memory subroutines | 8051 Program - math subroutines | 8051 Program - conversion subroutines
List of topics: 8051
Thanks A lot..Good work...
ReplyDelete