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

Контрольная работа по теме:ДОПОЛНИТЕЛЬНЫЕАРИФМЕТИЧЕСКИЕ КОМАНДЫ

Введение

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

Ø   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.


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

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

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

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

С3 С0 Условие

1

1

1

1

ST(0) > x

ST(0) < x

ST(0) = x

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

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

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

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

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

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

Ø   FCOMIST(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 – Формулы длявычисления обратных тригонометрических функций

←ST(1)

←ST(0)

  />

←ST(1)

←ST(0)

  />

←ST(1)

←ST(0)

  />

←ST(1)

←ST(0)

  />

←ST(1)

←ST(0)

  />

←ST(1)

←ST(0)

  />

Команда FYL2Xвычисляет функцию: ST(1) * log2ST(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 Регистр тэгов Все тэги показывают – «пустой»
еще рефераты
Еще работы по информатике, программированию