ПРОГРАМУВАННЯ СПІВПРОЦЕСОРА З ВИКОРИСТАННЯМ КОМАНД ОБЧИСЛЕННЯ ТРАНСЦЕНДЕНТНИХ ФУНКЦІЙ ТА РЕАЛІЗАЦІЯ РОЗГАЛУЖЕНЬ ПРИ ПОРІВНЯННІ ДАНИХ ДІЙСНОГО ТИПУ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2012
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт Системне програмування ЛАБОРАТОРНА РОБОТА № 4 ПРОГРАМУВАННЯ СПІВПРОЦЕСОРА З ВИКОРИСТАННЯМ КОМАНД ОБЧИСЛЕННЯ ТРАНСЦЕНДЕНТНИХ ФУНКЦІЙ ТА РЕАЛІЗАЦІЯ РОЗГАЛУЖЕНЬ ПРИ ПОРІВНЯННІ ДАНИХ ДІЙСНОГО ТИПУ Львів 2012 Мета: познайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення трансцендентних функцій та реалізації розгалужень. Теоретичні відомості Команди порівняння чисел У центральному процесорі команди умовних переходів виконуються відповідно до значень окремих бітів регістра прапорців процесора. У арифметичному співпроцесорі існують спеціальні команди порівнянь, за наслідками виконання яких, встановлюються біти кодів умов в регістрі стану: FCOM - Порівняння FICOM - Цілочисельне порівняння FCOMP - Порівняння і вилучення зі стеку ST(0) FICOMP - Цілочисельне порівняння і вилучення зі стеку FCOMPP - Порівняння і подвійне вилучення зі стеку (ST(0), ST(1)) FTST - Порівняння операнда з нулем FXAM - Аналіз операнда на тип числа (скінчене число, денормалізоване число, нуль, безкінечність,... ) Трансцендентні команди Трансцендентні команди призначені для обчислення наступних функцій: тригонометричні (sin, cos, tg...) зворотні тригонометричні (arcsin, arccos...) показникові (xy , 2x , 10x , ex ) гіперболічні (sh, ch, th...) зворотні гіперболічні (arsh, arch, arcth...) Ось список всіх трансцендентних команд математичного співпроцесора: FPTAN Обчислення часткового тангенса FPATAN Обчислення часткового арктангенса FYL2X Обчислення y*log2(x) FYL2XP1 Обчислення y*log2(x+1) F2XM1 Обчислення 2x-1 FCOS Обчислення cos(x) FSIN Обчислення sin(x) FSINCOS Обчислення sin(x) і cos(x) одночасно Команди керування Команди, керування, призначені для роботи з нечисловими регістрами співпроцесора. Деякі команди мають альтернативні варіанти. Мнемоніки цих команд можуть починатися з FN або F. Перший варіант відповідає командам "Без очікування". Для таких команд процесор не перевіряє, чи зайнятий співпроцесор виконанням команди, тобто біт зайнятості B не перевіряється. Особливі випадки також ігноруються. Варіанти команд "З очікуванням" діють так само, як і звичайні команди співпроцесора. Ось список команд керування для співпроцесора: FNSTCW (FSTCW) Записати управляюче слово (записує вміст регістра управління в оперативну пам’ять). FLDCW Завантажити управляюче слово (завантажує регістр управління з оперативної пам’яті і, як правило, використовується для зміни режиму роботи співпроцесора). FNSTSW (FSTSW) Записати слово стану (записує вміст регістра стану в оперативну пам’ять). FNSTSW AX (FSTSW AX) Записати слово стану в AX (записує вміст регістра стану в регістр AX центрального процесора, де можливий аналіз вмісту за допомогою команд умовних переходів). FNCLEX (FCLEX) Скинути особливі випадки (скидає прапорці особливих випадків в регістрі стану співпроцесора, також скидаються біти ES і B). FNINIT (FINIT) Ініціалізувати співпроцесор (ініціалізує регістр стану, регістр управління, і регістр тегів таким чином: Регістр управління - Проектна нескінченість, округлення до найближчого, розширена точність, всі особливі випадки замасковані Регістр стану - B=0 (біт зайнятості скинутий), код умови не визначений, ST=ES=0, прапорці особливих випадків встановлені в нуль Регістр тегів - Всі поля регістра тегів містять значення 11 (порожній регістр)). FNSTENV (FSTENV) Записати оточення (записує в пам’ять вміст всіх регістрів, окрім числових, у визначеному форматі. Команда корисна при обробці особливих випадків). FLDENV Завантажити оточення (завантажує регістри, збережені командою FNSTENV). FNSAVE (FSAVE) Записати повний стан (діє аналогічно команді FNSTENV, але додатково зберігає вміст числових регістрів). FRSTOR Відновити повний стан (діє аналогічно команді FLDENV, але додатково відновлює вміст числових регістрів). FINCSTP Збільшити покажчик стека SP на 1 FDECSTP Зменшити покажчик стека SP на 1 FFREE Звільнити регістр (визначає числовий регістр ST, вказаний як операнд, як порожній, записуючи у відповідне поле регістра тегів значення 11). FNOP Пуста команда, немає операції (не робить жодних дій). FSETPM Встановлює захищений режим роботи (переводить співпроцесор в захищений режим роботи). Хід виконання: Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані повинні вводитися з клавіатури, під час виконання програми в десятковому форматі зі знаком. Програма повинна складатися з двох модулів: головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора; Переконатися у правильності роботи кожного модуля зокрема та програми загалом. Варіант 17  main.cpp #include <stdio.h> #include <math.h> #include <iostream> #include <conio.h> using namespace std; extern "C" void calc(void); extern "C" { float a=0; float c1=0; float d=0; float X=0; }; int main() { float Y; cout<<"Please, enter a:\n"; cout<<"a = "; cin>>a; cout<<"Please, enter c:\n"; cout<<"c = "; cin>>c1; cout<<"Please, enter d:\n"; cout<<"d = "; cin>>d; if (c1>d) { Y=(2*c1-log(a+d)*c1)/(c1/4-1); } else { Y=(41-d/4-1)/(c1/tan(d+a)-d); } calc(); cout<<"X = "<<X; cout<<"\nperevirochne X = "<<Y; getch(); return 0; } calc.asm .586 .model flat,C .data EXTRN a:DWORD, c1:DWORD, d:DWORD, X:DWORD .data tmp dd 0 tmp1 dd 0 tmp2 dd 0 tmp3 dd 0 .code calc PROC finit fld c1 fcomp d fstsw ax sahf ja ___ob2 ;чисельник mov tmp, 4 fld d fild tmp fdiv fst tmp mov tmp1, 41 fild tmp1 fld tmp fsub fst tmp1 fld tmp1 mov tmp2, 1 fild tmp2 fsub fst tmp ;знаменник fld d fld a fadd fptan fdiv fst tmp1 fld c1 fld tmp1 fdiv fst tmp2 fld tmp2 fld d fsub fst tmp1 fld tmp fld tmp1 fdiv jmp ___fin ___ob2: ;чисельник mov tmp, 2 fild tmp fld c1 fmul fst tmp fld a fld d fadd fld1 fsub fst tmp1 fld1 fld tmp1 fyl2x fldln2 fmul fst tmp1 fld tmp1 fld c1 fmul fst tmp1 fld tmp fld tmp1 fsub fst tmp ;знаменник mov tmp1, 4 fld c1 fild tmp1 fdiv fld1 fsub fst tmp1 fld tmp fld tmp1 fdiv ___fin: fstp X ret calc endp end Результат виконання програми: c>d / c<d / Висновок: виконавши дану лабораторну роботу, я познайомитися з принципами роботи математичного співпроцесора і використала його можливості для обчислення трансцендентних функцій та реалізації розгалужень.
Антиботан аватар за замовчуванням

21.10.2013 21:10-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!