SX Microcontroller Math Method

24x8 multiplication

from Byron A Jeff

posted to PICList

Something like this:
--------------------
mult24x8:
	clr	prod0	; Clear the product
	clr	prod1
	clr	prod2
	clr	prod3
	clr	twofour3	; Clear the top byte of the multiplicand
multloop:
	mov	W, eight	; Check to see if eight bit is empty
	snb	Z	; Done if zero
	ret
	clrb	C	; clear carry
        rrl     eight,F         ; Get the next bit
	sb	C	; Add if carry is set
	jmp	multshift	; shift only if 0
	mov	W, twofour0	; Add the 32 bits of multiplicand to product
	add	prod0, W	; each addwf sets the carry
	snb	C	; Don't increment if no carry
	call	carryprop1	; Propigate carry to next byte(s)
	mov	W, twofour1	;
	add	prod1, W	;
	snb	C	; Don't increment if no carry
	call	carryprop2	; Propigate carry to next byte(s)
	mov	W, twofour2	;
	add	prod2, W	;
	snb	C	; Don't increment if no carry
	inc	prod3	; Add one to next byte if carry occured
	mov	W, twofour3	;
	add	prod3, W	;
multshift:
	clrb	C	; clear carry
	rl	twofour0	; Shift the 24 bits one bit to the left
	rl	twofour1
	rl	twofour2
	rl	twofour3
	jmp	multloop

carryprop1:
	incsz	prod1
	ret
carryprop2:
	incsz	prod2
	ret
carryprop3:
	inc	prod3
	ret
------------------------------------------------------------

I wrote this off the top of my head and I haven't tested it, but it should be
in the ballpark.

Not speedy, but should work.