Основные вычислительные команды. Включают в себя различные арифметические команды и команды сравнения.
Элементарные арифметические команды. Эти команды (табл. 2.12)
Таблица 2.12
Мнемокод | Выполняемые действия |
FADD | ST(0) + ST(1) -> ST(0) |
FSUB | ST(0) - ST(1) -> ST(0) |
FSUBR | ST(1) - ST(0) -> ST(0) |
FMUL | ST(0) x ST(1) -> ST(0) |
FDIV | ST(0) / ST(1) -> ST(0) |
FDIVR | ST(1) / ST(0) -> ST(0) |
выполняют четыре арифметических действия над операндами, размещенными в двух верхних элементах стека ST(0) и ST(1) с занесением результата в ST(0). В обычных операциях сложения FADD, вычитания FSUB, умножения FMUL и деления FDIV первый операнд берется из вершины стека ST(0), а второй из следующего элемента ST(1). Поскольку результат вычитания и деления зависит от порядка следования операндов, введены так называемые обратные операции вычитания FSUBR и деления FDIVR, которые меняют операнды местами. Для обеспечения большей гибкости при выполнении арифметических действий введены арифметические команды с расширенными возможностями (табл. 2.13). При использовании этих команд один операнд должен находиться в вершине стека, а второй - в произвольном регистре ST(i) или в памяти. В последнем случае операнд может быть представлен только в двух форматах КВФ и ДВФ.
Таблица 2.13
Мнемокод команды | ||
(а) | (б) | (в) |
FADD | FADDP | FIADD |
FSUB | FSUBP | FISUB |
FSUBR | FSUBRP | FISUBR |
FMUL | FMULP | FIMUL |
FDIV | FDIVP | FIDIV |
FDIVR | FDIVRP | FIDIVR |
Результат операции может быть размещен в произвольном регистре ST(i). Возможности размещения второго операнда и результата различны для мнемокодов команд, представленных в различных столбцах (а, б, в табл. 2.13).
Команды (а) допускают размещение второго операнда как в памяти, так и в произвольном регистре ST(i), причем результат может быть размещен в произвольном регистре. Команды (б) допускают размещение второго операнда и запись результата в произвольный регистр. При выполнении команд (б) дополнительно осуществляется выталкивание из стека содержимого его вершины. Команды (в) допускают размещение второго операнда только в памяти, а результат размещения в вершину стека ST (0). Эти команды выполняют арифметические действия над 16- и 32-разрядными целыми числами.
Мнемокоды команд (а) не отличаются от мнемокодов элементарных арифметических команд. Они расширяют возможности программиирования и позволяют, например, записать команду FADD ST, ST(i), которая в отличие от команды FADD второй операнд выбирает из ST (i), а не из ST(1) (при записи команд допускается написание ST вместо ST (0)). Можно также записать команду FADD ST(3), ST, которая результат размещает в ST(3), а не в вершину. Удобно использование команд типа FADD ST, ALPHA, где ALPHA - адрес памяти, с которого размещено второе слагаемое. Эта команда эквивалентна паре команд FLD ALPHA и FADD. Отметим, что запись команды в виде FADD ALPHA,ST недопустима, поскольку результат не может быть размещен в памяти. Эту команду можно реализовать с помощью двух команд FADD ST, ALPHA и FST ALPHA.
Элементарные команды сравнения. Эти команды (табл. 2.14) позволяют сравнивать данные, расположенные в двух верхних регистрах стека ST(0) и ST(1) (команды FCOM, FCOMP, FCOMPP), а также сравнивать с нулем (FTST) и анализировать данные в вершине FXAM. Команды сравнения могут выполняться без изменения состояния стека (FCOM), с выталкиванием одного из сравниваемых данных (FCOMP) и с выталкиванием обоих сравниваемых данных (FCOMPP).
Таблица 2.14
Мнемокод команды | Выполняемые действия |
FCOM | ST(0) сравнивается с ST (1) |
FCOMP | ST(0) сравнивается с ST (1) и выталкивается |
FCOMPP | ST(0) сравнивается с ST (1) и оба выталкиваются |
FTST | ST(0) сравнивается с нулем |
FXAM | ST(0) анализируется |
Результаты сравнения помещаются в регистр состояния SR (разряды С3, С0). Значения флагов С3,С0 устанавливаются в зависимости от соотношения сравниваемых данных в соответствии с табл. 2.3. Поскольку при реализации алгоритмов довольно часто производится сравнение с нулем, введена соответствующая команда FTST. Команда FXAM выполняет детальный анализ содержимого вершины стека и помещает результаты в регистр состояния SR (разряды С0-C3). Значения флагов С0,C1,C3 устанавливаются в зависимости от результатов анализа (см. табл. 2.4). Флаг С2 указывает знак числа, расположенного в вершине.
Для обеспечения большей гибкости при сравнениях введены команды сравнения с расширенными возможностями: FCOM addr, FCOMP addr, FICOM addr и FICOMP addr, где addr - ST(i) или адрес памяти (mem). Возможности размещения второго операнда различны для мнемокодов FCOM, FCOMP и FICOM, FICOMP. Первые две команды допускают размещение второго операнда как в памяти, так и в произвольном регистре ST(i) и позволяют выполнять сравнение вещественных чисел в форматах КВФ и ДВФ. Вторые две команды допускают размещение второго операнда только в памяти и позволяют сравнивать 16- и 32-разрядные целые числа. Во всех случаях результаты сравнения помещаются в разряды С3,С0 регистра состояния.
Команды управления. Включают различные команды управления сопроцессором и насчитывают 15 мнемокодов.
Команда FINIT - начальной инициализации производит действия, аналогичные тем, которые выполняются по внешнему сигналу RESET. Эта команда позволяет в любой момент осуществить начальную установку сопроцессора.
Команды FENI и FDISI - разрешения и запрещения выдачи запросов прерывания на выходе INT арифметического процессора позволяют устанавливать в «1» и сбрасывать в «0» разряд-маску IEM, назначение которого описано выше.
Команда FLDCW addr позволяет загружать управляющее слово в регистр управления CR. Управляющее слово должно быть предварительно сформировано в памяти, где в соответствующих полях (см. рис. 2.4) задаются необходимые режимы округления RC, управления точностью РС, тип арифметики IC, а также разряды-маски исключительных ситуаций РМ, UM, OM, ZM, DM, IM.
Команда FSTCW addr позволяет запомнить содержимое регистра управления в памяти по указанному адресу.
Команда FCLEX - обнуление флагов исключительных ситуаций позволяет сбросить эти флаги в «0». Напомним, что любой из флагов PE, UE, ОЕ, ZE, DE и IE, будучи однажды установлен в «1», будет находиться в этом состоянии вплоть до подачи команды FCLEX.
Команда FSTSW addr позволяет запомнить слово-состояние в памяти по указанному адресу. Под словом-состоянием понимается содержимое регистра состояния SR. Эта команда используется для организации условных переходов по результатам сравнения чисел. Поскольку в системе команд АП отсутствуют команды переходов, то для того, чтобы воспользоваться соответствующей командой ЦП необходимо предварительно передать результаты сравнения чисел из регистра SR сопроцессора в регистр F центрального процессора.
Флаги С0,С3 расположены в разрядах регистра состояния SR, соответствующих расположению флагов CF, ZF центрального процессора. Это обеспечивает простую реализацию условных переходов по результатам сравнения чисел в АП.
Команда FSTENV addr позволяет запомнить в памяти по указанному адресу состояние всех регистров окружения. Последовательность записи регистров в память представлена на рис. 2.9,а.
Рис. 2.9. Структуры размещения содержимого регистров в памяти по команде FSTENV (a) и FSAVE (б)

Команда FLDENV addr загружает регистры окружения сопроцессора данными из памяти, расположенными по указанному адресу.
Команда FSAVE addr производит запись в память по указанному адресу состояния регистров окружения и арифметических регистров сопроцессора. Эта информация запоминается в памяти в форме, представленной на рис. 2.9, б.
Команда FRSTOR addr осуществляет обратную пересылку, т. е. загружает регистры сопроцессора данными из памяти, расположенным по указанному адресу.
Команды FINCSTP и FDECSTP увеличивают и уменьшают соответственно значения указателя стека ST на единицу. Эти команды не изменяют содержимое стека и регистра-этикеток TR.
Команда FFREE присваивает значение TAG(i)=11 (еmpty), которое указывает, что регистр ST(i) не инициализирован.
Команда FNOP заставляет сопроцессор пропустить три такта работы, не выполняя никаких действий.
Специальные вычислительные команды. Выполняют специфические операции, которые часто используются при вычислениях (табл. 2.15).
Таблица 2.15
Мнемокод команды | Содержание команды |
FABS | Абсолютное значение ST(0) |
FCHS | Изменение знака ST(0) |
FRNDINT | Округление ST(0) |
FXTRACT | Выделение мантиссы и порядка ST(0) |
Вычисление квадратного корня из ST(0) | |
FSCALF | Масштабирование |
FPREM | Получение частичного остатка |
FPTAN | Вычисление частичного тангенса |
FPATAN | Вычисление частичного арктангенса |
FYL2Х | ST(0) = ST(1) log2(ST(0)) |
Команда FABS формирует абсолютное значение (модуль) числа, находящегося в вершине стека.
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


