Xreferat.com » Рефераты по информатике и программированию » Дополнительные арифметические команды

Дополнительные арифметические команды

Контрольная работа по теме:

ДОПОЛНИТЕЛЬНЫЕ АРИФМЕТИЧЕСКИЕ КОМАНДЫ

Введение


Дополнительные арифметические команды без явных операндов выполняют действия над содержимым вершины стека, результат помещают туда же БЕЗ МОДИФИКАЦИИ УКАЗАТЕЛЯ СТЕКА.

FABS – нахождение абсолютной величины.

FCHS – изменение знака операнда.

FRNDINT – округление операнда до целого в формате с плавающей точкой.

FSQRT – извлечение квадратного корня.

FPREM – вычисляет остаток от деления содержимого ST(0) на число из ST(1). Остаток замещает число в ST(0).

FSCALE – масштабирование на степень числа 2 – прибавляет целое число из ST(1) к порядку в регистре ST(0), т.е. умножает (или делит) ST(0) на число 2(ST(1)). Эту команду можно использовать для возведения числа 2 в целую степень (положительную или отрицательную).

FXTRACT – разлагает содержимое ST(0) на два числа: несмещенный порядок (замещает старое значение в ST(0)) и знаковую мантиссу (включаемую сверху, т.е. в ST(7)).

Команда FSCALE, находящаяся после команды FXTRACT, восстанавливает исходное число.

Все дополнительные арифметические команды группируются в три группы:

- команды сравнений:

- трансцендентные команды;

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

КОМАНДЫ СРАВНЕНИЙ

Команды сравнений включают:

FCOM ST(i)/mem – сравнивает содержимое ST(0) с операндом "x" (в численном регистре или в памяти), т.е. производит вычитание операндов без запоминания результата и устанавливает коды условий в регистре состояния (таблица 1).


Таблица 1 – Коды условий после сравнения

С3 С0 Условие

0

0

1

1

0

1

0

1

ST(0) > x

ST(0) < x

ST(0) = x

ST(0) и x – не сравнимы


FICOM mem – сравнивает содержи мое вершины стека ST(0) с целым числом в памяти.

FCOMP ST(i)/mem – аналогична команде FCOM, но после сравнения производит извлечение операнда из вершины стека.

FCOMPP ST(i) – сравнивает ST(0) c ST(i) и извлекает из стека оба операнда.

FTST – сравнивает вершину стека с нулем.

FXAM – сравнивает вершину стека с нулем, но выставляет 4 флага условий (в частности, определяется ненормализованная мантисса, бесконечность, нечисло и др.).

FCOMI ST(0),ST(i) – сравнение вещественных чисел и установка флагов в EFLAGS (P6+).

FCOMIР ST(0),ST(i) – сравнение вещественных чисел и установка флагов в EFLAGS и извлечение операнда из вершины стека (P6+).

Флаги условий (С0, С3) сопроцессора х87 используются для организации условных переходов микропроцессором х86. Для этого командой – FSTSW AX – содержимое регистра состояния х87 копируется в аккумулятор АХ микропроцессора х86. После этого командой – SAHF – старший байт аккумулятора (АН) передается в младший байт регистра флагов. При этом условию С0 соответствует флаг СF, а условию С3 - флаг ZF.


2. ТРАНСЦЕНДЕНТНЫЕ КОМАНДЫ


К элементарным трансцендентным функциям относятся:

тригонометрические функции (sin, cos, tg и др.),

обратные тригонометрические функции (arcsin, arctg и др.),

логарифмические функции (log2(x), log10(x), loge(x)),

показательные функции (xy, 2x, 10x, ex),

гиперболические функции (sh, ch, th и др.),

обратные гиперболические функции (arsh, arch, arth и др.).


Таблица 2 – Трансцендентные команды

Мнемоника Описание команды Вычисляемая функция
FPTAN Частичный тангенс ST(1) / ST(0) = tg (ST(0))
FSIN Синус(387+) ST(0) = sin (ST(0))
FCOS Косинус (387+) ST(0) = cos (ST(0))
FSINCOS Синус, косинус (387+)

ST(7) = sin (ST(0));

ST(0) = cos (ST(0))

FPATAN Частичный арктангенс ST(0) = arctg (ST(1)/ST(0)
FYL2X Двоичный логарифм ST(0) = ST(1) * log2 (ST(0))
FYL2XP1 Двоичный логарифм ST(0) = ST(1) * log2 (ST(0)+1)
F2XM1 Показательная функция ST(0) = 2(ST(0)) – 1

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

Команда FPTAN нахождения частичного тангенса в качестве результата выдает два числа (сопроцессоры 87/287):

y / x = tg (ST(0)).


Число «y» заменяет старое содержимое ST(0), а число «x» включается сверху. Поэтому, после выполнения команды указатель стека уменьшится на 1, число «х» будет записано в новую вершину стека ST(0), а число «y» – в регистр ST(1).

Для получения значения тангенса необходимо выполнить команду FDIV. Две команды FPTAN и FDIV выбирают аргумент из вершины стека и туда же помещают значение тангенса (БЕЗ МОДИФИКАЦИИ УКАЗАТЕЛЯ ВЕРШИНЫ СТЕКА). Две команды FPTAN и FDIVR вычисляют значение котангенса.

Для команды FPTAN аргумент задается в радианах и должен находится в диапазоне (сопроцессоры 87/287):

0 <= ST(0) <= 1/4.

Для СОПРОЦЕССОРОВ 387+ аргумент команды FPTAN (в радианах) может быть любым:

–263 <= ST(0) <= +264.

Значение тангенса исходного угла tg(ST(0)) замещает аргумент и в стек включается сверху 1,0 (для программной совместимости с предыдущими сопроцессорами 87/287).

Значения остальных тригонометрических функций (для сопроцессоров 87/287) можно вычислить, используя формулы тангенса половинного угла (табл. 3). Поэтому перед началом вычисления тригонометрических функций с использованием команды FPTAN необходимо аргумент в ST(0) поделить на 2. Новое значение аргумента «z» должно также удовлетворять условию: 0 Ј z Ј 1/4.

Таблица 3 – Формулы для вычисления тригонометрических функций

Дополнительные арифметические команды

Дополнительные арифметические команды

Дополнительные арифметические команды

Дополнительные арифметические команды

Дополнительные арифметические команды

Дополнительные арифметические команды


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


В СОПРОЦЕССОРАХ 387+ появились новые команды:

FSIN – вычисление синуса;

FCOS – вычисление косинуса;

FSINCOS – вычисление синуса и косинуса.

Все они воспринимают в ST(0) исходный угол, измеряемый в радианах и находящийся в диапазоне: –263 <= ST(0) <= +263. Команды FSIN и FCOS возвращают результат на место аргумента, а команда FSINCOS возвращает значение синуса на место аргумента и включает значение косинуса в стек.

Команда FPATAN вычисляет arctg (ST(1)/ST(0)). Два операнда извлекаются из стека, а результат включается в стек. Поэтому окончательно, УКАЗАТЕЛЬ СТЕКА УВЕЛИЧИВАЕТСЯ НА 1. Операнды этой команды для сопроцессоров 8087/287 должны удовлетворять условию:

0 < ST(1) < ST(0).

В сопроцессорах 387+ ограничений на диапазон допустимых аргументов команды FPATAN не существует.

Для вычисления остальных обратных тригонометрических функций по аргументу «z» необходимо предварительно подготовить операнды в ST(0) и ST(1) в соответствии с табл. 4 (делить операнды не нужно).

Таблица 4 – Формулы для вычисления обратных тригонометрических функций

Дополнительные арифметические командыДополнительные арифметические команды

Дополнительные арифметические командыДополнительные арифметические команды

Дополнительные арифметические командыДополнительные арифметические команды

Дополнительные арифметические командыДополнительные арифметические команды

Дополнительные арифметические командыДополнительные арифметические команды

Дополнительные арифметические командыДополнительные арифметические команды


Команда FYL2X вычисляет функцию: ST(1) * log2 ST(0). Два операнда извлекаются из стека, а затем результат включается в стек. Поэтому УКАЗАТЕЛЬ СТЕКА УВЕЛИЧИТСЯ НА 1. В команде требуется удовлетворение естественного для логарифмической функции условия:

ST(0) > 0.

Значения других логарифмических функций вычисляются по формулам в табл. 5 с загрузкой в регистр ST(1) необходимых констант командами: FLDLN2 и FLDLG2.


Таблица 5 - Формулы для вычисления логарифмических функций

log2 (x) ® FLD1; FLD x; FYL2X;

ln (x) = ln (2) * log2 (x) ® FLDLN2; FLD x; FYL2X;

lg (x) = lg (2) * log2 (x) ® FLDLG2; FLD x; FYL2X.

Еще одна логарифмическая команда FYL2XP1 вычисляет функцию: ST(1) * log2 (ST(0) + 1). Причина появления этой команды заключается в получении более высокой точности вычисления функции: log(1 + x). Эта функция часто встречается в финансовых расчетах, а также при вычислении обратных гиперболических функций.

Команда показательной функции F2XM1 вычисляет:

F2XM1 [ST(0)] = 2(ST(0)) – 1.

Аргумент показательной функции должен находится в диапазоне: для сопроцессоров 87/287: 0 <= ST(0) <= 0.5;

для сопроцессоров 387+: –1 <= ST(0) <= +1.

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


Таблица 6 – Формулы для вычисления показательных функций

2x = [2x – 1] + 1 = F2XM1 (x) + 1;

ex = 1 + [2(x * log2(e)) – 1] = 1 + F2XM1 (x * log2(e));

10x = 1 + [2(x * log2(10))– 1] = 1 + F2XM1 (x * log2(10));

аx = 1 + [2(x * log2(а)) – 1] = 1 + F2XM1 (x * log2(a)).


Таблица 7 – Формулы для вычисления гиперболических функций

Cинус гиперболический

Дополнительные арифметические команды

Косинус гиперболический

Дополнительные арифметические команды

Тангенс гиперболический

Дополнительные арифметические команды

Котангенс гиперболический

Дополнительные арифметические команды

Косеканс гиперболический

Дополнительные арифметические команды

Секанс гиперболический

Дополнительные арифметические команды


Таблица 8 – Формулы для вычисления обратных гиперболических функций

Дополнительные арифметические команды

где: Дополнительные арифметические команды

Дополнительные арифметические команды

где: Дополнительные арифметические команды

Дополнительные арифметические команды

где: Дополнительные арифметические команды

Дополнительные арифметические команды

Дополнительные арифметические команды

Дополнительные арифметические команды


КОМАНДЫ УПРАВЛЕНИЯ СОПРОЦЕССОРОМ х87

Команды управления сопроцессором х87 обеспечивают доступ к нечисловым регистрам. Мнемоники, которые начинаются с FN, соответствуют командам «БЕЗ ОЖИДАНИЯ», т.е. процессор х86 передает их для выполнения в сопроцессор х87, не проверяя занятость сопроцессора и игнорируя численные особые случаи.

Мнемоники без буквы «N» соответствуют командам «С ОЖИДАНИЕМ», т.е. заставляют процессор х86 реагировать на незамаскированные особые случаи и ожидать завершения выполнения команд в сопроцессоре х87. В общем случае, программистам рекомендуется избегать форм команд «без ожидания».

Команда – FNSTCW mem (FSTCW mem) – передает содержимое регистра управления (CW) в ячейку памяти.

Команда – FLDCW mem – загружает регистр управления (CW) из ячейки памяти. Эти две команды применяются для изменения режима работы сопроцессора х87.

Команда – FNSTSW mem (FSTSW mem) – передает содержимое регистра состояния (SW) сопроцессора х87 в ячейку памяти.

Команда – FNSTSW AX (FSTSW AX) – передает содержимое регистра состояния (SW) сопроцессора в регистр AX микропроцессора х86.

Команда – FNCLEX (FCLEX) – сбрасывает в регистре состояния сопроцессора флаги особых случаев, а также биты ES и BUSY. Эти флаги не сбрасываются аппаратно и должны явно сбрасываться программистом.

Команда – FNINIT (FINIT) – инициализирует регистры управления, состояния и тэгов на значения, приведенные в табл. 9. Такое же действие производит аппаратный сигнал сброса – RESET.


Таблица 9 – Инициализация сопроцессора х87

Регистр Выбор Режим работы
Регистр управления (Режим бесконечности)

Проективный – (287)

Афинный – (387+)


Режим округления Округление к ближайшему

Точность Расширенная

Все особые случаи Замаскированы

Регистр

Состояния

Бит занятости В = 0: Не занят

Код условия Не определен

Указатель стека TOP = 000

Бит суммарной ошибки ES = 0
Регистр тэгов
Все тэги показывают – "пустой"
Если Вам нужна помощь с академической работой (курсовая, контрольная, диплом, реферат и т.д.), обратитесь к нашим специалистам. Более 90000 специалистов готовы Вам помочь.
Бесплатные корректировки и доработки. Бесплатная оценка стоимости работы.

Поможем написать работу на аналогичную тему

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

Похожие рефераты: