Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра ЕОМ
/
ЗВІТ
до лабораторної роботи № 4
з дисципліни
" Системне програмування"
Львів – 2012
Тема: ПРОГРАМУВАННЯ СПІВПРОЦЕСОРА З ВИКОРИСТАННЯМ КОМАНД ОБЧИСЛЕННЯ ТРАНСЦЕНДЕНТНИХ ФУНКЦІЙ ТА РЕАЛІЗАЦІЯ РОЗГАЛУЖЕНЬ ПРИ ПОРІВНЯННІ ДАНИХ ДІЙСНОГО ТИПУ.
Мета: познайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення трансцендентних функцій та реалізації розгалужень.
ЗАВДАННЯ
1. Створити *.exe програму, яка реалізовує обчислення, заданого варіантом виразу.
Вхідні дані повинні вводитися з клавіатури, під час виконання програми в десятковому форматі зі знаком.
Програма повинна складатися з двох модулів:
головний модуль – створюється мовою С і має забезпечити ввід необхідних даних, виклик асемблерної процедури для обчислення виразу та вивід результату обчислень;
модуль безпосередніх обчислень – здійснює всі необхідні арифметичні дії з використанням математичного співпроцесора;
2.Переконатися у правильності роботи кожного модуля зокрема та програми загалом.
3.Скласти звіт про виконану роботу з приведенням тексту програми та коментарів до неї.
4.Дати відповідь на контрольні запитання.
ВАРІАНТИ ЗАВДАНЬ
5
Код програми:
Main.cpp
#include <stdio.h>
#include <math.h>
extern "C" void calc(void);
extern "C"
{
float X=0;
float A=0;
float Cv=0;
float D=0;
float Y=0;
};
int main()
{
printf("Please, enter X:\n");
printf("A = ");
scanf_s("%f",&A);
printf("C = ");
scanf_s("%f",&Cv);
printf("D = ");
scanf_s("%f",&D);
if (Cv>D){
if(log(1-A/4)<=0){
printf("ERROR: Ln <=0 ne dopystumuy\n");
}
else{
calc();
printf("X = %.4f\n",X);
}
}
if (D>=Cv){
if(Cv-tan(A/2)==0){
printf("ERROR: Dilennya na 0 nemojlyve!\n");
}
else{
calc();
printf("X = %.4f\n",X);
}
}
return 0;
}
Calc.asm
.586
.model flat,C
.data
EXTRN X:DWORD, A:DWORD, Cv:DWORD, D:DWORD
.data
tmp dd 0
.code
calc PROC
finit
fld Cv
fcomp D
fstsw ax
sahf
ja _bilshe
jmp _menshe
_bilshe:
mov tmp,2
fild tmp
fld Cv
fmul
fld D
mov tmp,23
fild tmp
fdiv
fsub
FLDLN2
mov tmp,1
fild tmp
fld A
mov tmp,4
fild tmp
fdiv
fsub
FYL2X
fdiv
jmp _kinets
_menshe:
mov tmp,4
fild tmp
fld Cv
fmul
fld D
fadd
mov tmp,1
fild tmp
fsub
fld Cv
fld A
mov tmp,2
fild tmp
fdiv
fptan
fmul
fsub
fdiv
_kinets:
fstp X
ret
calc endp
end
Результат виконання:
C>D
/
C<=D
/
Висновок: На даній лабораторній роботі оволодів навиками створення програм, частини яких написані різними мовами програмування Засвоїв правила взаємодії різних модулів.