2016-03-07 49 views
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 

而且它不会出于某种原因。

回答

0

除了第一次迭代之外,循环开始处的除法不会将value除以c1。由于您的valued2c1d5就应该更换:

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.wdivs.l也不清楚。如果您使用的是divs.w,则必须记住d1将包含分割后的商和余数。