Я запускаю следующую программу:
#include <iostream>
using namespace std;
int main()
{
while(1)
{
int a;
cin >> a;
cout << 9/a << endl;
}
return 0;
}
пошаговый процесс
поэтому, когда я предоставляю ввод с: 0, я получаю следующее на консоли: Исключение с плавающей запятой: 8
Теперь мой вопрос заключается в том, как это «исключение с плавающей точкой: 8» печатается на консоли, когда машина выполняет двоичные инструкции.
Арифметико-логическое устройство (АЛУ) ЦПУ будет содержать регистр флагов ошибок. Разделить на ноль является одним из тех. ALU, скорее всего, определит ноль в знаменателе или дросселе и установит флаг.
В любом случае, на уровне машины будет происходить прерывание, которое мы (в конце концов) видим в качестве исключения. Он перехватывает (через вектор прерывания) часть двоичного кода для обработки исключений, из которой вызывается обработка исключений более высокого уровня.
Более подробная информация, как правило, зависит от архитектуры, но может привести к аннулированию конвейера.
Других решений пока нет …