PIC Microcontoller 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

	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