5

上学期我在计算机体系结构信息学考试中遇到了这个问题: “为什么 MASM 中的 'DIV EDX' 总是产生处理器异常?”
产生异常的机制是什么?

4

1 回答 1

13

在 x86 CPU 上进行 1 操作数除法时,EDX:EAX(64 位)除以第一个操作数(32 位)。结果存储在 EAX(32 位)中。

因此,当您除以 EDX:EAX 除以 EDX 时,您基本上得到的是 (EDX * 0x100000000 + EAX) / EDX,其结果始终高于 0x100000000 并且不适合目标寄存器或除数为零。在这两种情况下都会发生除法异常。

另请参阅此页面(来自英特尔开发人员手册)。

请注意,这不是特定于汇编程序 (MASM),而是特定于本例中的平台。

于 2012-09-01T22:13:45.177 回答