私は8bit整数のnewton raphson関数をMASM X8086-32bitアセンブリに記述していますが、無限ループに陥っていると思います。クラスのために使用しなければならないエディタは、無限ループのエラーを送信しません。Newtons Raphson反復の問題
とにかく私の問題がどこにあるかわかりません。私は数週間前にMASMを始めたばかりで、無限ループの助けを失ってしまったのは分かります。私の最初のx値は1と定義されます。
関数は、y = 1/2(x + n/x)===> x/2 + n/2xです。 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
私はあなたのコードを詳しく見て、なぜそれが永遠にループするのかを知りました。 –
答えを –