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
Bookmarks