PIC Microcontroller Math Method

Multiply 8 x 8 bits

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: