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 mov W, y ;W = y mov W, x-w ;W = x-y rl z ;lsb of z has the carry sb DC ;if lsn of x < lsn of y ;*** WARNING: ADDLW was expanded in three instructions! Check if previous instruction is a skip instruction. ; ADDLW -0x06 ; then convert lsn of the mov Hack, W mov W, #-$06 ; then convert lsn of the add W, Hack ; result to BCD. sb z.0 ;Similarly for the msn's ;*** WARNING: ADDLW was expanded in three instructions! Check if previous instruction is a skip instruction. ; ADDLW -0x60 mov Hack, W mov W, #-$60 add W, Hack rr z ;Get the carry mov z, W ;and save the result ret