ON 20030816@12:07:02 AM at page: http://www.piclist.commicrochip/math/mul/index.htm JMN-EFP-786 James Newton published post 37848.3858564815
;--------------------------------------------------------------------+ ; Function: Math : Multiply 16bits by 8bits | ;--------------------------------------------------------------------| ; Filename: M_MUL16x8.inc | Environment : MPLAB | ; Version : 1 | Microcontroller: PIC16F8x* | ; Date : 21/07/2003 | OSC MHz/MIPS : xx / xxx | ;--------------------------------------------------------------------| ; Author : Dingbat | ; Company : - | ; Files required : none | ;--------------------------------------------------------------------| ; Unsigned 16*8 bit Multiply AA(16) * BB(8), Result (CC) is 24bit ; adapted from code found on www.piclist.com ; ; params ; AA 0:1 (MSB:LSB) = number to multiply (16bit) ; BB = multiplier (8bit) ; CC 0:3 (MSB:LSB) = Product (24bit) ; ; Taking out the loops and inlining the code would save about ; another 20-30 instructions MUL16x8 clrf CC+0 ;clear result clrf CC+1 ; clrf CC+2 ; movlw .8 movwf bitCount ;bit counter set @ number of bits in multiplier mul_L1 ;main loop here rlf CC+2,f ;rotate result left (*2) rlf CC+1,f ; rlf CC+0,f ; bcf CC+2,0 ;clear LSB of result after rotation btfss BB,7 ;test msb of multipier goto dontAdd ;if bit is clear then dont add movfw AA+1 ;Add the 16 bits of AA to product addwf CC+2,f ; skpnc ; incf CC+1,f ; movfw AA ; addwf CC+1,f ; skpnc ; incf CC+0,f ; dontAdd rlf BB,f ;rotate multiplier left decfsz bitCount,f ;chk if finished all bits in multiplier goto mul_L1 return|Delete 'P-' before: '' but after: '