Yahoo Groups archive

AVR-Chat

Index last updated: 2026-04-28 22:41 UTC

Message

Re: [AVR-Chat] 32-bit square root in Assembler?

2006-08-14 by Mark Jordan

On 14 Aug 2006 at 16:51, Peter Harrison wrote:

> Mark Jordan wrote:
> > 	I'm looking for a 32-bit Square-Root Assembler routine 
> > for the ATMEGA162 processor.
> > 
> > 	Have adapted a 16-bit routine I found on the net, but
> > is is very slow.
> > 
> > 	Any ideas?
> > 
> > 	Thanks,
> > 	Mark Jordan
> > 
> 
> How slow? Can you give a figure for an example calculation at a quoted 
> clock speed?
> 
> This is just so that I (we) know whether it can be beaten. After all, it 
> may seem slow to you but actually just be how life is for everyone.
> 
> Peter Harrison
> 

	It takes some 20mS @ 11MHz to do the square root of $0F000000.
	Here is the routine:

-----------
Sqrt_32bit:
		ldi	two, $02
		ldi	one, $01
		ldi	zero, $00

		ldi	val1, $01	; Odd subtraction value
		clr	val2
		clr	val3
		clr	val4

		clr	res1			; Root in res2:res1
		clr	res2

loop:
	    	sub	root1, val1
	    	sbc	root2, val2
	    	sbc	root3, val3
	    	sbc	root4, val4
	    	brlo		done
	    	
		add	res1, one
		adc	res2, zero

	    	add	val1, two
	    	adc	val2, zero
	    	adc	val3, zero
	    	adc	val4, zero
		rjmp		loop

done:
		etc...

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.