X86 IDIV sign of remainder depends on sign of dividend for 8/-3 and -8/3?

Viewed 600

Can anyone explain for me why the sign of the remainder is different in these cases? Is this an emulator bug or do real CPUs do this, too?

enter image description here

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

It is supposed to work that way, though it is tricky to find out by reading the documentation:

Non-integral results are truncated (chopped) towards 0.

Combined with the "division law" X = dq + r (the dividend is the divisor times the quotient plus the remainder), we find that therefore the remainder r = X - d truncate(X / d)

This shows that the remainder depends on the sign of the dividend, but not on the sign of the divisor.

Related