Аппаратное обеспечение IBM PC

       

Регистр состояния


Поля регистра состояния сопроцессора 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.



Содержание раздела