PIC Microcontroller Math Method

BCD (packed) subtraction

From: Scott Dattalo

 ;****************************************** 
;bcd_subtract 
; 
; Computes  z = x - y 
; where x,y,z are all 8-bit packed BCD numbers 
; Exits with C=1 (and DC=1 too)  if x>=y 
; and with z=1 if x==y. 
; Note that z can be aliased to x or y so that 
;it's possible to calculate x = x-y or y = x-y 
; 9 cycles (+ return) 
bcd_subtract 

        MOVF    y, W    ;W = y 
        SUBWF   x, W    ;W = x-y 
        RLF     z, F    ;lsb of z has the carry 
        SKPDC           ;if lsn of x < lsn of y 
         ADDLW  -0x06   ; then convert lsn of the 
                        ; result to BCD. 
        BTFSS   z, 0    ;Similarly for the msn's 
         ADDLW  -0x60 
        RRF     z, F    ;Get the carry 
        MOVWF   z       ;and save the result 

        RETURN