我想知道如何在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 :(得分:0)
除了第一次迭代之外,循环开始时的除法不会将value
除以c1
。由于value
位于d2
且c1
位于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
将包含商和分割后的余数。