Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы СПО / Методичка FPU.doc
Скачиваний:
59
Добавлен:
12.04.2015
Размер:
404.99 Кб
Скачать

5.4. Вычисление трансцендентных функций

Показательная функция yx с любым основанием у вычисляется с использованием команды F2XM1 по формуле:

, в частности:

(константа log 2 e загружается командой FLDL2E);

(константа log 210 загружается командой FLDL2T).

Логарифмическая функция log x y находится с использованием команды FYL2X по формуле:

десятичный логарифм:

натуральный логарифм:

Для загрузки констант lg 2, ln 2, log210 и log2e имеются команды: FLDLG2, FLDLN2, FLDL2T и FLDL2E.

Прямые тригонометрические функции sin, cos, tg, ctg вычисляются с использованием команд FPTAN, FSIN, FCOS, FSINCOS. Аргумент задается в радианах и должен находиться в диапазоне от –2 до 2. Для приведения аргумента нужно найти остаток от деления его на 2. Деление проводится в цикле командами FPREM1 или FPREM:

FLDPI

FADD ST,ST ; ST(0)=2

FLD x ; Аргумент находится в ST(0); ST(1)= 2

M1:FPREM1 ; Команда устанавливает флаг C2=0, если

; получен точный остаток от деления ST(0) / ST(1),

; C2=1, если остаток частичный.

FSTSW AX ; Пересылаем С2 в флаг PF

SAHF

JP M1 ; Если PF=1 (C2=1), то продолжить деление

Обратные тригонометрические функции arcsin, arccos, arctg, arcctg вычисляются с помощью команды FPATAN с предварительным преобразованием аргумента по формулам. Аргумент, передаваемый в ST(0), обозначим z.

; ;

; .

5.5. Загрузка констант в fpu

У FPU отсутствуют команды загрузки произвольных числовых констант в регистры ST(0)–ST(7). Приходится описывать переменные с начальными значениями (например, const float z=0.12;), а затем их использовать в вычислениях.

6. Программирование устройства fpu на встроенном ассемблере

  • В С++Builder и Visual C++ ассемблерная вставка оформляется:

_asm {

... // текст на Ассемблере

}

Внутри ассемблерных вставок можно обращаться к переменным, константам, именам параметров, описанным выше в программе.

  • В Delphi ассемблерный текст пишется между словами:

ASM

... // текст на Ассемблере

END;

Внутри блока ASM–END можно использовать локальные метки перехода, их имена должны начинаться с символа @. Область действия локальных меток ограничена блоком ASM–END. Метки, не начинающиеся со знака @, должны быть объявлены директивой label.

Отладка программ для FPU делается так.

  • На (первую) команду ассемблерной вставки ставится точка останова, и проект запускается на выполнение (в С++Builder: Run или F9; в Visual Studio: Debug/Start или F5).

  • После срабатывания точки останова вызывается окно FPU C++ Builder и Delphi через пункт меню View/ Debug Windows / FPU или комбинацией клавиш Ctrl+Alt+F); (в Visual Studio: через пункт меню Debug/Windows/Registers или клавишами Alt+5; в появившемся окне регистров правой кнопкой мыши вызываем контекстное меню и отмечаем пункт Floating Point).

  • Выполняя программу по шагам (в Delphi / C++ Buider клавишами F7 или F8; в Visual Studio клавишами F10, F11), можно просматривать регистры FPU и контролировать ход вычислений.

Соседние файлы в папке Лабы СПО