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

Paw*_*rek 5 x86 assembly exception division

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

cop*_*opy 13

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

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

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

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