Міністерство освіти і науки, молоді та спорту України
Національний університет “Львівська політехніка”
/
Кафедра ЕОМ
Лабораторна робота №4дисципліни:” Системне програмування”
ПРОГРАМУВАННЯ СПІВПРОЦЕСОРА З ВИКОРИСТАННЯМ КОМАНД ОБЧИСЛЕННЯ ТРАНСЦЕНДЕНТНИХ ФУНКЦІЙ ТА РЕАЛІЗАЦІЯ РОЗГАЛУЖЕНЬ ПРИ ПОРІВНЯННІ ДАНИХ ДІЙСНОГО ТИПУ
Мета: познайомитися з принципами роботи математичного співпроцесора і використати його можливості для обчислення трансцендентних функцій та реалізації розгалужень.
Теоретичні відомості :
Команди порівняння чисел
У центральному процесорі команди умовних переходів виконуються відповідно до значень окремих бітів регістра прапорців процесора. У арифметичному співпроцесорі існують спеціальні команди порівнянь, за наслідками виконання яких, встановлюються біти кодів умов в регістрі стану:
FCOM - Порівняння
FICOM - Цілочисельне порівняння
FCOMP - Порівняння і вилучення зі стеку ST(0)
FICOMP - Цілочисельне порівняння і вилучення зі стеку
FCOMPP - Порівняння і подвійне вилучення зі стеку (ST(0), ST(1))
FTST - Порівняння операнда з нулем
FXAM - Аналіз операнда на тип
Трансцендентні команди
Cписок всіх трансцендентних команд математичного співпроцесора:
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) одночасно
Команда FPTAN обчислює частковий тангенс ST(0), розміщуючи в стеку такі два числа x та у, що y/x = tg(ST(0)). Команда FPATAN обчислює частковий арктангенс: z=arctg(ST(1) /ST(0))=arctg(x/y).Перед виконанням команди числа x і у розташовуються в ST(1) і ST(0), відповідно. Аргументи команди FPATAN повинен знаходиться в межах: 0 ≤ x < y < +( . Результат записується в ST(1), а операнд в ST(0) вилучається зі стеку. Таким чином результат після виконання інструкції розміщується у ST(0). Команда FYL2X обчислює вираз y*log2 (x), операнди x і у розміщуються, відповідно, в ST(0) і ST(1). Операнди вилучаються зі стеку, а результат записується в стек. Параметр x повинен бути додатнім числом.
Функція FYL2XP1 обчислює вираз y*log2 (x+1), де x відповідає ST(0), а у - ST(1). Результат записується в ST(0), обидва операнди вилучаються зі стеку і втрачаються. На операнд x накладається обмеження: 0 < x < 1 - 1/sqrt(2)
Команда F2XM1 обчислює вираз 2x-1, де x - ST(0). Результат записується в ST(0), параметр повинен знаходиться в наступних межах: 0 <= x <= 0,5
Команда FCOS обчислює cos(x). Параметр x винен знаходиться в ST(0), туди ж записується результат виконання команди.
Команда FSIN аналогічна команді FCOS, але обчислює значення синуса ST(0).
Команда FSINCOS обчислює одночасно значення синуса і косинуса параметра ST(0). Значення синуса записується в ST(1), косинуса - в ST(0).
28
Варіант №28
Виконання роботи :
Коди програм
#include <math.h>
#include <stdio.h>
#include <conio.h>
extern "C" void TransFunc(void);
extern "C"
{
float var_A;
float var_C;
float var_D;
float Result_FPU =0;
};
int main()
{
float C_Result;
printf("Please, enter your numbers:\n");
printf("A = ");
scanf("%f",&var_A);
printf("C = ");
scanf("%f",&var_C);
printf("D = ");
scanf("%f",&var_D);
TransFunc();
if(var_C>var_D){
C_Result= (var_A+tan(var_D/4-1))/(var_C/3 -var_A*var_D);
}
if(var_C<=var_D){
C_Result= (var_C*var_A+ var_C/2)/(var_C-tan(var_D+1));
}
printf("Result of using FPU is X = %.6f\n",Result_FPU);
printf("REsult of using C is X = %.6f\n",C_Result);
getch();
return 0;
}
.586
.model flat,C
.data
EXTRN var_A:DWORD, var_C:DWORD,var_D:DWORD,Result_FPU:DWORD
.data
tmp dd 0
con_1 dd 1
con_2 dd 2
con_3 dd 3
con_4 dd 4
Numerator dd 0
.code
TransFunc PROC
finit
fld var_C
fld var_D
fcompp
fstsw ax
sahf
jnle MoreThan
jle LessThan
MoreThan:
fld var_D
fild con_4
fdiv
fild con_1
fsub
fptan
fdiv
fld var_A
fadd
fstp Numerator
fld var_A
fld var_D
fmul
fstp tmp
fld var_C
fild con_3
fdiv
fld tmp
fsub
fstp tmp
fld Numerator
fld tmp
fdiv
fstp Result_FPU
jmp EndFunc
LessThan:
fld var_c
fld var_A
fmul
fstp tmp
fld var_c
fild con_2
fdiv
fld tmp
fadd
fstp Numerator
fld var_D
fild con_1
fadd
fptan
fdiv
fstp tmp
fld var_C
fld tmp
fsub
fstp tmp
fld Numerator
fld tmp
fdiv
fstp Result_FPU
EndFunc:
ret
TransFunc ENDP
END
На рис.1 зображено результат виконання програми.
/
РИС.1
Висновок : на даній лабораторній роботі я оволодів навиками зі співпроцесором з використанням трансцендентних функцій . Навчився використовувати співпроцесор із трансцендентними функція для обчислення певних задач