PIC Microcontroller Math Method

16x16 multiplication from HI-TECH C library

posted to PICList Mon Aug 4 09:29:57 1997

Clyde Smith-Stubbs
HI-TECH Software,
http://www.htsoft.com/

; Word multiplication for PIC 16C5x

#ifdef _PIC12
	psect text,class=ENTRY,delta=2
#else
	psect text,class=CODE,delta=2
#endif

	global awmul,lwmul

; The main multiply thingo. Called with one operand in btemp and the
; other in btemp+2. It really doesn't matter which one is where.
; The multiplier is copied to plier, and the product built up in
; acca where it belongs

STATUS equ 3
C equ 0
Z equ 2

lwmul
awmul
	clrf prod ;initialize product
	clrf prod+1
loop
	bcf STATUS,C ;clear carry again
	rrf plier+1 ;shift multiplier down
	rrf plier
	btfss STATUS,C ;skip if multiplier lsb not set
	goto lop1
	movf btemp,w ;add multiplicand to product
	addwf prod
	movf btemp+1,w
	btfsc STATUS,C
	incf btemp+1,w
	addwf prod+1
lop1
	bcf STATUS,C ;clear carry
	rlf btemp ;shift multiplicand up
	rlf btemp+1
	movf plier,w
	iorwf plier+1,w
	btfss STATUS,Z ;test for early return
	goto loop
	retlw 0 ;done, result in prod

psect temp,global,class=BANK0,space=1,ovrld
btemp ds 2
plier ds 2
prod  ds 2

global used_btemp0
global used_btemp1
global used_btemp2
global used_btemp3
global used_btemp4
global used_btemp5

end