Регистр состояния
Поля регистра состояния сопроцессора 8087 показаны на рисунке 10.9.
Рис. 10.9. Формат регистра состояния сопроцессора 8087
Регистр состояния сопроцессоров 80287/80387 и сопроцессора, входящего в состав современных процессоров, имеет немного другой формат. Мы показали его на рис. 10.10.
Рис. 10.10. Формат регистра состояния современных сопроцессоров
В обоих форматах биты 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.