Меню сайта

Урок 121. Арифметические команды

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

— — — — — — — — — — — Microsoft (R) Macro AssemblerVersion 5.00 — — — — — — — — — — — — — — 4/2/89 16:07:21
— — — — — — — — — — — Фиг. 7.16 Арифметические командысопроцессора 8087 — — — — — — Page — — — -1-1

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

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — CODE — SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME — — — — — CS:CODE,DS:CODE

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — WORD_INTEGER — — — — — LABEL WORD
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — SHORT_INTEGER — — — — LABEL DWORD
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — SHORT_REAL — LABEL DWORD
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — LONG_REAL — — LABEL QWORD

— — — — — — — — — — — -0000 — 9B D8 C1 — — — — — — — — — — — — — FADD — st(0),ST(1)
— — — — — — — — — — — -0003 — 9B D8 C2 — — — — — — — — — — — — — FADD — st(0),ST(2)
— — — — — — — — — — — -0006 — 9B D8 C2 — — — — — — — — — — — — FADD — ST(0),ST(2)
— — — — — — — — — — — -0009 — 9B DC C2 — — — — — — — — — — — — — FADD — ST(2),ST(0)
— — — — — — — — — — — -000C — 9B DE 06 0000 R — — — — — — — — — — — — — FIADD WORD_INTEGER
— — — — — — — — — — — -0011 — 9B DA 06 0000 R — — — — — — — — — — — — — FIADD SHORT_INTEGER
— — — — — — — — — — — -0016 — 9B D8 06 0000 R — — — — — — — — — — — — — FADD — SHORT_REAL
— — — — — — — — — — — -001B — 9B DC 06 0000 R — — — — — — — — — — — — — FADD — LONG_REAL
— — — — — — — — — — — -0020 — 9B DE C2 — — — — — — — — — — — — — FADDP ST(2),ST(0)
— — — — — — — — — — — -0023 — 9B D8 E2 — — — — — — — — — — — — — FSUB — st(0),ST(2)
— — — — — — — — — — — -0026 — 9B DE 26 0000 R — — — — — — — — — — — — — FISUB WORD_INTEGER
— — — — — — — — — — — -002B — 9B DE EA — — — — — — — — — — — — — FSUBP ST(2),ST(0)
— — — — — — — — — — — -002E — 9B DC E2 — — — — — — — — — — — — — FSUBR ST(2),ST(0)
— — — — — — — — — — — -0031 — 9B DA 2E 0000 R — — — — — — — — — — — — — FISUBR — — — — — SHORT_INTEGER
— — — — — — — — — — — -0036 — 9B DE E2 — — — — — — — — — — — — — FSUBRP — — — — — ST(2),ST(0)
— — — — — — — — — — — -0039 — 9B D8 0E 0000 R — — — — — — — — — — — — — FMUL — SHORT_REAL
— — — — — — — — — — — -003E — 9B DE 0E 0000 R — — — — — — — — — — — — — FIMUL WORD_INTEGER
— — — — — — — — — — — -0043 — 9B DE CA — — — — — — — — — — — — — FMULP ST(2),ST(0)
— — — — — — — — — — — -0046 — 9B D8 F2 — — — — — — — — — — — — — FDIV — ST(0),ST(2)
— — — — — — — — — — — -0049 — 9B DA 36 0000 R — — — — — — — — — — — — — FIDIV SHORT_INTEGER
— — — — — — — — — — — -004E — 9B DE FA — — — — — — — — — — — — — FDIVP ST(2),ST(0)
— — — — — — — — — — — -0051 — 9B D8 FA — — — — — — — — — — — — — FDIVR st(0),ST(2)
— — — — — — — — — — — -0054 — 9B DE 3E 0000 R — — — — — — — — — — — — — FIDIVR — — — — — WORD_INTEGER
— — — — — — — — — — — -0059 — 9B DE F2 — — — — — — — — — — — — — FDIVRP — — — — — ST(2),ST(0)

— — — — — — — — — — — -005C — — — — — — — — — — — — — — — — — — CODE — ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

-&n
bsp- — — — — — — — -Фиг. 7.16 Арифметические команды сопроцессора 8087
— — — вычислительные операции, и не толькочетыре основных действия —
— — — сложение, вычитание, умножение и деление,но также трансцендентные
— — — и тригонометрические функции.

— — — — — На Фиг. 7.16 показан ассемблерный листингпрограммы, состоящей
— — — из некоторых команд для выполненияосновных четырех действий.
— — — Данный пример иллюстрирует только работукоманды FADD, во всех
— — — возможных комбинациях. — Прежде чем рассматривать команды, разберем
— — — возможные варианты их работы. — Как видно из Фиг. 7.17, существует
— — — пять различных методов выполненияарифметических команд. — На
— — — Фиг. 7.17а показаны пять способовиспользования данных в
— — — арифметических командах. — В случае 1 указывается только код
— — — операции команды. — В операции принимают участие вершина стека и
— — — элемент ST1, а результат замещает вершинустека. — Заметим, что на
— — — Фиг. 7.17а приведены примеры для каждогослучая с использованием
— — — команды сложения. — На рисунке также показаны схемы выполнения
— — — вычислительных операций.
— — — — — Случай 2 иллюстрирует операцию,выполняемую с двумя регистрами
— — — стека сопроцессора 8087. — Одним из этих регистров должна быть
— — — вершина стека. — Если вершина стека — приемник результата, ее можно
— — — не упоминать, указав только регистристочника. — Если же приемником
— — — результата служит какой=то другой регистр,нужно указывать и
— — — источник, и приемник.

— — — — — Форма команды — — — — — — — — — Пример FADD — — — — — Действие
— — — — ——————————————————————
— — — — 1. Fop — — — — — — — — — — — — FADD — — — — — — — ST0&lt—ST0+ST1
— — — — 2. Fop STi — — — — — — — — FADD — ST2 — — ST0&lt—ST0+STi
— — — — — Fop — — ST0,STi — — — FADD — ST0,ST2ST0&lt—ST0+STi
— — — — — Fop — — STi,ST0 — — — FADD — ST2,ST0ST2&lt—ST0+ST2
— — — — 3. FopP — — — — — STi,ST0 — — — FADDP ST2,ST0ST2&lt—ST0+ST2,Извлечь из стека
— — — — 4. Fop вещ.пам. — — — FADD — ВЕЩЕСТ — — — — — ST0&lt—ST0+ВЕЩЕСТ
— — — — 5. Flop — — — — — целоеПам — — — FIADD ЦЕЛОЕ ST0&lt—ST0+ЦЕЛОЕ
— — — — — — — — — — — — — — — — — — — — — — — (a)

— — — — — — — — — — — Операция — — — — — — — — — Действие
— — — — — — — — — — — ———————————————————-
— — — — — — — — — — — ADD — — — — — — — — назначение&lt— назначение + источник
— — — — — — — — — — — SUB — — — — — — — — назначение&lt— назначение — источник
— — — — — — — — — — — SUBR — — — — — — — назначение&lt— источник — назначение
— — — — — — — — — — — MUL — — — — — — — — назначение&lt— назначение * источник
— — — — — — — — — — — DIV — — — — — — — — назначение&lt— назначение / источник
— — — — — — — — — — — DIVR — — — — — — — назначение&lt— источник / назначение
— — — — — — — — — — — ———————————————————-
— — — — — — — — — — — — — — — — — — — — — — — (b)

— — — — — — Фиг. 7.17 Арифметические операции (a)Комбинации данных
— — — — — (b) Арифметические функции для NDP 8087

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

— — — — — Два оставшихся варианта используютоперанды в памяти. — В случае
— — — 4 операнд в памяти — это короткое илидлинное действительное число.
— — — В случае 5 операнд — это короткое целоеили целое слово.

— — — —
— Вернувшись к Фиг. 7.16 можно заметить, чтов команде FADD
— — — определены только четыре операнда впамяти. — Это два целых числа —
— — — короткое и слово, и два действительныхчисла — короткое и длинное.
— — — Арифметические команды не могутнепосредственно работать с
— — — десятичным, длинным целым и временнымдействительным форматами
— — — чисел, и перед использованием их в счетепрограмма должна загрузить
— — — такие числа в регистр.

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

Категория: Программирование на Ассемблере | Дата: 15.03.13

Меню раздела
Блок