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

1

5

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
Mydriasis answered 29/12, 2018 at 3:37 Comment(3)
felixcloutier.com/x86/idivChitarrone
is this a programming problem?Anthropologist
@AkberIqbal : Yes, this is an assembly language programming question.Gallice
P
5

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.

Pia answered 29/12, 2018 at 4:1 Comment(1)
Thanks for your explaination, very easy to understand!Mydriasis

© 2022 - 2024 — McMap. All rights reserved.