gpt4 book ai didi

assembly - 为什么带-1 的 IDIV 会导致浮点异常?

转载 作者:行者123 更新时间:2023-12-03 21:20:07 24 4
gpt4 key购买 nike

据我所知,idiv %ebx 会将 edx:eax(按顺序连接成 64 位值)与 32 位 ebx.

但是,当我尝试将 0x00000000:0xfffffffb(0 和 -5)除以 0xffffffff (-1) 时,出现浮点异常。

谁能解释一下为什么?我很困惑为什么会这样,因为我毕竟不是除以 0。


注意 我知道我需要签署扩展 edx:eax 来实现我想要的,即计算 -5/-1。但是,即使没有符号扩展,下面也应该不会导致 FPE。

gdb screenshot

最佳答案

Note that I know I need to sign extend edx:eax ...

如果您不对 eax 进行符号扩展,edx:eax 将被解释为 64 位有符号数:

在您的情况下,这将是 0x00000000fffffffb,即 4294967291(而不是 -5)。

dividiv 会在两种情况下引发异常:

  • 除以零
  • 除法结果不在eax寄存器可以表示的范围内

eax 可以保存 -2147483648 到 +2147483647 范围内的有符号数,但 -4294967291 位于该范围之外。你会得到一个异常(exception)。

should not cause an FPE.

确实,dividiv 会导致“整数除法异常”,而不是“浮点异常”。

但是,很多操作系统会显示“浮点异常”的消息; POSIX 将 SIGFPE 定义为覆盖任何算术异常。

关于assembly - 为什么带-1 的 IDIV 会导致浮点异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56303282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com