所以我试图实现这个算法来计算两个 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,第二个数字为 1
当我通过循环时,第一次迭代,x 值为 0,y 值为 1,差异的 i 位将为 1,计算的 b 值为 1,但这仅适用于第一次迭代,在下一次迭代中,我有 x = 0,y = 0 和 b = 1(来自上次计算),所以我希望我的 diff 为 1,我的 b 值为 1,而不是我得到 0两个都。
为什么代码不起作用,因为我正在遵循算法,并相应地实施。
预先感谢
和