DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Використання математичного співпроцесора

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

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

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

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

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

Міністерство освіти, науки, молоді та спорту України Національний університет “Львівська політехніка” Кафедра ЕОМ Звіт до лабораторної роботи №3 на тему: «Використання математичного співпроцесора» з предмету: «Системне програмування» Підготувала: ст.гр. КІ-33 Надолинська Ольга Перевірив: Олексів М.В. Львів 2012 Мета: познайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення арифметичних виразів. ТЕОРЕТИЧНІ ВІДОМОСТІ Математичний співпроцесор запускається центральним процесором. Після запуску він виконує всі обрахунки самостійно і паралельно з роботою центрального процесора. Якщо центральний процесор направляє наступну команду співпроцесору в той момент, коли співпроцесор ще не закінчив виконання попередньої команди, центральний процесор переводиться в стан очікування. Якщо ж співпроцесор не зайнятий, центральний процесор, направивши команду співпроцесору, продовжує свою роботу, не очікуючи завершення обрахунку. Послідовне розташування команд співпроцесора і центрального процесора в коді програми створюють ілюзію послідовного їх виконання. Простіше кажучи можлива така ситуація, що коли центральний процесор звернеться до комірки пам’яті, куди арифметичний співпроцесор повинен був записати результат своїх обчислень і якщо співпроцесор ще не закінчив обрахунки то результату там не буде. Однак є спеціальні засоби синхронізації (команда FWAIT). Префікс команд та адресація операндів Асемблерна мнемоніка всіх команд співпроцесора починається з букви F, наприклад: FADD, FDIV, FSUB и так далі. Команди співпроцесора можуть адресувати операнди, аналогічно звичайним командам центрального процесора Основні команди математичного співпроцесора Команда Функція Операнд 1 Операнд 2 Результат  Команди пересилки даних  FLD Завантажити відправник (змінна дійсного типу) до стеку (регістр ST(0)) відправник – ST(0)  FILD Завантажити відправник (змінна цілого типу) до стеку (регістр ST(0)) відправник – ST(0)  FST Копіювати значення зі стеку (регістр ST(0)) до приймача (змінна дійсного типу) приймач – приймач  FSTP Перенести значення зі стеку (регістр ST(0)) до приймача (змінна дійсного типу) приймач – приймач  FIST Копіювати значення зі стеку (регістр ST(0)) до приймача (змінна цілого типу) приймач – приймач  FISTP Перенести значення зі стеку (регістр ST(0)) до приймача (змінна цілого типу) приймач – приймач  FXCH Обмін значеннями регістрів ST(0) та відправника (інший регістр) відправник – –  FCMOVxx Група команд умовної пересилки даних приймач відправник ST(0)  Група команд умовної пересилки даних FCMOVxx  Команда Реальна умова Умова для команди FCOM  FCMOVE ZF = 1 Якщо рівні  FCMOVNE ZF = 0 Якщо нерівні  FCMOVB CF = 1 Якщо менше  FCMOVBE CF = 1 та ZF = 1 Якщо менше або рівні  FCMOVNB CF = 0 Якщо не менше  FCMOVNBE CF = 0 та ZF = 0 Якщо не менше або рівні  Основні команди математичного співпроцесора Команди управління FPU  FINIT Ініціювання роботи математичного співпроцесора FPU – – –  FSTCW Копіювання вмісту регістру CR до приймача (змінна розміром 2 байта або регістр загального призначення) приймач – змінна  FLDCW Копіювання відправника (змінна розміром 2 байта) до регістру CR відправник – CR  FSTSW Копіювання вмісту регістру SR до приймача (змінна розміром 2 байта або регістр AX) приймач – змінна або AX   Арифметичні команди математичного співпроцесора Співпроцесор використовує шість основних типів арифметичних команд: Fxxx Перший операнд береться з вершини стека (джерело), другий - наступний елемент стека. Результат виконання команди записується в стек  Fxxx пам’ять Джерело береться з пам’яті, приймачем є вершина стека ST(0). Покажчик стека ST не змінюється, команда дійсна тільки для операндів з одинарною і подвійною точністю  Fixxx пам’ять Аналогічно попередньому типу команди, але операндами можуть бути 16- або 32-розрядні цілі числа  Fxxx ST, ST(i) Для цього типу регістр ST(i) є джерелом, а ST(0) - верхівка стека - приймачем. Покажчик стека не змінюється  Fxxx ST(i), ST Для цього типу регістр ST(0) є джерелом, а ST(i) - приймачем. Покажчик стека не змінюється  FXXXP ST(i), ST Регістр ST(i) - приймач, регістр ST(0) - джерело. Після виконання команди джерело ST(0) витягується із стека   Рядок "xxx" може приймати наступні значення: ADD - Додавання SUB - Віднімання SUBR - Зворотне віднімання, тобто операнди міняються місцями MUL - Множення DIV - Ділення DIVR - Зворотне ділення, ділене і дільник міняються місцями Окрім основних арифметичних команд є додаткові арифметичні команди: FSQRT - Знаходження квадратного кореня FSCALE – Масштабування на ступінь числа 2 FPREM - Обчислення часткової остачі FRNDINT - Округлення до цілого FXTRACT - Виділення порядку числа і мантиси FABS – Знаходження абсолютного значення (модуля) числа FCHS - Зміна знаку числа Варіант: 21 X=A4/B2+C1*(D2 – E1+K) 21   Код програми: Calc.asm .586 .model flat,c .data K dd 33; 21h tmp dd 0 .code calc PROC public calc push ebp mov ebp,esp fld dword ptr[ebp+8] fdiv dword ptr[ebp+12] fstp tmp fld dword ptr[ebp+16] fsub dword ptr[ebp+20] fild K fadd fmul dword ptr[ebp+24] fld tmp fadd pop ebp ret calc ENDP END Main.cpp #include <stdio.h> #include <conio.h> extern "C" float calc(float A,float B,float D,float E,float C); void main() { float A,B,D,E,C,K=33; double X=0; printf("Enter data\n"); printf("A = "); scanf("%f",&A); printf("B = "); scanf("%f",&B); printf("D = "); scanf("%f",&D); printf("E = "); scanf("%f",&E); printf("C = "); scanf("%f",&C); X=calc(A,B,D,E,C); printf("asm: X = %f\n",X); X=A/B+C*(D-E+K); printf("C: X = %f\n",X); getch(); } Результати виконання програми:   Висновок: під час виконання даної лабораторної роботи Я познайомилася з принципами роботи математичного співпроцесора і використала його можливості для обчислення арифметичних виразів. Написала програму згідно свого варіанта, та підготувала звіт з результатами виконання програми.
Антиботан аватар за замовчуванням

28.01.2013 16:49

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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