Поля регистра состояния сопроцессора 8087 показаны на следующем рисунке:
15 14 13-11 10 9 8 7 6 5 4 3 2 1 0 ---T-T-----T-T-T-T-T-T-T---T-T-T-T--¬ ¦B ¦C3¦ ST ¦C2¦C1¦C0¦IR¦XX¦PE¦UE ¦OE¦ZE¦DE¦IE¦ L--+--+-----+--+--+--+--+--+--+---+--+--+--+---
Регистр состояния сопроцессоров 80287/80387 и сопроцессора, входящего в состав процессора 80486, имеет немного другой формат:
15 14 13-11 10 9 8 7 6 5 4 3 2 1 0 ---T--T-----T--T-T-T-T-T--T--T---T---T--T-----¬ ¦B ¦C3¦ ST ¦C2¦C1¦C0¦ES¦XX¦PE¦UE ¦OE¦ZE¦DE¦IE¦ L--+--+-----+--+--+--+--+--+--+---+--+--+--+---
В обоих форматах биты 0...5 - флажки особых случаев. Они устанавливаются всегда при возникновении особых случаев, даже замаскированных установкой в 1 соответствующих битов регистра управления.
Приведем таблицу флажков особых случаев:
IE | недействительная операция; |
DE | денормализованный результат; |
ZE | деление на нуль; |
OE | переполнение; |
UE | антипереполнение; |
PE | неточный результат. |
Для того, чтобы сбросить установившийся флажок, программа должна явным образом установить его в нуль, выполнив команду записи в регистр состояния.
Назначение бита 7 регистра состояния различно для сопроцессора 8087 и сопроцессоров 80287/80387.
Для сопроцессора 8087 этот бит обозначается IR и содержит флаг запроса прерывания при возникновении незамаскированного особого случая. В этом случае флаг устанавливается в 1.
Сопроцессоры 80287/80387 используют бит 7 в качестве флага суммарной ошибки, который устанавливается в 1 при возникновении незамаскированного особого случая.
Биты C0, C1, C2, C3 - это коды условий. Они определяются по результату выполнения команд сравнения и команды нахождения остатка. Мы расскажем о них при описании соответствующих команд сопроцессора.
Поле ST занимает три бита 11...13 и содержит номер численного регистра, являющегося вершиной стека численных регистров.
Бит B - бит занятости. Он устанавливается в 1, когда процессор выполняет команду или когда происходит прерывание от сопроцессора. Если сопроцессор свободен, бит занятости установлен в 0.