From Andrew Warren
Posted to the PICList
; Enter with multiplier in W-Reg, multiplicand in "PRODLO". ; Exits with product in PRODHI:PRODLO. MPY8X8: CLRF PRODHI CLRF COUNT BSF COUNT,3 RRF PRODLO LOOP: SKPNC ADDWF PRODHI RRF PRODHI RRF PRODLO DECFSZ COUNT GOTO LOOP
This can also be unrolled for an even faster (and not much larger version)
;*************************************************************************** ;** time efficient multiplication 8 bit x 8 bit = 16 bit (unsigned) ;** ;** company: elektronik 21 GmbH ;** programmer: Martin Schaefer (idea from Andrew Warren) ;** ;** execution time: fixed 38 cycles (with jump in and jump out) !!! ;** code length: 35 words ;** multiplier: w ;** multiplicand: resultlo ;** result: resulthi:resultlo ;*************************************************************************** MUL8X8 CODE Mul8x8 ;* 2 cycles for call - instruction GLOBAL Mul8x8, resulthi, resultlo mult MACRO btfsc STATUS,C addwf resulthi,F rrf resulthi,F rrf resultlo,F ENDM clrf resulthi ;* 1 cycle rrf resultlo,F ;* 1 cycle mult ;* 4 cycles mult ;* 4 cycles mult ;* 4 cycles mult ;* 4 cycles mult ;* 4 cycles mult ;* 4 cycles mult ;* 4 cycles mult ;* 4 cycles retlw 0 ;* 2 cycles ;***************************************************************************
See also: