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.