¿Por qué la división de enteros por -1 (negativa) da como resultado FPE?

Tengo la tarea de expandir algunosaparentemente comportamientos extraños del código C (ejecutándose en x86). Puedo completar fácilmente todo lo demás, pero este realmente me ha confundido.

Fragmento de código 1 salidas-2147483648

int a = 0x80000000;
int b = a / -1;
printf("%d\n", b);

El fragmento de código 2 no genera nada y proporciona unFloating point exception

int a = 0x80000000;
int b = -1;
int c = a / b;
printf("%d\n", c);

Sé muy bien el motivo del resultado del fragmento de código 1 (1 + ~INT_MIN == INT_MIN), pero no puedo entender cómo la división de enteros entre -1 genera FPE, ni puedo reproducirlo en mi teléfono Android (AArch64, GCC 7.2.0). El código 2 solo genera el mismo código que el 1 sin ninguna excepción. Es un escondidoerror característica del procesador x86?

La asignación no dijo nada más (incluida la arquitectura de la CPU), pero dado que todo el curso se basa en una distribución de Linux de escritorio, puede asumir con seguridad que es un x86 moderno.

Editar: Me puse en contacto con mi amigo y él probó el código en Ubuntu 16.04 (Intel Kaby Lake, GCC 6.3.0). El resultado fue consistente con lo que se indicara en la asignación (el Código 1 emitió dicho mensaje y el Código 2 se bloqueó con FPE).

Respuestas a la pregunta(5)

Su respuesta a la pregunta