Контрольная работа по предмету "Информатика"


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

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


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



Введение


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


- 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. КОМАНДЫ СРАВНЕНИЙ


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


- 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) с целым числом в памяти.


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


- FCOMPP ST(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) * 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
Регистр тэгов Все тэги показывают – "пустой"


Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :