找到数字的平方根

时间:2016-03-07 02:37:42

标签: assembly easy68k

我想知道如何在EASy68k汇编程序中找到平方根。

我知道这是一个功能,但我不知道它的代码。

我想找到72的平方根。

答案应该是一个整数,在这种情况下为8。

我找到了这个算法:

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

我将其转换为68k代码:

    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 to c2 = d6
    add.l d5,d6    ; add c1+c2
    divs #2,d6
    move.l d6,d5   ; move the answer above it do d4 = c1
    cmp.l d6,d5
    beq loop

    move.l d5,d7   ; d7 will have the result

由于某种原因它不起作用。

1 个答案:

答案 0 :(得分:0)

除了第一次迭代之外,循环开始时的除法不会将value除以c1。由于value位于d2c1位于d5,您应该替换:

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

使用:

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

我发现您不确定是使用divs.w还是divs.l。如果您使用的是divs.w,则必须记住d1将包含商和分割后的余数。