【问题标题】:Why "DIV EDX" in MASM always generates processor exception?为什么 MASM 中的“DIV EDX”总是产生处理器异常?
【发布时间】:2012-09-01 22:04:05
【问题描述】:

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

【问题讨论】:

  • 它与 MASM 无关,顺便说一句。而机制就是CPU。
  • Is the i386 instruction "div ah" pointless? 基本上是这个的副本,但是这个问题问为什么它甚至是可编码的。 (因为不需要将它特殊化为#UD 而不是#DE)。

标签: exception assembly x86 division


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-12
    • 2018-08-17
    • 2013-01-05
    • 2011-03-06
    • 2017-09-16
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    相关资源
    最近更新 更多