だから私はこのアルゴリズムを実装して2つの8ビット整数の差を計算しようとしています
b = 0
difference = 0
for i = 0 to (n-1)
x = bit i of X
y = bit i of Y
bit i of difference = x xor y xor b
b = ((not x) and y) or ((not x) and b) or (y and b)
end for loop
これは私がしたことです
calculation:
mov ebx, 0
mov diff, 0
mov ecx, 7
subtract:
mov al, X
and al, 1h ; find bit i of X
mov dl, Y
and dl, 1h ; find bit i of Y
mov ah, al
mov dh, al
xor al, dl
xor al, bl
mov diff, al ; find bit i of the difference
; calculate b value for the next interation
not ah
and ah, dl
not dh
and dh, dl
and dl, bl
or ah, dh
or ah, dl
mov bl, ah
; rotate X and Y to get ready for the next iteration
rol X, 1
rol Y, 1
loop subtract
このコードの問題は、ループの最初の反復でのみ機能することです。
たとえば、最初の数字を 2 に、2 番目の数字を 1 に入力すると、
ループを通過すると、最初の反復では、x 値は 0 になり、y 値は 1 になり、差の i ビットは 1 になり、計算された b 値は 1 になりますが、これは最初の反復でのみ機能します、次の反復では、(最後の計算から) x = 0、y = 0、および b = 1 だったので、diff を 1 にし、この反復の b 値を 1 にしたかったのですが、代わりに 0 を得ました両方とも。
私はアルゴリズムに従っていたので、コードが機能しないのはなぜですか。それに応じて実装します。
少し早いですがお礼を
と