【发布时间】:2017-11-05 12:44:33
【问题描述】:
我注意到当 EDX 包含一些像 00401000 这样的随机默认值时,我会使用这样的 DIV 指令:
mov eax,10
mov ebx,5
div ebx
它会导致整数溢出错误。但是,如果我将 edx 设置为 0 并执行相同的操作,它会起作用。我相信使用div 会导致商覆盖eax,余数覆盖edx。
得到这个 INTEGER OVERFLOW ERROR 真的让我很困惑。
【问题讨论】:
-
这就是指令的定义/实现方式——对于 32 位操作数,它将 edx:eax 中的 64 位值除以 32 位操作数值。
-
您将 64 位数字除以 32 位数字,您必须在开始之前设置所有 64 位,否则您的结果将毫无意义。
-
该链接来自FAQ section of the x86 tag wiki。对于处理 asm 的人来说,那里有很多好东西。
-
在使用不熟悉的操作码之前,您最好先查看指令参考。 :)
-
相关:8 位操作数大小是一种特殊情况:
div bl(16b / 8b => 8b),使用 AX(不是 DL:AL)。 8086 assembly on DOSBox: Bug with idiv instruction?
标签: assembly x86 integer-division