SX 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:

	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: