В 1980 году компания Intel выпустила сопроцессор 8087, ускоривший операции с плавающей точкой до 100 раз. Чип использовал стековую архитектуру из восьми регистров и двух временных регистров по 80 бит каждый. Работа устройства управлялась набором из 1648 микроинструкций по 16 бит, которые хранились в ПЗУ и отвечали за низкоуровневые операции.
Инструкция FXCH, меняющая местами значения в регистрах, выполняется за 14 микроинструкций. Процесс включает чтение данных из стека во временные регистры tmpA и tmpB, проверку тегов на наличие пустых значений и обработку исключений. При обнаружении пустого регистра система может заменить данные на значение Not a Number, если исключение замаскировано.
Архитектура 8087 разделена на два тракта: 16-битный для порядка и знака и 64-битный для значащей части числа. Каждый регистр оснащен двумя битами тегов, определяющими тип данных: valid, zero, special или empty. Эти теги позволяют чипу оптимизировать вычисления и выявлять ошибки, например, при попытке обращения к пустому регистру или при недопустимых операциях.
Сопроцессор поддерживает шесть категорий исключений, включая деление на ноль, переполнение, потерю точности и underflow. Программисты могут настроить реакцию на них: генерацию прерывания или продолжение вычислений. В микрокоде также присутствуют инструкции nop, которые, вероятно, связаны с временными ограничениями регистров или особенностями процесса разработки чипа.




