Команды управления микросхемы 8087 ничего не вычисляют, однако они необходимы для управления ее работой. На Фиг. 7.12 показан листинг ассемблера команд управления сопроцессора 8087.
Команда Действие
--------------------------------------------------------
FINIT Инициализация 8087. Переустановка программ
FENI Освобождение прерываний по исключительным состояниям
FDISI Блокирование прерываний по исключительным состояниям
FLDCW Загрузка управляющего регистра 8087 из памяти
FSTCW Сохранение управляющего регистра 8087 в память
FSTSW Сохранение регистра состояния 8087 в память
FCLEX Очистка индикаторов исключительных состояний
FSTENV Сохранить оборудование 8087 в память
FLDENV Загрузить оборудование 8087 из памяти
FSAVE Сохранить состояние 8087 в память
FRSTOR Загрузить состояние 8087 из памяти
FINCSTP Увеличеть указатель вершины стека
FDECSTP Уменьшить указатель вершины стека
FFREE Освободить регистр стека
FNOP Ничего не делать
FWAIT Идентично WAIT
--------------------------------------------------------
Фиг. 7.13 Управляющие действия
Мы уже рассмотрели управляющее слово и слово состояния в составе программной модели сопроцессора 8087. Команды управления FLDCW, FSTCW и FSTSW загружают и сохраняют эти регистры. Рабочая среда сопроцессора 8087 содержит все регистры микросхемы, за исключением стека данных; рабочая среда состоит из 14 байт. Рисунок 7.14 показывает структуру рабочей среды после того, как сопроцессор 8087 записал ее в память. Запись рабочей среды - это обычное действие при обработке особой ситуации в сопроцессоре 8087, так как рабочая среда содержит все данные об особых ситуациях. Один 20=битовый адрес указывает на последнюю команду, которую выполнил сопроцессор 8087. Другой адрес указывает последнюю из вызывавшихся ячеек данных. Код последней выполнявшейся сопроцессором 8087 команды тоже входит в рабочую среду.
ВОЗРАСТАНИИ АДРЕСОВ
ДДДДДДДДДДДДДДДДДДДДДї
15 0 і
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і
і УПРАВЛЯЮЩЕЕ СЛОВО і+0 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і
і СЛОВО СОСТОЯНИЯ і+2 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і
і СЛОВО ПРИЗНАКА і+4 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і
і IP15-0 і+6
УКАЗАТЕЛЬ ГДДДДДДДДДДДВДВДДДДДДДДДДДДДДДДДґ
КОМАНДЫ і IP19-16 і0і КОД ОПЕРАЦИИ і+8
ГДДДДДДДДДДДБДБДДДДДДДДДДДДДДДДДґ
і OP15-0 і+10
УКАЗАТЕЛЬ ГДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДґ
ОПЕРАНДА і OP19-16 і 0 і+12
АДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДЩ
Фиг. 7.14 Рабочая среда 8087
Состояние микросхемы 8087 - это рабочая среда вместе с регистрами данных. Так как в сопроцессоре 8087 имеется восемь 10-байтовых регистров, состояние содержит 94 байта. Рисунок 7.15 иллюстрирует структуру состояния сопроцессора 8087, записанного в память. Структура состояния идентична рабочей среде с добавленным в конце регистровым стеком. Программа может записать состояние сопроцессора 8087, когда происходит переключение задач, или если в обработчике прерываний потребуется использование сопроцессора 8087. Когда ранее выполнявшаяся задача снова получает управление, состояние может быть программно восстановлено.
Две команды - FINCSTP и FDECSTP - взаимодействуют с указателем стека; они перемещают его. Все данные в регистрах остаются на местах, т.е. слово "этикеток" не изменяется. Увеличение указателя стека не эквивалентно извлечению данных из стека, так как "этикетка" для этих данных все же показывает, что в регистре есть данные. Попытка загрузить какое=либо число в такой стек приведет к появлению особой ситуации - переполнению стека. Команда FFREE освобождает ячейку стека, устанавливая "этикетку" для этой ячейки так, что она показывает отсутствие данных в ячейке. Но команда FFREE не меняет указатель стека, и если вам просто нужно выбросить верхний элемент из стека, то в большинстве случаев это легче сделать с помощью арифметической команды.
A
ВОЗРАСТАНИЕ АДРЕСОВ
ДДДДДДДДДДДДДДДДДДДДДї
15 0 і
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї і
і УПРАВЛЯЮЩЕЕ СЛОВО і+0 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і
і СЛОВО СОСТОЯНИЯ і+2 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і
і СЛОВО ПРИЗНАКА і+4 і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ і
і IP15-0 і+6
УКАЗАТЕЛЬ ГДДДДДДДДДДДВДВДДДДДДДДДДДДДДДДДґ
КОМАНДЫ і IP19-16 і0і КОД ОПЕРАЦИИ і+8
ГДДДДДДДДДДДБДБДДДДДДДДДДДДДДДДДґ
і OP15-0 і+10
УКАЗАТЕЛЬ ГДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДґ
ОПЕРАНДА і OP19-16 і 0 і+12
ГДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 15-0 і+14
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 31-16 і+16
ЭЛЕМЕНТ ВЕРШИ-ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
НЫ СТЕКА:ST і МАНТИССА 47-32 і+18
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 63-48 і+20
ГДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іsі ПОРЯДОК 14-0 і+22
ГДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 15-0 і+24
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 31-16 і+26
СЛЕДУЮЩИЙ ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
ЭЛЕМЕНТ СТЕКА і МАНТИССА 47-32 і+28
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 63-48 і+30
ГДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іsі ПОРЯДОК 14-0 і+32
ГДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
... . . . . . . . ...
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 15-0 і+84
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 31-16 і+86
ПОСЛЕДНИЙ ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
ЭЛЕМЕНТ СТЕКАі МАНТИССА 47-32 і+88
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
і МАНТИССА 63-48 і+90
ГДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДґ
іsі ПОРЯДОК 14-0 і+92
АДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
ПРИМЕЧАНИЯ:
S = Знак
Бит 0 каждого поля - самый правый младший бит соответствующего
поля регистра
бит 63 мантиссы - целый бит (подразумевая двоичная точка
находится рядом с ним, справа)
Фиг. 7.15 Состояние 8087