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

avatar
user3018354
29 декабря 2018 в 03:37
474
1
4

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

enter image description here

8 / -3 : quotient(AL) = -2 remainder(AH) =  2
-8 / 3 : quotient(AL) = -2 remainder(AH) = -2
Источник
Robert Harvey
29 декабря 2018 в 03:41
1

felixcloutier.com/x86/idiv

Akber Iqbal
29 декабря 2018 в 04:00
0

это проблема программирования?

Michael Petch
29 декабря 2018 в 04:06
0

@AkberIqbal: Да, это вопрос программирования на ассемблере.

Ответы (1)

avatar
harold
29 декабря 2018 в 04:01
4

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

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

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

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

user3018354
29 декабря 2018 в 04:31
0

Спасибо за объяснение, очень легко понять!