ASM – Sort

sort.asm:

;###################################################################################################

    CBLOCK  0x20
  r_SORT__1
  r_SORT__2
  r_SORT__3
  r_SORT__4
  r_SORT__5
  r_SORT__6
  r_SORT__7
  r_SORT__8
  r_SORT__9
  r_SORT__IX_1
  r_SORT__IX_2
  r_SORT__TMP
    ENDC
;---------------------------------------------------------------------------------------------------

;###################################################################################################
_SORT: 
;---------------------------------------------------------------------------------------------------
    
     MOVLW  .9        ; --.  'n' dekadicky pocet prvku ke trideni
  MOVWF  r_SORT__IX_1      ; <-'

  
_SORT.Smycka_1:

  ; --- SMYCKA 1:  (r_SORT__IX_1) = 'n' AZ 1 ---

  MOVLW  .1        ; --.
  MOVWF  r_SORT__IX_2      ; <-'

  
  
_SORT.Smycka_2:
     
  ; --- SMYCKA 2:  (r_SORT__IX_2): 1 AZ (r_SORT__IX_1) ---
  ; --- (INDF[r_SORT__IX_2 -1]) - (INDF[r_SORT__IX_2 ]) ---
  
  MOVFW  r_SORT__IX_2      ; 
  ADDLW  r_SORT__1      ;
  MOVWF  FSR        ; FSR pointr: (r_SORT__IX_2)

  MOVFW  INDF        ; (W) = (INDF[r_SORT__IX_2])  
  DECF  FSR,f        ; FSR pointr: (r_SORT__IX_2 -1)
  SUBWF  INDF,w        ; (W) = (INDF[r_SORT__IX_2 -1]) - (W)
  

  ; --- SMER TRIDENI SE VOLI ODKOMENTOVANIM BTFSC... NEBO BTFSS... ---
  
  BTFSC  STATUS,C      ; ?? PROHODIT PRO VZESTUPNE ??
;  BTFSS  STATUS,C      ; ?? PROHODIT PRO SESTUPNE ??
  CALL  _SORT.Prohozeni      ; 'ANO'
  
  INCF  r_SORT__IX_2,f      ; (r_SORT__IX_2) +1
  

  ; --- (r_SORT__IX_1) >= (r_SORT__IX_2) ---
  
  INCF  r_SORT__IX_2,w      ; (W) = (r_SORT__IX_2) +1
  SUBWF  r_SORT__IX_1,w      ; (W) = (r_SORT__IX_1) - (r_SORT__IX_2)
  

  ; --- ZAKONCENI SMYCKY 2 ---
  
  BTFSC  STATUS,C      ; ?? (r_SORT__IX_1) >= (r_SORT__IX_2) ??
  GOTO  _SORT.Smycka_2      ; 'ANO'
  

  ; --- ZAKONCENI SMYCKY 1 ---
        
  DECFSZ  r_SORT__IX_1,f      ; ?? DOSAZENA '0' ?? 
  GOTO  _SORT.Smycka_1      ; 'NE'
  
  RETURN
  

_SORT.Prohozeni:
    
  ; --- (INDF[r_SORT__IX_2 -1]) <-PROHOZENI-> (INDF[r_SORT__IX_2 ]) ---
  
  MOVFW  INDF        ; --.
  MOVWF  r_SORT__TMP      ; <-'  (r_SORT__TMP) = (INDF[r_SORT__IX_2 -1])
  
  INCF  FSR,f        ; FSR pointr: (r_SORT__IX_2)
  MOVFW  INDF        ; ->(W)
  DECF  FSR,f        ; FSR pointr: (r_SORT__IX_2 -1) 
  MOVWF  INDF        ; <-(W)
  
  INCF  FSR,f        ; FSR pointr: r_SORT__IX_2
  MOVFW  r_SORT__TMP      ; --.
  MOVWF  INDF        ; <-'  (INDF[r_SORT__IX_2]) = (r_SORT__TMP)

  RETURN
   
;###################################################################################################