为什么MASM中的“DIV EDX”总是会产生处理器异常?

时间:2012-09-01 22:04:05

标签: exception assembly x86 division

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

1 个答案:

答案 0 :(得分:13)

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

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

另请参阅this page(来自英特尔开发人员手册)。

请注意,这不是特定于汇编程序(MASM),而是特定于此情况下的平台。