SX 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
	clr	prod	;initialize product
	clr	prod+1
loop
	clrb	C	;clear carry again
	rr	plier+1	;shift multiplier down
	rr	plier
	sb	C	;skip if multiplier lsb not set
	jmp	lop1
	mov	W, btemp	;add multiplicand to product
	add	prod, W
	mov	W, btemp+1
	snb	C
	mov	W, ++btemp+1
	add	prod+1, W
lop1
	clrb	C	;clear carry
	rl	btemp	;shift multiplicand up
	rl	btemp+1
	mov	W, plier
	or	W, plier+1
	sb	Z	;test for early return
	jmp	loop
	retw	#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

Comments: