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.