See:
A simple bubble sort for 8 bit values:
; 4 element bubble sort routine ; by Andrew Warren <aiw at cypress.com> on 2001-04-13 ; 2001-06-19:DAV: reworded comments. ; Macro ``Order'' puts the values in registers X and Y ; in order (X <= Y) by swapping their values (if necessary). ORDER MACRO X,Y local endif ;if( Y < X)... MOVFW X SUBWF Y,W ; compare and set W := (Y-X). (modulo 0xff). BC endif ;...then swap them. ADDWF X,f ; Xnew := X + (Y-X) = Y; SUBWF Y,f ; Ynew := Y - (Y-X) = X; endif: ; now X <= Y. ENDM ; SUBROUTINE SORTSUB() SORTS REG1-REG4 IN ASCENDING ORDER. SORTSUB: CALL SORT3 CALL SORT2 SORT1: ORDER REG1,REG2 SORT2: ORDER REG2,REG3 SORT3: ORDER REG3,REG4 RETURN ; SORTSUB requires 21 words of code. ; by Andrew WarrenThe "order" macro sorts 2 numbers (8 bit values).