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

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

введите здесь описание изображения

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

person user3018354    schedule 29.12.2018    source источник
comment
felixcloutier.com/x86/idiv   -  person Robert Harvey    schedule 29.12.2018
comment
это проблема программирования?   -  person Akber Iqbal    schedule 29.12.2018
comment
@AkberIqbal: Да, это вопрос программирования на ассемблере.   -  person Michael Petch    schedule 29.12.2018


Ответы (1)


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

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

В сочетании с «законом деления» X = dq + r (делимое — это делитель, умноженный на частное плюс остаток), мы обнаруживаем, что, следовательно, остаток r = X — d усекается (X / d)

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

person harold    schedule 29.12.2018
comment
Спасибо за объяснение, очень легко понять! - person user3018354; 29.12.2018