На уровне машины приложение запускается как в двоичном формате, а затем, когда возникает ошибка времени выполнения, как она возвращается к кодам ошибок?

Я запускаю следующую программу:

#include <iostream>

using namespace std;

int main()
{

while(1)
{
int a;
cin >> a;
cout << 9/a << endl;
}
return 0;
}

пошаговый процесс

  1. приведенный выше код компилируется и последовательно преобразуется в двоичный формат.
  2. инструкции двоичного кода выполняются шаг за шагом.

поэтому, когда я предоставляю ввод с: 0, я получаю следующее на консоли: Исключение с плавающей запятой: 8

Теперь мой вопрос заключается в том, как это «исключение с плавающей точкой: 8» печатается на консоли, когда машина выполняет двоичные инструкции.

-1

Решение

Арифметико-логическое устройство (АЛУ) ЦПУ будет содержать регистр флагов ошибок. Разделить на ноль является одним из тех. ALU, скорее всего, определит ноль в знаменателе или дросселе и установит флаг.

В любом случае, на уровне машины будет происходить прерывание, которое мы (в конце концов) видим в качестве исключения. Он перехватывает (через вектор прерывания) часть двоичного кода для обработки исключений, из которой вызывается обработка исключений более высокого уровня.

Более подробная информация, как правило, зависит от архитектуры, но может привести к аннулированию конвейера.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]