PIC Microcontoller Math Method

32x16 multiplication

from Anonymous Author

;As a thank you for all the code, here is a 32x16 bit Mult.
;Unsigned 32 bit by 16 bit multiplication
;This routine will take a4:a3:a2:a1*b2:b1 -> a6:a5:a4:a3:a2:a1

mult_32_16:
		banksel	EECON1
; Begin rearrange code
	nop
	movf	a4,w
	movwf	a6
	movf	a3,w
	movwf	a5
	movf	a2,w
	movwf	a4
	movf	a1,w
	movwf	a3
; End rearrange code
                CLRF    a2          ; clear partial product
                CLRF    a1
                MOVF    a6,W
                MOVWF   c4
                MOVF    a5,W
                MOVWF   c3
                MOVF    a4,W
                MOVWF   c2
                MOVF    a3,W
                MOVWF   c1

                MOVLW   0x08
                MOVWF   bitcnt

LOOPUM3216A:
                RRF     b1, F
                BTFSC   STATUS, C
                GOTO    ALUM3216NAP
                DECFSZ  bitcnt, F
                GOTO    LOOPUM3216A

                MOVWF   bitcnt

LOOPUM3216B:
                RRF     b2, F
                BTFSC   STATUS, C
                GOTO    BLUM3216NAP
                DECFSZ  bitcnt, F
                GOTO    LOOPUM3216B

                CLRF    a6
                CLRF    a5
                CLRF    a4
                CLRF    a3
                RETLW   0x00

BLUM3216NAP:
                BCF     STATUS, C
                GOTO    BLUM3216NA

ALUM3216NAP:
                BCF     STATUS, C
                GOTO    ALUM3216NA

ALOOPUM3216:
                RRF     b1, F
                BTFSS   STATUS, C
                GOTO    ALUM3216NA
                MOVF   c1,W
                ADDWF   a3, F
                MOVF    c2,W
                BTFSC   STATUS, C
                INCFSZ  c2,W
                ADDWF   a4, F
                MOVF    c3,W
                BTFSC   STATUS, C
                INCFSZ  c3,W
                ADDWF   a5, F
                MOVF    c4,W
                BTFSC   STATUS, C
                INCFSZ  c4,W
                ADDWF   a6, F

ALUM3216NA:
                RRF    a6, F
                RRF    a5, F
                RRF    a4, F
                RRF    a3, F
                RRF    a2, F
                DECFSZ  bitcnt, f
                GOTO    ALOOPUM3216

                MOVLW   0x08
                MOVWF   bitcnt

BLOOPUM3216:
                RRF    b2, F
                BTFSS  STATUS, C
                GOTO   BLUM3216NA
                MOVF   c1,W
                ADDWF  a3, F
                MOVF   c2,W
                BTFSC  STATUS, C
                INCFSZ c2,W
                ADDWF  a4, F
                MOVF   c3,W
                BTFSC  STATUS, C
                INCFSZ c3,W
                ADDWF  a5, F
                MOVF   c4,W
                BTFSC  STATUS, C
                INCFSZ c4,W
                ADDWF  a6, F

BLUM3216NA
                RRF    a6, F
                RRF    a5, F
                RRF    a4, F
                RRF    a3, F
                RRF    a2, F
                RRF    a1, F
                DECFSZ  bitcnt, F
                GOTO    BLOOPUM3216
	nop
	return