0

我想知道如何在 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

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

4

1 回答 1

0

循环开始时的除法不会除以valuec1一次迭代。既然你valued2并且c1d5你应该替换:

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除法后将包含商和余数。

于 2016-03-07T07:27:57.363 回答