, так что я пытаюсь реализовать этот алгоритм для вычисления разности двух 8 бит целые числавычитая два 8 бит целое по кусочкам в сборке x86
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 для них обоих.
Почему код не работает, так как я следовал алгоритму и реализовал его соответствующим образом.
спасибо заранее
и
возможный дубликат [вычитая два целых числа бит за битом в сборке] (http://stackoverflow.com/questions/17287263/subtracting-two-integers-bit-by- бит-в-сборке) –
не так, так как это 2 разные проблемы, и почему мои вопросы получили -2 между прочим? – bluebk