ПРОГРАМУВАННЯ

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

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

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

Рік:
2012
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Програмування

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ  ЗВІТ до лабораторної роботи № 4 з дисципліни " Системне програмування" Львів – 2012 Тема: ПРОГРАМУВАННЯ СПІВПРОЦЕСОРА З ВИКОРИСТАННЯМ КОМАНД ОБЧИСЛЕННЯ ТРАНСЦЕНДЕНТНИХ ФУНКЦІЙ ТА РЕАЛІЗАЦІЯ РОЗГАЛУЖЕНЬ ПРИ ПОРІВНЯННІ ДАНИХ ДІЙСНОГО ТИПУ. Мета: познайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення трансцендентних функцій та реалізації розгалужень. ЗАВДАННЯ 1. Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу. Вхідні дані повинні вводитися з клавіатури, під час виконання програми в десятковому форматі зі знаком. Програма повинна складатися з двох модулів: головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень; модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора; 2.Переконатися у правильності роботи кожного модуля зокрема та програми загалом. 3.Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї. 4.Дати відповідь на контрольні запитання. ВАРІАНТИ ЗАВДАНЬ  Код програми: Main.cpp #include <stdio.h> #include <math.h> extern "C" float calc(float A,float C, float D); extern "C" { float A = 0; float C = 0; float D = 0; }; int main() { printf("if C > D -((lg(25+(2*A))/D)/(C+A-1)\n"); printf("if C <= D -((C+23)-(D+4)/(A-ln(A+(C/D)))\n"); printf("A = ");scanf_s("%f",&A); printf("C = ");scanf_s("%f",&C); printf("D = ");scanf_s("%f",&D); printf("asm: X = %f\n", calc(A,C,D)); // виклик файлу асм, ф-ції if (C> D) printf("c++: X = %f\n", ((log10(25+(2*A))/D))/(C+A-1)); else printf("c++: X = %f\n", (((C+23)-(D+4))/(A-log(A+(C/D))))); getchar();getchar(); return 0; }   Calc.asm .386 .model flat, c .data ;опис змінних Afl dd 0 Cfl dd 0 Dfl dd 0 tmp dd 0 tmp1 dd 0 .code calc proc push ebp mov ebp, esp mov eax,[ebp+8] mov Afl,eax mov eax,[ebp+12] mov Cfl,eax mov eax,[ebp+16] mov Dfl, eax fld Cfl fcomp Dfl fstsw ax sahf jbe var2 var1: (log10(25+(2*A))/D) fld Afl mov tmp,2 fild tmp fmul mov tmp,25 fild tmp fadd fstp tmp fld1 fld tmp fyl2x fldl2t fdivp ST (1),ST (0) fld Dfl fdiv fld Cfl fld Afl fadd fld1 fsub fdiv ;ділення: ((log10(25+(2*A))/D)) на (C+A-1) jmp next var2: fld Cfl fld Dfl fdiv fld Afl fadd fistp tmp fild tmp fld1 fldl2e fdivp fild tmp fyl2x fld Afl fsubr ;((C+23)-(D+4))) fld Cfl mov tmp,23 fild tmp fadd ;Cfl + 23 fld Dfl mov tmp,4 fild tmp fadd fsub ;((C+23)-(D+4))) віднімання fdivr ; ділення: ((C+23)-(D+4))) / (A-ln(A+(C/D)) next: pop ebp ret calc ENDP END   Результат виконання:   Висновок: Я оволодів навиками створення програм, частини яких написані різними мовами програмування Засвоїв правила взаємодії різних модулів.
Антиботан аватар за замовчуванням

20.05.2013 22:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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