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