На Рисунке 18-8 даны три команды загрузки целого, вычисления его квадратного корня и уменьшение целого на 1. Синхронная работа модуля обработки операций с плавающей точкой разрешит этой программе работать правильно до тех пор, пока команда FILD не сгенерирует исключения.
+---------------------------------------------------------------+| || НЕКОРРЕКТНАЯ СИНХРОНИЗАЦИЯ || || FIELD COUNT ; команда FPU || INC COUNT ; целочисленная команда изменения || ; операнда || FSQRT ; ошибка из предыдущей команды FPU || ; обнаружена здесь || || КОРРЕКТНАЯ СИНХРОНИЗАЦИЯ || || FIELD COUNT ; команда FPU || FSQRT ; ошибка из предыдущей команды FPU || ; обнаружена здесь || INC COUNT ; целочисленная команда изменения || ; операнда || || |+---------------------------------------------------------------+ Рисунок 18-8. Примеры синхронизации исключений. Ситуация изменяется, если расширить регистровый стек в память. В этом случае недопустимое исключение не маскировано. Попытка извлечения из пустого стека или помещения в полный вызывет недопустимое исключение.
Программа обработки исключений должна распознать эту ситуацию, исправить значение стека и выполнить первоначальную операцию. В примере, показанном на рисунке, программа обработки будет работать неверно. Проблема в том, что значение переменной COUNT увеличивается до вызова обработчика исключений, поэтому программа обработки получит неправильное значение переменной COUNT, что приведет к непредсказуемому поведению программы.