From Regulus Berdin
;Increment/Decrement routines for packed BCD ; ;6 digit bcd in bcd1:bcd2:bcd3:...(lsb:msb) ; ; cblock 0x0c tmp bcd1:3 endc inc_bcd: movlw bcd1 movwf FSR movlw 3 ;adjust for number of digits movwf tmp iloop movlw 0x67 addwf INDF movlw 0x60 skpdc movlw 0x66 skpc subwf INDF skpz goto iquit incf FSR decfsz tmp goto iloop iquit retlw 0 dec_bcd: movlw bcd1 movwf FSR movlw 3 ;adjust for number of digits movwf tmp dloop movlw 1 subwf INDF addwf INDF,w movlw 0x6 skpnc movlw 0x66 skpndc subwf INDF xorlw 0x66 skpz goto dquit incf FSR decfsz tmp goto dloop dquit retlw 0 The routines can accomodate to any number of BCD digits, just change the movlw 3.