2016-03-07 6 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, за исключением самой первой итерации. Так как ваш 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 будет содержать как фактор, так и остаток после деления.

Смежные вопросы