Кто-нибудь может объяснить мне, почему знак остатка в этих случаях разный? Это ошибка эмулятора или реальные процессоры тоже так делают?
8 / -3 : quotient(AL) = -2 remainder(AH) = 2
-8 / 3 : quotient(AL) = -2 remainder(AH) = -2
Предполагается, что так и должно работать, хотя это сложно выяснить, прочитав документацию:
Неинтегральные результаты усекаются (сокращаются) до 0.
В сочетании с "законом деления" X = dq + r (делимое равно делителю, умноженному на частное плюс остаток), мы находим, что остаток r = X - d truncate(X / d)
Это показывает, что остаток зависит от знака делимого, но не от знака делителя.
Спасибо за объяснение, очень легко понять!
felixcloutier.com/x86/idiv
это проблема программирования?
@AkberIqbal: Да, это вопрос программирования на ассемблере.