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