A CPU possui detecção integrada. A maioria das arquiteturas de conjunto de instruções especificam que a CPU irá interceptar um manipulador de exceção para a divisão de números inteiros por zero (não acho que se importe se o dividendo for zero).
É possível que a verificação de um divisor zero aconteça paralelamente em hardware junto com a tentativa de fazer a divisão, no entanto, a detecção da condição ofensiva efetivamente cancela a divisão e as armadilhas, então não podemos dizer realmente se alguma parte dele tentou a divisão ou não.
(O hardware geralmente funciona assim, fazendo várias coisas em paralelo e depois escolhendo o resultado apropriado depois, porque então cada uma das operações pode começar imediatamente, em vez de serializar a escolha da operação apropriada.)
A mesma armadilha para o mecanismo de exceção também será usada quando a detecção de overflow estiver ativada, o que você pede normalmente usando instruções add / sub / mul diferentes (ou um sinalizador nessas instruções).
Divisão de ponto flutuante também incorporou detecção para divisão por zero, mas retorna um valor diferente ( IEEE 754 especifica < href="https://en.wikipedia.org/wiki/NaN"> NaN ) em vez de trapping para um manipulador de exceção.
Hipoteticamente falando, se a CPU omitiu qualquer detecção para tentativa de divisão por zero, os problemas poderiam incluir:
- desligar a CPU (por exemplo, em um loop inf.) - isso pode acontecer se a CPU usar um algoritmo para dividir que pare quando o numerador for menor que o divisor (em valor absoluto). Um problema como esse seria praticamente considerado como falha na CPU.
- uma resposta de lixo (possivelmente previsível), se a CPU usar um contador para terminar a divisão no número máximo possível de etapas de divisão (por exemplo, 31 ou 32 em uma máquina de 32 bits).