Я пишу 8-битную целочисленную функцию newton raphson в сборке MASM X8086-32bit, и я думаю, что застрял в бесконечном цикле. Редактор, который я должен использовать для класса, не отправляет ошибку для бесконечных циклов.Newtons Raphson Итерационные проблемы
В любом случае я не уверен, где моя проблема. Я только что начал MASM несколько недель назад, и я потерял любую помощь с бесконечным циклом. Мое начальное значение x определяется как 1.
Функция y = 1/2 (x + n/x) ===> x/2 + n/2x, где n - это число. и x - значение, заложенное в инициализацию, а затем предыдущее значение итерации y.
mov ah, 09h
lea dx, prompt ;Prompt User
int 21h
mov ah, 01h
int 21h ;User input
sub al, 30h
mov bh, al
mov bl, x ;Loading for loop
mov al, x
iteration:
mul bl; al*bl = al
mov dl, al ; storing x^2
add al, 01h ; (x+1)^2
mul al
cmp bh, dl
jge doneCheck ; bh - dl ====> n- x^2 => 0
doneCheck:
cmp bh, al; bh-al = ? ====>n - (x+1)^2 == -int
jl done
mov al, 02h; loading 2 in ah
mul bl ; bl*al = 2(bl) = 2x = al
shr bl, 1 ; x/2 = bl
mov cl, al ; storing 2x in cl
mov ah, 0 ; clearing ah
mov ch, 0; clearing ch
mov al, bh ; moving n into ax for division prep
div cx ; ax/cl ====> n/2x ===> p =ah and q = al
add bl, ah ;so this is finally 1/2(x+(n/x)) === (x/2+n/2x) y the new value y is now stored in bl for next loop
mov al, bl ; for next loop
jmp iteration
done:
mov dl, bl; print square root
mov ah, 02h
int 21h
спасибо. Изменено это, потому что ваше право, но не фиксирует бесконечный цикл. – TheLiquor
Я просмотрел ваш код и нашел, почему он зацикливается навсегда :) –
Обновлен ответ –