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: