На главную Назад
Добро пожаловать, уважаемый посетитель!

Настоящим "сердцем" микросхемы 8087 является блок выполнения

арифметических команд.Сопроцессор 8087 быстро и точно выполняет

Microsoft (R) Macro Assembler Version 5.004/2/89 16:07:21

Фиг. 7.16 Арифметические команды сопроцессора 8087Page1-1

 

PAGE,132

TITLEФиг. 7.16 Арифметические команды сопроцессора 8087

 

0000CODESEGMENT

ASSUMECS:CODE,DS:CODE

 

0000WORD_INTEGERLABELWORD

0000SHORT_INTEGERLABELDWORD

0000SHORT_REALLABELDWORD

0000LONG_REALLABELQWORD

 

00009B D8 C1 FADDst(0),ST(1)

00039B D8 C2 FADDst(0),ST(2)

00069B D8 C2 FADDST(0),ST(2)

00099B DC C2 FADDST(2),ST(0)

000C9B DE 06 0000 RFIADDWORD_INTEGER

00119B DA 06 0000 RFIADDSHORT_INTEGER

00169B D8 06 0000 RFADDSHORT_REAL

001B9B DC 06 0000 RFADDLONG_REAL

00209B DE C2 FADDPST(2),ST(0)

00239B D8 E2 FSUBst(0),ST(2)

00269B DE 26 0000 RFISUBWORD_INTEGER

002B9B DE EA FSUBPST(2),ST(0)

002E9B DC E2 FSUBRST(2),ST(0)

00319B DA 2E 0000 RFISUBRSHORT_INTEGER

00369B DE E2 FSUBRPST(2),ST(0)

00399B D8 0E 0000 RFMULSHORT_REAL

003E9B DE 0E 0000 RFIMULWORD_INTEGER

00439B DE CA FMULPST(2),ST(0)

00469B D8 F2 FDIVST(0),ST(2)

00499B DA 36 0000 RFIDIVSHORT_INTEGER

004E9B DE FA FDIVPST(2),ST(0)

00519B D8 FA FDIVRst(0),ST(2)

00549B DE 3E 0000 RFIDIVRWORD_INTEGER

00599B DE F2 FDIVRPST(2),ST(0)

 

005CCODEENDS

END

 

Фиг. 7.16 Арифметические команды сопроцессора 8087

вычислительные операции, и не только четыре основных действия -

сложение, вычитание, умножение и деление, но также трансцендентные

и тригонометрические функции.

 

На Фиг. 7.16 показан ассемблерный листинг программы, состоящей

из некоторых команд для выполнения основных четырех действий.

Данный пример иллюстрирует только работу команды FADD, во всех

возможных комбинациях.Прежде чем рассматривать команды, разберем

возможные варианты их работы.Как видно из Фиг. 7.17, существует

пять различных методов выполнения арифметических команд.На

Фиг. 7.17а показаны пять способов использования данных в

арифметических командах.В случае 1 указывается только код

операции команды.В операции принимают участие вершина стека и

элемент ST1, а результат замещает вершину стека.Заметим, что на

Фиг. 7.17а приведены примеры для каждого случая с использованием

команды сложения.На рисунке также показаны схемы выполнения

вычислительных операций.

Случай 2 иллюстрирует операцию, выполняемую с двумя регистрами

стека сопроцессора 8087.Одним из этих регистров должна быть

вершина стека.Если вершина стека - приемник результата, ее можно

не упоминать, указав только регистр источника.Если же приемником

результата служит какой=то другой регистр, нужно указывать и

источник, и приемник.

 

Форма командыПример FADDДействие

-----------------------------------------------------------------

1. FopFADDST0<-ST0+ST1

2. FopSTiFADDST2ST0<-ST0+STi

FopST0,STi FADDST0,ST2 ST0<-ST0+STi

FopSTi,ST0 FADDST2,ST0 ST2<-ST0+ST2

3. FopPSTi,ST0 FADDPST2,ST0 ST2<-ST0+ST2,Извлечь из стека

4. Fopвещ.пам.FADDВЕЩЕСТST0<-ST0+ВЕЩЕСТ

5. FlopцелоеПамFIADDЦЕЛОЕST0<-ST0+ЦЕЛОЕ

(a)

 

ОперацияДействие

----------------------------------------------------------

ADDназначение <- назначение + источник

SUBназначение <- назначение - источник

SUBRназначение <- источник - назначение

MULназначение <- назначение * источник

DIVназначение <- назначение / источник

DIVRназначение <- источник / назначение

----------------------------------------------------------

(b)

 

Фиг. 7.17 Арифметические операции (a) Комбинации данных

(b) Арифметические функции для NDP 8087

 

Случай 3 представляет собой стековую операцию.Команда такого

формата выполняет операцию с двумя стековыми операндами, а затем

уничтожает вершину стека.Так как данные из вершины стека

извлекаются из него после операции, она не может быть приемником

результата этой операции.Если приемник результата - элемент ST1,

то операция становится классической стековой.Классическая

стековая операция удаляет из вершины стека два верхних элемента,

использует их в требуемой операции, а затем помещает результат

назад в стек.Конечно в качестве приемника результата этой

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

 

Два оставшихся варианта используют операнды в памяти.В случае

4 операнд в памяти - это короткое или длинное действительное число.

В случае 5 операнд - это короткое целое или целое слово.

 

Вернувшись к Фиг. 7.16 можно заметить, что в команде FADD

определены только четыре операнда в памяти.Это два целых числа -

короткое и слово, и два действительных числа - короткое и длинное.

Арифметические команды не могут непосредственно работать с

десятичным, длинным целым и временным действительным форматами

чисел, и перед использованием их в счете программа должна загрузить

такие числа в регистр.

 

На Фиг. 7.17 показаны шесть существующих арифметических команд.

В процессоре 8087 стандартные четыре арифметические операции

дополнены обратными операциями деления и вычитания.Поскольку

сложение и умножение коммутативны, обратных операций для них

вводить не надо; порядок же операндов у вычитания и деления

критичен.И иногда бывает, что число, находящееся в регистре

источника - не то число, которое нужно вычитать из

регистра=приемника; в этом случае вычитание правильно выполнит

обратная операция.


 

Mail.ru