在处理器中除以零

Division by zero in processor

处理器究竟如何处理这种被零除的情况?

A divide by zero condition occurs when in a divide operation the divisor turns out to be a zero as there is no binary representation for infinity. The ALU cannot handle it.

不同的处理器有不同的处理方式吗? 我是这个话题的新手,互联网上的所有文章都与其他文章相矛盾。

这取决于 ISA。例如,x86 引发#DE 异常(当商不适合一个寄存器时,与除法溢出相同)。 ARM 不会出错,您只会在目标中得到 0.

(ARM 除法指令只有一个被除数 1 寄存器宽度,不像 x86,其中被除数是除数或商的两倍宽。因此 ARM 除法只能在 INT_MIN/-1 上溢出,除了除法-零。)

就 ALU 而言,您必须构建一个对其进行检查并将其作为特殊情况处理的 ALU。 CPU 的其他内部逻辑是做什么的

(我假设你的意思是整数除法;FP 通常运行时会屏蔽异常...)


OS 对除法异常的处理取决于 OS。但如果它是类 Unix 系统,它必须向违规进程传递 SIGFPE(算术异常)。当然,那时它不再是 CPU 架构,而是软件。

  • On which platforms does integer divide by zero trigger a floating point exception?
  • (ARM 与 x86 的区别)