posted to PICList
Something like this: -------------------- mult24x8: clrf prod0 ; Clear the product clrf prod1 clrf prod2 clrf prod3 clrf twofour3 ; Clear the top byte of the multiplicand multloop: movf eight,W ; Check to see if eight bit is empty btfsc STATUS,Z ; Done if zero return bcf STATUS,C ; clear carry rrl eight,F ; Get the next bit btfss STATUS,C ; Add if carry is set goto multshift ; shift only if 0 movf twofour0,W ; Add the 32 bits of multiplicand to product addwf prod0,F ; each addwf sets the carry btfsc STATUS,C ; Don't increment if no carry call carryprop1 ; Propigate carry to next byte(s) movf twofour1,W ; addwf prod1,F ; btfsc STATUS,C ; Don't increment if no carry call carryprop2 ; Propigate carry to next byte(s) movf twofour2,W ; addwf prod2,F ; btfsc STATUS,C ; Don't increment if no carry incf prod3,F ; Add one to next byte if carry occured movf twofour3,W ; addwf prod3,F ; multshift: bcf STATUS,C ; clear carry rlf twofour0,F ; Shift the 24 bits one bit to the left rlf twofour1,F rlf twofour2,F rlf twofour3,F goto multloop carryprop1: incfsz prod1,F return carryprop2: incfsz prod2,F return carryprop3: incf prod3,F return ------------------------------------------------------------ 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.