@Filipp42

Что делает компьютер, когда получает машинную инструкцию поделить на ноль?

Скажите, что будет, если в ассемблере поделить на ноль? Когда я попытался написать такую программу на Си, она просто упал, программа на Лисп выкинула отладчик. Что же сделает программа на чистом ассемблере?
  • Вопрос задан
  • 223 просмотра
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист
Исключение будет - специальный флаг поднимается.
Компилятор Си в программу, естественно, встраивает проверку этого флага и аварийно завершает.
Аналогично с лиспом.

https://software.intel.com/content/dam/www/public/...

https://software.intel.com/content/dam/www/public/...

Поведение также зависит от других флагов, так что читай мануалы)
Для одного только IDIV в мануале целых три страницы расписано.

Описание инструкцию во втором томе подробно описаны. Для деления тебя должны интересовать семейство FDIV* для чисел с плавающей точкой и IDIV/DIV для целых чисел.
Ещё можешь посмотреть на всякие AVX и SSE - там тоже по своему происходит проверка на деление на ноль.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Что же сделает программа на чистом ассемблере?

Программа "на чистом ассемблере" всё равно выполняется в каком-то окружении. От этого окружения и зависит, что именно произойдёт. С программой запущенной на x86 в реальном режиме произойдёт одно (прерывание int 0), запущенной под windows -- другое (исключение -> SEH -> завершение программы), запущенной под linux -- третье (но довольно похожее -- исключение -> сигнал -> завершение программы), а запущенной на микроконтроллере с ядром arm -- так и вообще ничего не произойдёт: разделит и глазом не моргнёт, вернёт 0 в качестве результата деления.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы