X86 IDIV знак остатка зависит от знака дивиденда для 8/-3 и -8/3?

Может кто-нибудь объяснить мне, почему знак остатка отличается в этих случаях? Это ошибка эмулятора или реальные процессоры тоже это делают?

https://s tackru.com/images/759b6967245180ee232b65304eee471ccb606932.png

8 / -3 : quotient(AL) = -2 remainder(AH) =  2
-8 / 3 : quotient(AL) = -2 remainder(AH) = -2

1 ответ

Предполагается, что он будет работать таким образом, хотя это сложно узнать, прочитав документацию:

Нецелые результаты усекаются (сокращаются) до 0.

В сочетании с "законом деления" X = dq + r (дивидендом является делитель, умноженный на коэффициент плюс остаток), мы находим, что, следовательно, остаток r = X - d усекается (X / d)

Это показывает, что остаток зависит от знака дивиденда, но не от знака делителя.

Другие вопросы по тегам