Сопроцессор - это специализированная интегральная схема, которая работает в содружестве с ЦП, но менее универсальна. В отличие от ЦП, сопроцессор не имеет счетчика команд. Сопроцессор предназначен для выполнения специфического набора функций, например: выполнение операций с вещественными числами -
Использование сопроцессоров с различной функциональностью позволяет решать проблемы широкого круга:
Можно выделить два способа обмена информацией между ЦП и сопроцессором:
Один из наиболее распространенных типов сопроцессоров -
Большинство современных (-1)S·2E·M, где S - E - экспонента, M - мантисса. Если 1<=M<2, то такое число называется нормализованным. При хранении нормализованных чисел сопроцессор отбрасывает целую часть мантиссы (она всегда 1), сохраняя лишь дробную часть. Экспонента кодируется со сдвигом на половину разрядной сетки, таким образом, удается избежать вопроса о кодировании знака экспоненты. Т.е. при 8-битной разрядности экспоненты код 0 соответствует числу -127, 1 - числу -126, ..., 255 числу +126 (экспонента вычисляется как код 127).
Стандарт IEEE-754 определяет три основных способа кодирования (типа) вещественных чисел.
| Тип | Диапазон значений(по модулю) | Двоичное представление |
|---|---|---|
| вещественное ординарной точности ( |
1,18·10-38... 3,40·1038 |
|
| вещественное двойной точности (double precision) - 64 бит | 2,23·10-308... 1,79·10308 |
|
| вещественное расширенной точности ( |
3,37·10-4932... 1,18·104392 |
|
Приведем пример кодирования вещественного числа 178,625:
178,62510 = 128 + 32 + 16 + 2 + 0,5 + 0,125 = = 1·27 + 0·26 + 1·25 + 1·24 + + 0·23 + 0·22 + 1·21 + 0·20 + + 1·2-1 + 0·2-2 + 1·2-3 = 10110010,1012
Для представления этого числа в соответствии с IEEE-754 его нужно нормализовать (привести в экспоненциальный вид):
1,78625E102 = 1,0110010101E2111
В формате вещественного числа одинарной точности оно будет представлено так:
Следует отметить, что не все возможные комбинации такого представления соответствуют нормализованным вещественным числам. В общем случае все множество двоичных комбинаций делится на следующие классы (табл. 8.2):
| Тип | Двоичное представление |
|---|---|
| Ноль со знаком |
|
| Денормализованное вещественное число со знаком |
|
| Нормализованное вещественное число со знаком |
|
| Бесконечность со знаком |
|
| Нечисло |
|
Современные процессоры архитектуры
Сопроцессор 8087 был разработан в 1980 г. Структура сопроцессора 8087 показана на рис. 8.1. В схеме сопроцессора 8087 можно выделить две подсистемы: устройство шинного интерфейса и устройство с плавающей точкой. Развитием этого семейства стал сопроцессор 80287, созданный в 1985 году. Основные изменения произошли только в устройстве шинного интерфейса. В отличие от 8087, сопроцессор 80287 не имеет доступа к шине адреса, поэтому все обращения к памяти выполняет ЦП. В сопроцессоре 80387 изменения коснулись устройства с плавающей точкой: изменилась схема обработки ошибок, а также был реализован больший набор трансцендентных функций.
(рис 8.1) Структура сопроцессора 8087
Выпуск очередного поколения ЦП фирмы Intel ознаменовался внедрением блока
В пятом поколении процессоров интеграция блока
Дальнейшее развитие этого семейства сопровождалось дополнением набора команд блока
В целом базовая
(рис 8.2) Программная модель сопроцессоров семейства Intel х87
Для хранения данных в сопроцессоре предназначены регистры R0-R7. Эти регистры организованы в стек, и доступ к ним производится относительно вершины стека - ST. Номер регистра, соответствующего вершине стека, хранится в
Старший байт регистра состояния содержит:
Младший байт регистра состояния содержит флажки особых случаев сопроцессора: переполнение стека,
Младшее слово
Старшее слово
Если результат численной операции не может быть точно представлен в выбранном формате, сопроцессор выполняет округление в соответствии с полем RC (табл. 8.3). По умолчанию RC = 00. В примерах в табл. 7.3 сделана попытка представить числа +2,23 и +2,05 в виде двоичных вещественных чисел с 3-битной дробной частью мантиссы. В этом формате нельзя подобрать точное двоичное значение для этих чисел. Ближайшие к ним представимые числа - +2,00 (+1,000E21) и +2,25 (+1,001E21).
| RC | Режим | Пример 1 1,000E21 < 2,23E100 < 1,001E21 -1,001E21 < -2,23E100 < -1,000E21 |
Пример 2 1,000E21 < 2,05E100 < 1,001E21 -1,001E21 < -2,05E100 < -1,000E21 |
| 00 | Округление к ближайшему (или четному) | $$2,23E_{10}0 \approx 1,001E_{2}1$$ $$-2,23E_{10}0 \approx -1,001E_{2}1$$ | $$2,05E_{10}0 \approx 1,000E_{2}1$$ $$-2,05E_{10}0 \approx -1,000E_{2}1$$ |
| 01 | Округление вниз (к $$\infty$$ ) | $$2,23E_{10}0 \approx 1,000E_{2}1$$ $$-2,23E_{10}0 \approx -1,001E_{2}1$$ | $$2,05E_{10}0 \approx 1,000E_{2}1$$ $$-2,05E_{10}0 \approx -1,001E_{2}1$$ |
| 10 | Округление вверх (к + $$\infty$$ ) | $$2,23E_{10}0 \approx 1,001E_{2}1$$ $$-2,23E_{10}0 \approx -1,000E_{2}1$$ | $$2,05E_{10}0 \approx 1,001E_{2}1$$ $$-2,05E_{10}0 \approx -1,000E_{2}1$$ |
| 11 | Округление к нулю (усечение) | $$2,23E_{10}0 \approx 1,000E_{2}1$$ $$-2,23E_{10}0 \approx -1,000E_{2}1$$ | $$2,05E_{10}0 \approx 1,000E_{2}1$$ $$-2,05E_{10}0 \approx -1,000E_{2}1$$ |
Регистр тегов содержит 8 тегов - признаков, характеризующих содержимое соответствующего численного регистра сопроцессора. Тег может принимать следующие значения:
00 - в регистре находится действительное число;
01 - нулевое число в регистре;
10 - недействительное число (бесконечность, денормализованное число, нечисло);
11 - пустой регистр.
Сопроцессор использует теги, чтобы определить переполнение или опустошение стека. Если при помещении в стек очередного числа окажется, что декрементированный TOS указывает на непустой регистр (соответствующий тег не равен 112), сопроцессор сигнализирует о переполнении стека. Если при извлечении из стека числа окажется, что инкрементированный TOS указывает на пустой регистр (соответствующий тег равен 112), сопроцессор сигнализирует об опустошении стека.
Для команд сопроцессора выделена группа кодов, начинающаяся с 11011ххх. В ассемблерах мнемоники команд сопроцессора начинаются с "F": FADD (сложение), FCOM (сравнение), FCOS (косинус), FDIV (деление) и т.п.
Параллельная работа ЦП и сопроцессора ставит перед программистом проблемы синхронизации. Например:
mem DW 0
:
FILD mem
INC mem
FSQRT
В данном примере, команда FILD преобразует 16-битное целое число в памяти в формат сопроцессора и сохраняет его в ST, затем целочисленная команда INC увеличивает это значение на 1, после чего сопроцессор вычисляет квадратный корень ST (FSQRT).
Для внешних сопроцессоров (8087, 80287, 80387) ЦП начнет выполнять команду INC раньше, чем сопроцессор закончит FILD, а, следовательно, в стек сопроцессора может попасть неверное значение. Встроенный блок
Описанная ситуация говорит о необходимости использовать в таких случаях
Таким образом, для решения проблемы синхронизации приведенный выше пример следует переписать так:
FILD mem FSQRT INC mem
Для своих ЦП MC680x0 фирма Motorola разработала специальный сопроцессорный интерфейс (рис. 8.3). Интерфейс сопроцессора отличается от, например, интерфейса периферийного устройства тем, что сопроцессор добавляет в систему новые инструкции, дополнительные регистры и типы данных, которые обычно не предусматриваются программной моделью целочисленного устройства ЦП. Тем не менее, коммуникационный протокол между ЦП и сопроцессором прозрачен для программиста, т.к. реализован аппаратно. Этот коммуникационный протокол слабо привязан к архитектуре ЦП, так что любой сопроцессор, реализующий данный протокол, может быть использован в системе с ЦП MC680x0. В то же время архитектура ЦП этого семейства свободна от каких-либо априорных предположений о возможностях сопроцессора. Это, очевидно, дает определенную свободу при построении систем с сопроцессором на основе ЦП MC680x0.
(рис 8.3) Сопроцессорный интерфейс MC680х0
Обмен информацией между процессором и сопроцессором происходит через внешнюю шину ЦП, не привлекая специальных сигнальных линий:
При этом некоторые модели ЦП, например MC68020, допускают для сопроцессора асинхронные циклы шины, так что ЦП и сопроцессор могут работать на разных частотах, сбалансировав, таким образом, свою производительность.
Коммуникационный протокол для передачи сопроцессору инструкций для выполнения использует группу интерфейсных регистров -
| Адрес | Назначение | |
|---|---|---|
31 16 |
15 0 |
|
| $00 | Регистр ответа | |
| $04 | Регистр сохранения | Регистр восстановления |
| $08 | Слово операции | |
| $0C | резерв. | Регистр условия |
| $10 | Регистр операнда | |
| $14 | Регистр выбора | резерв. |
| $18 | ||
| $1C | ||
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.