Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
асм.docx
Скачиваний:
16
Добавлен:
27.10.2018
Размер:
644.06 Кб
Скачать

38. Команди трансцендентних функцій. Алгоритми обчислення значень функцій і та логарифмів за будь-якою основою.

Команда – обчислення часткового тангенса. Вона сприймає в число з діапазону від до , яке вважається аргументом в радіанах. Повертає результат у двох верхніх регістрах стека: значення тангенса заданого кута заміщує аргумент і в стек записується 1.0. Такі дії пояснюються сумісністю зі співпроцесорами 8087 і 80287, в яких команда дає тангенс, який дорівнює і значення в не дорівнює 1.0. Отже в цих співпроцесорах для одержання тангенса потрібна ще одна дія ділення (це й пояснює появу терміну “частковий тангенс”). Крім того запис у стек 1.0 спрощує обчислення інших тригонометричних функцій. Наприклад, котангенс можна обчислити, виконавши після команду ().

Якщо операнд не припустимий, біт с2 коду умови установлюється в 1 і залишається незмінним. Програмно потрібно операнд звести до значення, яке повинно знаходитися в діапазоні від до , віднімаючи відповідне число, кратне . Щоб не виникло особливого випадку “недійсна операція”, регістр повинен бути порожнім.

Команда – обчислення часткового арктангенса: обчислює . Після цього вилучення зі стека і кут заміщує два операнди у вершині стека. Результат має той же знак, що й операнд в і величину . Термін “частковий арктангенс” успадкований від процесорів 8087 і 80287, в яких були обмеження на значення в і . У 80387 і FPU обмежень на діапазон припустимих аргументів команди немає.

Те, що сприймає два аргументи і обчислює їх відношення, спрощує обчислення інших тригонометричних функцій. Наприклад,

, (38.1)

. (38.2)

Зрозуміло, що в обох цих співвідношеннях .

Покажемо, що формули (38.1) і (38.2) справджуються. Для доведення формули (38.1) застосуємо до обох частин цієї формули функцію

.

Знайдемо . Маємо

.

Оскільки

, то одержуємо

що . Одержана рівність підтверджує правильність співвідношення (38.1).

Для доведення (38.2) застосуємо до обох частин функцію

.

Одержана рівність завершує доведення формули (38.2).

Для обчислення за формулою (38.1) потрібно виконати наступні кроки.

  1. Якщо є мірою кута в градусах, то потрібно виконати потрібні перетворення: число градусів помножити на , число мінут – на , число секунд – на і знайдені добутки додати.

  2. Записати в стек.

  3. Обчислити значення виразу і записати його в стек.

  4. Виконати команду повинно бути значення виразу , а в .

Як результат цих дій в регістрі сформується значення виразу . Для виконання обчислень за формулою (38.2) потрібно виконати дії:

  1. Якщо є мірою кута в градусах, то потрібно виконати потрібні перетворення: число градусів помножити на , число мінут – на , число секунд – на і знайдені добутки додати.

  2. Обчислити значення виразу і записати його в стек.

  3. Обчислити значення виразу і записати його в стек.

  4. Виконати команду повинно бути значення виразу , а в ).

Як результат цих дій в регістрі сформується значення виразу .

Виконуючи команди і , процесор i486, слідкує за перериваннями. Він може відмінити виконання цих команд для обслуговування переривань. Обидві команди дуже точні і виконуються швидко (біля трьох разів повільніше, ніж команда ділення).

Новими для 80387 і FPU є команди: обчислення синуса , косинуса – , а також синуса косинуса – . Для цих команд - початковий кут в радіанах в діапазоні – від до . Якщо кут за межами діапазону, команди не виконуються, біт с2 установлюється в 1 і не змінюється. Забезпечити допустимий діапазон для початкового кута зобов’язаний програміст, віднімаючи відповідне кратне .

Команди і повертають результат на місці аргументу, а значення синуса на місці аргументу і значення косинуса записується в стек.

Команда використовується для обчислення виразу . Значення береться з і повинно бути з діапазону . Якщо операнд поза припустимим діапазоном, результат невизначений. Віднімання 1 пов’язано з точністю обчислень, коли значення близьке до 0. Результат записується в замість операнда .

Якщо потрібно обчислити значення виразу , то це можна зробити за формулою

. (38.3)

Вираз можна обчислити за допомогою команди , яка обчислює двійковий логарифм числа і множить на . Аргумент повинен бути в регістрі , а – в регістрі , – будь-яке додатне число, а – будь-яке. Команда обчислює логарифм числа з регістра , множить його на і повертає результат в , .

Якщо операнд в від’ємний, виникає особлива ситуація “недійсна операція”.

Отже, у виразі (38.3) легко обчислити показник степеня, тобто . Якщо , то далі легко обчислити , застосувавши команду . Однак, якщо не з даного діапазону, потрібно виконати додаткові обчислення за наступним алгоритмом:

  1. спочатку запишемо в ;

  2. застосуємо команду і одержимо в мантису числа у форматі числа РТ з характеристикою , а порядок числа в форматі числа РТ в регістрі ;

  3. оскільки мантиса подана в нормалізованому вигляді, то вона за модулем більша або рівна 1. Тому для зведення мантиси до потрібного діапазону, якщо вона додатна, то від неї потрібно відняти 1 і до додати 1, а якщо вона від’ємна, то додати 1 і від відняти 1 (тепер , де – вміст регістра , а , де – істинний порядок ;

  4. Застосуємо команду . В одержимо ;

  5. Виконаємо команду ;

  6. Виконаємо команду , в одержимо ;

  7. Застосуємо тепер команду , в одержимо .

Для обчислення логарифма за будь-якою основою можна використати формулу

.

Команда – обчислює значення виразу: . Значення вибирається з , причому , значення з регістра і може набувати будь-яких значень . Результат на місці і . Команда забезпечує більшу точність для обчислення логарифмів чисел, близьких до 1. Якщо не з допустимого діапазону, то результат команди невизначений. Команди і можуть бути призупинені і відмінені в зв’язку з обробкою переривання.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]