Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Цифровые устройства и микропроцессоры

.pdf
Скачиваний:
516
Добавлен:
09.06.2015
Размер:
3.6 Mб
Скачать

160

работает один процессор, другой переводит шины и линии S0-S2 в третье состояние. Шина управления формируется системным контроллером ВГ88, ША – регистрами типа ИР82, ШД – приёмопередатчиком ВА86. Для синхронизации используется общий генератор. Для формирования сигнала готовности СА используется дешифратор адреса А115, срабатывающий по команде OUT ADRR, где указывается адрес, выделенный для ВМ89.

Значение сигнала SEL формируется по адресу линии А0. сигналы запросов прерываний с выходов SINTR1, SINTR2 ВМ89 подаются на вход INTR ВМ86 через контроллер прерываний (на рис. не показан).

Сигналы запросов прямого доступа от ВУ, участвующих в ПДП – пересылках, подаются на входы DRQ1, DRQ2 процессора ВМ89 (если >2, то можно объединить по схеме или). Если окончанием ПДП управляет ВУ, то оно сообщает об этом по сигналам EXT1 и EXT2.

Так как у ВМ86 две линии RQ/GT, то к нему можно подключить два ПВВ. В слабо связанной (удалённой, дистанционной) конфигурации ВМ89 поль-

зуется СШ, являющейся общей для всех процессорных модулей.

Каждый процессор должен иметь свой арбитр шины, связанный с другими арбитрами по шине арбитража. Если программа процессора ввода/вывода размещена только в локальной памяти, а в системной памяти располагается только один из четырёх управляющих блоков SCPB, SCB, CP и PB, осуществляется действительно полная параллельная работа процессоров.

Система команд процессора ввода/вывода имеет 53 команды, команды классифицируются на следующие группы:

1.общие передачи данных;

2.8 и 16-битные арифметические операции;

3.8 или 16-битные логические операции;

4.команды загрузки и запоминания указателей;

5.условные и безусловные переходы и вызовы подпрограмм;

6.операции манипуляции битами и проверки;

7.команды управления процессором.

Лекция № 20

7. АРИФМЕТИЧЕСКИЙ СОПРОЦЕССОР

7.1. Архитектура арифметического сопроцессора

7.1.1. Общие сведения Существующие современные однокристальные микропроцессоры с

длиной слова 16 и 32 бита оперируют практически с двумя простыми форматами численных данных: знаковыми и беззнаковыми целыми двоичными числами, хотя с определенными ограничениями допускают десятичные целые числа. Вычислительные возможности их ограничены только арифметическими операциями. Реализация расширенных форматов данных и систем

161

команд в однокристальных микропроцессорах ведет к их чрезмерному усложнению и трудности в программировании. Программная реализация сложных команд на микропрограммном уровне ведет к значительному снижению быстродействия микропроцессора.

В сложившейся ситуации наибольшее распространение получил принцип специализации, который применяется в процессорах средних и больших компьютеров. Суть его заключается в разработке вспомогательных процессорных модулей со своими системами команд, ориентированных на конкретные прикладные области: процессор арифметики с плавающей точкой, процессор символьных данных, процессор ввода-вывода и др. Такие вспомогательные процессоры работают под общим управлением центрального (главного) процессора и обычно разделяют с ним основную память. Специализация позволяет достичь очень высокого быстродействия.

В сопроцессорной конфигурации вспомогательный процессор (сопроцессор) подключается к системной шине параллельно центральному процессору. Сопроцессор не имеет своей отдельной программы и не может считывать команды из памяти, но может обращаться к памяти для записи и считывания данных, запрашивая для этого шину центрального процессора. Кроме того, сопроцессор контролирует системную шину и может «перехватить» адреса и данные при обращении к памяти центрального процессора. Таким образом, программа оказывается смесью команд центрального процессора и сопроцессора, причем считывание команд из памяти осуществляет только центральный процессор.

Первым из сопроцессоров, предназначенных для работы с центральным процессором К1810ВМ86 (I8086), появился процессор числовых данных, или арифметический сопроцессор К1810ВМ87 (I8087). Он рассчитан на применение в системах с интенсивной численной обработкой, в которых:

численные данные изменяются в очень широком диапазоне;

при реализации алгоритмов возникают очень большие и малые промежуточные данные;

требуется высокая точность вычисления;

необходима производительность, превышающая возможности центрального процессора.

Наряду с традиционными арифметическими командами, работающими

как целыми, так и числами с плавающей точкой, арифметический сопроцессор имеет команды таких сложных операций, как извлечение квадратного корня, вычисление тригонометрических и обратных тригонометрических функций, возведение в степень, логарифмирование и др.

7.1.2. Архитектура сопроцессора. Структурная схема. Взаимодействие блоков

Структурную схему сопроцессора удобно представить в виде программной модели. В программную (регистровую) модель любого процессора

162

включаются только те регистры, которые доступны программисту на уровне машинных команд. Арифметический сопроцессор имеет общую стековую организацию. Выбор такой организации обусловлен несколькими обстоятельствами. Одно из них заключается в том, что в математических расчетах результат текущей операции часто может заместить один или оба исходных операнда и является операндом следующей команды. Стековая организация позволяет в этих случаях применять так называемые безадресные команды небольшой длины (неявная адресация), сокращая, таким образом, число обращений к памяти и, следовательно, повышая быстродействие.

Основу программной модели сопроцессора, показанной на рис. 79, образует регистровый стек из восьми 80-битовых регистров R0–R7. В этих (арифметических) регистрах хранятся числа, представленные в так называемом временном вещественном формате. В любой момент времени трехбитовое поле ST в слове состояния определяет регистр, являющийся текущей вершиной стека (Stack Top) и обозначается ST(0) или просто ST. При операции включения в стек осуществляется декремент поля ST и загружаются адресуемые данные в новую вершину стека. При операции извлечения из стека в получатель, которым чаще всего является память, передается содержимое текущей вершины стека, а затем производится инкремент поля ST.

В организации регистрового стека сопроцессора имеется несколько отличий от классического стека, который в большинстве современных процессоров аппаратно реализуется в памяти.

Во-первых, стек имеет круговую (кольцевую) организацию. Необходимо помнить, что максимальное число включений в стек без промежуточных извлечений равно восьми, а девятое включение перезапишет элемент, помещенный в стек первым (на самом деле сопроцессор зафиксирует здесь особый случай недействительной операции и, если прерывание замаскировано или запрещено, тогда произойдет перезапись, иначе в сопроцессор загрузится

NAN).

 

163

 

 

 

Регистровый стек

 

Признаки

79 78 Порядок 64 63

Мантиса

 

(тэги)

0

1

0

R0

R1

R2

R3

R4

R5

R6

R7

 

Указатель

 

 

Слово признаков

 

команды

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

Указатель

 

Регистр управлен.

 

данных

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 79. Программная модель сопроцессора

Во-вторых, в командах сопроцессора допускают явное или неявное обращение к регистрам стека с модификацией или без модификации поля ST. Так в некоторых операциях операндом служит содержимое вершины стека.

В-третьих, сопроцессор имеет команды, в которых не изменяется содержимое вершины стека (в процессоре стек автоматически модифицируется при любом обращении к нему).

С каждым регистром стека ассоциируется двухбитовый тэг (признак), совокупность которых образует слово тэгов. Тэг регистра R0 находится в младших битах этого слова, а тэг регистра R7 – в старших. Тэг фиксирует наличие в регистре действительного числа (конечное ненулевое число) – код 00, истинного нуля – код 01, специального числа (денормализованное число, не-число или бесконечность) – код 10 и отсутствие данных – код 11. Попытка команды извлечь число из пустого регистра фиксируется как особый случай недействительной операции. Кроме того, попытка загрузить число в непустой регистр также вызывает регистрацию особого случая.

Программист может использовать слово тэгов для интерпретации содержимого регистров только после передачи этого слова в память.

Остальными регистрами в программной модели сопроцессора являются регистр управления, регистр состояния, два регистра указателя команды и два регистра указателя данных.

164

Регистр состояния. В слове состояния (рис. 80) отражается текущее состояние сопроцессора после выполнения последней команды.

15

 

 

0

B

C3

TOP

C2

C1

C0

ES

SF

PE

UE

OE

ZE

DE

IE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 80. Слово состояния сопроцессора

Шесть младших битов показывают исключительные ситуации: IE – недействительная операция;

DE – денормализованный операнд; ZE – ошибка деления на ноль;

OE – ошибка переполнения. Возникает в случае выхода порядка числа за максимально допустимый диапазон;

UE – ошибка антипереполнения. Возникает, когда результат слишком

мал;

PE – ошибка точности. Устанавливается, когда процессору приходится округлять результат из-за того, что его точное представление невозможно (например при делении 1 на 3).

SF – ошибка работы стека сопроцессора. Устанавливается в единицу, если возникает одна из трех исключительных ситуаций – PE, UE или IE. В частности, его установка информирует о попытке записи в заполненный стек, или при попытке чтения из пустого стека.

ES – суммарная ошибка работы сопроцессора. Бит устанавливается в единицу, если установится в единицу хотя бы один из шести битов (IE, DE, ZE, OE, UE, PE).

С0-С3 – коды условия. Отражают результат выполнения последней команды сопроцессора (таблица 27).

 

 

 

 

Таблица 27

С3

С2

С1

С0

Описание

0

0

х

0

ST > источника (src) или нуля

0

0

х

1

ST < источника (src) или нуля

1

0

х

0

ST = источнику (src) или нулю

1

1

х

0

Не сравнимы

TOP – трехбитовое поле, показывающее номер регистра, который является вершиной стека.

Регистр управления. Слово управления (рис. 81) определяет для сопроцессора один из вариантов обработки численных данных.

 

 

 

 

 

165

 

 

 

 

 

 

 

 

15

 

 

 

 

0

X

X

X

IC

RC

PC

IEM

X

PM

UM

OM

ZM

DM

IM

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 81. Слово управления сопроцессора

Для каждого варианта программист задает маскирование особых случаев, точность вычислений, способ округления и интерпретацию бесконечности. Слово управления загружается из памяти с помощью команды FLDCW.

Шесть младших битов слова управления представляют собой индивидуальные маски особых случаев. Если любой из этих битов установлен в 1, то возникновение соответствующего особого случая, которое фиксируется в шести младших битах слова состояния, не будет вызывать прерывание центрального процессора (прерывание запрещено или замаскировано), а если бит содержит – 0, тогда генерируется соответствующее прерывание центрального процессора.

IEM – маска управления прерывания, которая разрешает (IEM = 0) или запрещает (IEM = 1) прерывание центрального процессора.

PC – биты управления точностью вычисления 00 – 24 бита, 10 – 53 бита, 11 – 64 бита. По умолчанию вводится режим с максимальной точностью.

RC – биты управления округлением (таблица 28). Необходимость операции округления может возникнуть, например, при вычислении дробной или целой части числа. В этом случае целесообразно выбирать режим усечения. Для того чтобы выяснить характер округления, обозначим:

m – значение в ST(0) или результат работы некоторой команды; a и b – наиболее близкие значения к m, причем a < m < b.

 

 

Таблица 28

RC

Режим

Принимаемый результат

00

Округления к

Значение m округляется к бли-

 

ближайшему

жайшему числу a или b

01

Округления вниз

a

10

Округления вверх

b

11

Усечение

Производится отбрасывание

 

 

дробной части

IC – бит управления бесконечностью. Определяет одну из двух моделей интерпретации бесконечности: проективную (IC=0) или аффинную (IC = 1). По умолчанию вводится проективный режим, в котором сопроцессор обрабатывает два специальных значения «плюс бесконечность» и «минус бесконечность» как одно и то же значение «бесконечность», не имеющее знака. В аффинном режиме сопроцессор допускает значения бесконечности со знаком плюс или минус.

Информация, содержащаяся в регистрах указателя команды и операнда (совместно их называют указателями особого случая), предназначена только

166

для процедур обработки особых случаев. Когда сопроцессор выполняет численную команду, он автоматически сохраняет в этих регистрах физический адрес команды сопроцессора, физический адрес операнда, если он присутствует в команде.

Лекция № 21

7.1.3Программирование сопроцессора

Всистему команд арифметического сопроцессора К1810ВМ87 входят 69 базовых команд, которые можно разделить на шесть групп: команды передачи данных, арифметические команды, команды сравнения, команды трансцендентных операций, команды загрузки констант и команды управления сопроцессором.

Типичная команда сопроцессора воспринимает один или два операнда. Операндами наиболее часто служит содержимое регистров сопроцессора, но может привлекаться и содержимое ячеек памяти (с регистрами процессора арифметический сопроцессор не работает).

Варифметическом сопроцессоре формирование команды происходит следующим образом:

F I С,

где F – обозначение команды арифметического сопроцессора; I – формат операнда, I – целочисленный формат (integer), для вещественных чисел буква I отсутствует; С – команда.

Например, FILD – загрузка целого числа в арифметический сопроцессор (LD – load), для вещественного числа команда загрузки – FLD.

Расширенные форматы данных арифметического сопроцессора требуют введения в ассемблер специальных директив определения данных. Резервирования памяти для переменных и констант сопроцессора осуществляют следующие директивы:

DW – определить слово (16 битов);

DD – определить двойное слова (32 бита); DQ – определить счетверенное слово (64 бита); DT – определить 10 байтов.

Основные характеристики численных данных приведены в табл. 29.

 

 

 

Таблица 29

 

 

 

 

Формат

Диапазон

Точность

Особенность

Целое слово

104

16 битов

Дополнительный код

Короткое целое

109

32 бита

Дополнительный код

Длинное целое

1019

64 бита

Дополнительный код

Упакованное десятичное

1018

18 цифр

Прямой код

Короткое вещественное

10±38

24 бита

Неявный бит F0

Длинное вещественное

10±308

54 бита

Неявный бит F0

Временное вещественное

10±4932

64 бита

Явный бит F0

167

Необходимо помнить, что с операндами размером 1 байт арифметический сопроцессор не работает. Для представления чисел в вещественном формате, как правило, используют директивы DD и DQ.

*7.2. Система команд сопроцессора

Команды передачи данных. Команды этой группы производят передачу данных между регистрами стека, а также между вершиной стека и памятью. Одной командой число из памяти, представленное в любом формате сопроцессора, преобразуется во временный вещественный формат (10 байтов) и загружается (включается) в стек. Аналогичным образом, но в обратном порядке осуществляется передача числа в память.

Команды загрузки. В арифметическом сопроцессоре существует три команды загрузки следующего вида:

FLD

src

загрузка вещественного числа (src – источник);

FILD

src

загрузка двоичного целого числа;

FBLD

src

загрузка десятичного целого числа.

Команды загрузки осуществляют декремент указателя стека и передачу в новую вершину стека содержимое источника, т. е. производят включения в стек. Например, даны три числа:

ADQ 5.672

BDW 342

CDT 10

Программа выглядит следующим образом:

FLD

A

 

FILD

B

 

FLD

ST

 

FBLD

C

 

После выполнения программы состояние сопроцессора будет:

 

ST(0)

10

 

ST(1)

342

 

ST(2)

342

 

ST(3)

5.672

В команде FLD источником может быть один из регистров стека или память, а в командах FILD и FBLD – только память, причем команда FBLD поддерживает только формат DT. Команды FILD и FBLD являются точными, т. е. в них ошибки округления отсутствуют.

Для загрузки данных из массива чаще всего используют косвенную адресацию. Например, если определен массив данных

A DQ 5.7649, 6.0, – 4.98E-6

загрузка данных в сопроцессор выглядит следующим образом: LEA SI, A

168

FLD QWORD PTR [SI]

FLD QWORD PTR [SI+8]

FLD QWORD PTR [SI+16]

Состояние сопроцессора будет следующим:

ST(0)

5.7649

ST(1)

6.0

ST(2)

– 4.98E-6

Примечание. Во всех приводимых примерах при отсутствии явной спецификации типа операнда (QWORD PTR) предполагается, что он определен соответствующей директивой.

Команды запоминания. В арифметическом сопроцессоре существуют две команды запоминания:

FST запоминание вещественного числа (dst – приемник); FIST запоминание двоичного целого числа.

Эти команды производят передачу содержимого вершины стека в память без изменения указателя стека ST.

Вкоманде FST получателем может быть регистр стека или вещественная переменная в памяти (только короткая или длинная форма представления чисел, т. е. DW или DQ).

Вкоманде FIST получателем является переменная в памяти, имеющая формат короткого целого или целого слова (DW или DD). Поскольку все числа в сопроцессоре хранятся в вещественном формате, при запоминании данных с помощью команды FIST округление производится в соответствии с управляющим словом сопроцессора (за исключением, если запоминается число, загруженное до этого с помощью команды FILD).

Примеры ассемблерных команд запоминания:

FST

ST(5)

; Передает ST(5) в ST(0).

FST

QWORD PTR [SI]

; Передает вещественное число в память.

FISTP QWORD PTR [SI]

; Передать целое слово в память.

Рассмотренные команды не допускают получатель в форматах длинного целого (8 байтов), временного вещественного (10 байтов) и упакованного десятичного (10 байтов).

Команды запоминания с извлечением из стека. Три команды, помимо передачи данных из ST(0) в получатель, осуществляют извлечения из стека, а регистр, бывший вершиной стека, отмечается как пустой и производится инкремент указателя стека:

FSTP запоминание вещественного числа (dst – приемник); FISTP запоминание двоичного целого числа.

FBSTP запоминание десятичного целого числа.

Действие этих команд эквивалентно действию команд загрузки с той лишь разницей, что данные из вершины стека удаляются. Примеры рассмотренных команд на ассемблере:

FSTP ST ; Извлечение из стека.

 

 

169

FISTP DWORD PTR [SI]

; Передает короткое целое в память.

FBSTP MEAN

 

; Передать десятичное целое в память.

Команды обмена. Команда обмена содержимого регистров

FXCH dst

ST(0) dst

обменивает содержимое получателя ST(i) и вершины стека ST(0). При пустом поле операнд обменивает содержимое регистров ST(0) и ST(1). При-

меры команды обмена:

 

FXCH ST(5)

; Обменивает содержимое ST(5) и ST(0).

FXCH

; Обменивает содержимое ST(1) и ST(0).

Арифметические

команды. Основные арифметические команды, ис-

пользуемые в сопроцессоре, ориентированы на разработку эффективных алгоритмов, что позволяет программисту минимизировать число обращений к памяти и оптимально использовать регистровый стек. Все арифметические команды, работающие с регистрами, выполняются только в вещественном формате.

Команды сложения. Операция сложения реализуется командами со следующими формами:

FADD

//src/dst, src

сложение вещественных чисел;

FADDP

dst, src

сложение вещественных чисел с извлечением из стека;

FIADD

src

сложение вершины стека с целым числом.

Команда FADD ST,ST производит удвоение вершины стека. Примеры использования команд сложения:

FADD ST(3),ST

; ST(3) = ST(3) + ST(0).

FADD QWORD PTR [SI]

; ST(0) = ST(0) + содержимое ячейки памяти

 

; (вещественное число).

FIADD WORD PTR A

; ST(0) = ST(0) + ячейка памяти (целое число).

FADD

; ST(0) = ST(0) + ST(1) (с выталкиванием).

FADDP ST(1), ST(2)

; ST(0) = ST(1) + ST(2) (с выталкиванием).

FADD ST(2)

; ST(0) = ST(0) + ST(2).

Команды вычитания. Вычитание dst = dst – src осуществляют следую-

щие команды:

 

FSUB

//src/dst, src

вычитание вещественных чисел;

FSUBP

dst, src

вычитание вещественных чисел с извлечением

 

 

из стека;

FISUB

src

вычитание из вершины стека целого числа.

Для вычитания dst = src – dst предназначены команды:

FSUBR

//src/dst, src

вычитание вещественных чисел;

FSUBRP

dst, src

вычитание вещественных чисел с извлечением

 

из стека.

Примеры команд вычитания:

FSUB ST(3),ST

; ST(3) = ST(3) – ST(0).

FSUB QWORD PTR [SI]

; ST(0) = ST(0) – содержимое ячейки памяти