From Andrew Warren
Posted to the PICList
; Enter with multiplier in W-Reg, multiplicand in "PRODLO". ; Exits with product in PRODHI:PRODLO. MPY8X8: clr PRODHI clr COUNT setb COUNT.3 rr PRODLO LOOP: snb C add PRODHI, W rr PRODHI rr PRODLO decsz COUNT jmp 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 snb C add resulthi, W rr resulthi rr resultlo ENDM clr resulthi ;* 1 cycle rr resultlo ;* 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 retw #0 ;* 2 cycles ;***************************************************************************
See also: