This is what I'm using.

If input = $64
Output = $36

;-----------------------------------------------------------------

The code:


Mult32:

asm
;clear X
clrf _XU
clrf _XH
clrf _XM
clrf _XL

;shift A by 1 position left

rlncf _AL,f
rlcf _AM,f
rlcf _AH,f
rlcf _AU,f

;[repeat the shift-routine]

rlncf _AL,f
rlcf _AM,f
rlcf _AH,f
rlcf _AU,f


;move A to X

movff _AU,_XU
movff _AH,_XH
movff _AM,_XM
movff _AL,_XL

;[repeat the shift-routine]

rlncf _AL,f
rlcf _AM,f
rlcf _AH,f
rlcf _AU,f

;[repeat the shift-routine]

rlncf _AL,f
rlcf _AM,f
rlcf _AH,f
rlcf _AU,f

;[repeat the shift-routine]

rlncf _AL,f
rlcf _AM,f
rlcf _AH,f
rlcf _AU,f


;add A to X

movf _AL,w
addwf _XL,f ;ignore Carry
movf _AM,w
addwfc _XM,w
movf _AH,w
addwfc _XH,w
movf _AU,w
addwfc _XU,w

;[repeat the shift-routine]

rlncf _AL,f
rlcf _AM,f
rlcf _AH,f
rlcf _AU,f

;[repeat the add-routine]

movf _AL,w
addwf _XL,f ;ignore Carry
movf _AM,w
addwfc _XM,w
movf _AH,w
addwfc _XH,w
movf _AU,w
addwfc _XU,w



endasm