assembly - X86 余数的 IDIV 符号取决于 8/-3 和 -8/3 的被除数符号?

标签 assembly x86-16 integer-division emu8086

谁能为我解释为什么在这些情况下余数的符号不同?这是模拟器错误还是真正的 CPU 也会这样做?

enter image description here

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

最佳答案

它应该以这种方式工作,尽管通过阅读文档很难找到:

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



结合“除法法则”X = dq + r(被除数是除数乘以商加上余数),我们发现因此余数r = X - d truncate(X/d)

这表明余数取决于被除数的符号,而不取决于除数的符号。

关于assembly - X86 余数的 IDIV 符号取决于 8/-3 和 -8/3 的被除数符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53966486/

相关文章:

java - MIPS编程基础for循环

assembly - 关于8086实模式 'call'

java - 整数除法 : Why is the result of 1/3 == 0?

c++ - 整数除法算法

assembly - 如何在8086汇编中减去两个64位整数

c - 从固定点 atan2() 近似中删除缓慢的 int64 除法

linux - 为什么这个简单的汇编程序适用于 AT&T 语法而不是 Intel 语法?

c - 是否可以通过内联汇编访问硬件寄存器

assembly - 在 x86/x86_64 处理器上使用 LFENCE 指令是否有意义?

x86-16 - 实模式下的有效寻址 - 访问数组