assembly - Finding the square root of a number -


i want know how find square root in easy68k assembler.

i know it's function don't know code it.

i want find square root of 72.

the answer should integer 8 in case.

i found algorithm:

value-->c1  loop:  value/c1-->c2  (c1+c2)/2-->c1  until c1=c2  c1-->result  

i converted 68k code:

    move.w #72,d2  ; value = 64     move.l d2,d5   ; c1 = 64     move.l d5,d3   ; hold d3 = 64 loop     divs d2,d3     ; value/c1       move.l d3,d6   ; move answer above c2 = d6     add.l d5,d6    ; add c1+c2     divs #2,d6     move.l d6,d5   ; move answer above d4 = c1     cmp.l d6,d5     beq loop      move.l d5,d7   ; d7 have result 

and doesn't work reason.

the division @ beginning of loop not divide value c1 except on first iteration. since value in d2 , c1 in d5 should replace:

divs d2,d3     ; value/c1   move.l d3,d6   ; move answer above c2 = d6 

with:

move.l d2,d1   ; temp = value divs d5,d1     ; temp /= c1 move.l d1,d6   ; d6 = value / c1 

i found unclear whether you're using divs.w or divs.l. if you're using divs.w you'll have keep in mind d1 contain both quotient , remainder after division.


Comments

Popular posts from this blog

java - Run spring boot application error: Cannot instantiate interface org.springframework.context.ApplicationListener -

reactjs - React router and this.props.children - how to pass state to this.props.children -

Excel VBA "Microsoft Windows Common Controls 6.0 (SP6)" Location Changes -