Для целей управления режимами обработки исключительных ситуаций служат разряды масок, расположенные в младшем байте регистра управления CR (см. рис. 2.4).
Когда возникает исключительная ситуация, необходимо осуществить какие-либо корректирующие действия. В большинстве случаев достаточно бывает выполнить стандартные действия, которые АП производит без помощи ЦП. В особых ситуациях АП посылает сигнал запроса прерывания и корректирующие действия выполняет ЦП. Соответствующие разряды масок позволяют управлять режимами обработки исключительных ситуаций стандартным способом либо с привлечением центрального процессора.
Разряд РМ = 1 маскирует флаг РЕ, и исключительная ситуация, связанная с потерей точности, обрабатывается стандартным способом. Сопроцессор в качестве результата операции выдает округленное значение.
Разряд UM = 1 маскирует флаг UE, и в качестве результата операции выдается значение в ненормализованном виде.
Разряд ОМ = 1 маскирует флаг ОЕ, и исключительная ситуация, связанная с переполнением, обрабатывается стандартным образом.
Разряд ZM = 1 маскирует флаг ZE и в качестве результата деления на нуль выдает значение бесконечности. Знак бесконечности формируется как сумма по модулю 2 знаков делимого и делителя (напомним, что нуль в форматах вещественных чисел имеет знак «+» и «-»).
Разряд DM = 1 маскирует флаг DE и, сопроцессор выполняет операцию с ненормализованным значением операнда.
Разряд IM = 1 маскирует флаг IE, и в качестве результата АП выдает значение NAN. Если операция оценивается как недействительная, когда оба участвующих в ней операнда имеют значение NAN, то в качестве результата выдается то из них, которое имеет большую мантиссу.
Описанные разряды масок могут быть установлены в «1» или сброшены соответствующей командой независимо друг от друга.
Разряд IEM - маска разрешения прерываний, прямо не связан с управлением режимами обработки исключительных ситуаций, но существенно влияет на их обработку. Когда разряд IEM = 1 АП не может послать сигнал запроса прерывания INT центральному процессору до тех пор, пока разряд IEM не будет сброшен в «0». Этот механизм позволяет в программах ЦП при необходимости запрещать обработку прерываний от АП. Установка в «1» и сброс в «0» разряда-маски IEM производится командой FENI и FDISI соответственно.
![]()
Рис. 2.5. Регистр этикеток
Регистр этикеток TR. Содержит восемь 2-разрядных полей TAG7 - ТАG0 (рис. 2.5), каждое из которых соответствует своему арифметическому регистру ST(7) - ST(0) . В этих полях кодируется информация о содержимом соответствующего арифметического регистра. Информация кодируется в соответствии с табл. 2.7. В обычных применениях регистр этикеток не используется пользователями при составлении программы, а служит для предотвращения переполнения стека. Перед загрузкой данных в стек сопроцессор анализирует значение соответствующей этикетки TAG и, если флаг IE не замаскирован, автоматически генерирует запрос прерывания для обработки исключительной ситуации, связанной с недействительной операцией. В ряде специальных использований имеется возможность изменения значений полей регистра TR программным путем.
Регистр - указатель исключительных ситуаций EP. Обеспечивает возможность привлечения ЦП для обработки различных исключительных ситуаций. Когда такие ситуации возникают и соответствующие им флаги РЕ, UE, ОЕ, ZE, DE и флаг IE не замаскированы, АП посылает запрос прерывания INT центральному процессору. Для того чтобы ЦП мог правильно перейти к соответствующей программе обработки, ему необходимо иметь достаточную информацию об условиях, вызвавших прерывание. Эта информация включает адрес команды, вызвавшей прерывание, код операции, выполняемой данной командой, и адрес операнда, который участвовал в операции. АП помещает указанную информацию в регистр-указатель ЕР при выполнении каждой команды. Формат представления данных в ЕР, показан на рис. 2.6.
|
Рис. 2.6. Формат представления данных в регистре ЕР
Первый 32-разрядный регистр ЕР содержит 20-разрядный адрес команды, вызвавшей прерывание, и 11 младших разрядов кода операций. Отметим, что пять старших разрядов любой команды для АП содержат код 11011 (ESC) и поэтому не запоминаются в ЕР. Второй 32-разрядный регистр содержит 20-разрядный адрес операнда, а оставшиеся 12 разрядов не используются.
2.3. Система команд арифметического процессора
Система команд сопроцессора состоит из четырех групп команд: команды передачи данных, основные вычислительные команды, команды управления и специальные вычислительные команды.
Напомним, что АП может быть использован только совместно с ЦП и, следовательно, его систему команд можно рассматривать как расширение системы команд ЦП. Программные средства, которые обеспечивают взаимодействие процессоров, составляют команды WAIT и ESC. Команда WAIT служит для перевода ЦП в режим ожидания на время выполнения команды арифметическим процессором. На рис. 2.7,а представлен обобщенный формат команд сопроцессора. Команда может содержать от двух до четырех байт. Первый байт любой команды содержит код 11011 (ESC). Поля Х и Y отводятся для задания КОП. Если операция выполняется над одним операндом, то он всегда располагается в вершине стека ST(0), при этом поле mod=11, а поле r/т служит для задания КОП, т. е. является как бы продолжением полей Х и Y. Если операция двухоперандная, то один из операндов располагается в вершине стека ST(0), а адрес второго задается полями mod и r/т. Значение поля mod определяет наличие и размерность смещения. При mod=00 смещение отсутствует и команда состоит из 2 байт, при mod=01 или 10 смещение соответственно 8- или 16-разрядное и команда состоит из 3 или 4 байт. Код поля r/т в этих случаях определяет способ формирования исполнительного адреса ЕА операции в соответствии с табл. 1.2. Значение поля mod=11 указывает на то, что операнд находится в регистре ST(i), номер i которого задается двоичным кодом в поле r/m. В ряде команд два старших разряда поля Х используются для задания типа операнда, находящегося в памяти (рис. 2.7,б). Соответствие форматов операнда и значений поля MF представлено в табл. 2.7.
Таблица 2.7
Код поля MF | Формат операнда |
00 | КВФ |
10 | ДВФ |
11 | 16-разрядное целое |
01 | 32-разрядное целое |
Команды передачи данных. Включают команды загрузки, запоминания и пересылки.
Команды загрузки. Эти команды (табл. 2.8) позволяют записывать данные из памяти в вершину стека. Они автоматически изменяют значение указателя стека ST = ST - 1 и анализируют значение соответствующего поля TAG в регистре этикеток TR. Если значения TAG=11 (е), то данные загружаются в вершину стека ST(0) по новому значению указателя. Если ТАG=00, 01 или 10 - это означает, что текущий регистр в стеке уже заполнен. В этом случае сопроцессор взводит флаг IE исключительной ситуации и новое значение не загружается, если флаг IE не замаскирован. Данные, которые извлекаются из памяти, могут быть представлены в любом из форматов: целые 16-, 32- и 64-разрядные, целые двоично-десятичные и вещественные (КВФ, ДВФ, ВВФ). Перед записью в стек АП автоматически переводит их в формат ВВФ. Такой перевод никогда не вызывает потерю точности, поскольку ВВФ позволяет представить числа в самом широком диапазоне значений.
Таблица 2.8
Мнемокод | Тип данных | Выполняемые действия |
FLD addr | Вещественные | (аddr)->ST(0) |
FILD addr | Целые | |
FBLD addr | Двоично-десятичные |
При выполнении различных вычислений часто используется ряд констант. Наиболее употребительные константы записаны в ПЗУ констант АП, они могут быть загружены в ST(0) с применением команд загрузки констант (табл. 2.9).
Рис. 2.7. Обобщенный формат команд АП
Таблица 2.9
Мнемокод команды | Выполняемые действия |
FLDZ | «0» -> ST(0) |
FDD1 | «1» -> ST(0) |
FLDPI | 3,1415…-> ST(0) |
FLD2I | log2 (10) -> ST(0) |
FLD2E | 1og е -> ST(0) |
FLDLG2 | 1g2 -> ST(0) |
FLDLN2 | 1n2 -> ST(0) |
Все константы представлены в формате ВВФ, т. е. обеспечивают высокую точность вычислений.
Команды запоминания. Эти команды (табл. 2.10) осуществляют передачу данных из вершины стека ST(0) в память. Существуют две разновидности команд запоминания: запоминание без выталкивания данных (FST, FIST) и запоминание с выталкиванием данных (FSTP, FISTP, FBSTP) из вершины стека. После запоминания автоматически изменяется содержимое TAG-11 (е - пусто) и увеличивается значение указателя ST=ST+1. При запоминании с выталкиванием сопроцессор автоматически переводит данные из ВВФ в любой желаемый формат. Такой перевод может вызвать исключительные ситуации, связанные с потерей точности (взводится флаг PE), денормализацией (взводится флаг UE) и переполнением (взводится флаг OE). На рис. 2.8 показаны операции загрузки и запоминания.
Таблица 2.10
Мнемокод | Тип данных | Выполняемые действия |
FST addr | КВФ, ДВФ | ST(0) -> (аddr) |
FIST addr | Целые 16 и 32- разрядные | ST(0) -> (аddr) |
FSTP addr | КВФ, ДВФ, ВВФ | ST(0) -> (аddr) + POP |
FISP addr | Целые 16, 32 и 64 - разрядные | ST(0) -> (аddr) + POP |
FBSTP addr | Двоично-десятичные | ST(0) -> (аddr) + POP |
Рис. 2.7. Обобщенный формат команд арифметического процессора Рис. 2.8. Пример выполнения операций загрузки и запоминания: а – исходное состояние, б – состояние после загрузки, в – состояние стека после запоминания

Команды пересылки. Эти команды (табл. 2.11) позволяют осуществлять
Таблица 2.11
Мнемокод команды | Выполняемые действия |
FLD ST(i) | ST(i) -> ST(0) + PUSH |
FST ST(i) | ST(0) -> SТ(i) |
FSTP ST(i) | ST(0) -> ST(i ) + PUSH |
FXCH ST(i) | ST(0) <-> ST(i) |
передачу данных между различными регистрами стека. Команды FLD ST(i) и FSTP ST(i) выполняются как стеновые операции, т. е. загрузка сопровождается операцией записи в стек PUSH, а запоминание - операцией выталкивания из стека POP. Например, команда FLD ST (0) позволяет задублировать содержимое вершины стека в двух регистрах ST(0) и ST(1). Две другие команды, FST ST(i) и FXCH ST(i), осуществляют пересылку и обмен без изменения указателя стека, т. е. обращаются к регистрам ST(0) и ST(i) не как к стеку.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |



