Вы находитесь на странице: 1из 6

Министерство образования и науки Украины

Харьковский национальный университет радиоэлектроники

Кафедра ЭВМ

Лабораторная работа №2
тема: “Блок вычислений с плавающей точкой FPU X87”

Вариант 5

Выполнили: Проверил:
ст. гр. КИ-15-6: Сумцов Д. В.
Погудин О.А.
Лободенко Г.Я.
Чугай В.А.

Харьков 2018
1. Цель работы
Углубление и закрепление знаний архитектуры блока вычислений с
плавающей точкой FPU x87; получение практических навыков по составлению
программ для FPU x87 на языке ассемблера, их отладке и выполнению.

2. Варианты заданий
2.1 Вычислить 6 значений функции Y = (20 * x) /(5 * x2 – 8,5) (x
изменяется от 1 с шагом 4). Результат разместить в памяти.
2.2 Задан массив с элементами a(i) = sin (5 * i). Определить номер
элемента массива, при котором сумма элементов превысит 3. Аргумент синуса
задан в градусах.
2.3 Исследование выполнения команд с обратными тригономет-
рическими функциями. Вычислить одно значение функции Y = 5 * arcSec (3 *
(tg 70°)2). Параметры аргументов выбирать с учетом области определения.
Результат перевести в градусы.
2.4 Вычислить 5 значений функции Y = 3 * log8(x2 +1), x изменяется от 0,2
с шагом 0,3.

Рисунок 1. Результат с исследованием выполнения арифметических операций

Листинг 1. Код задания с исследованием выполнения арифметических операций


void main() // начало программы на языке С++
{
long X = 1; // ячейка памяти для аргумента
float REZ[6]; // 7 ячеек памяти для результатов

long A = 20, B = 5;
float C = 8.5;

//Вычислить 6 значений функции


//Y = (20 * x) /(5 * x^2 – 8,5)
//(x изменяется от 1 с шагом 4).
_asm
{; начало ассемблерной вставки
mov ECX, 6;
mov EBX, 0;
m1: finit;
fild X;
fmul ST, ST;
fimul B;
fsub C;
fild X;
fimul A;
fdiv ST,ST(1);
fst REZ[EBX];
mov EAX, X;
add EAX, 4;
mov X, EAX;
add EBX, 4;
loop m1;
} // окончание ассемблерной вставки
}

Рисунок 2. Результат исследования выполнения операции сравнения

Листинг 2. Код задания с исследованием выполнения операции сравнения


void main() // начало программы на языке С++
{
/*Задан массив с элементами a(i) = sin(5 * i).
Определить номер элемента массива, при котором сумма элементов превысит 3.
Аргумент синуса задан в градусах. */
float A[6];
long X = 5, i = 0, P= 3, K = 180;
float SUM = 0.0;

_asm
{
mov EBX, 0;

m1: finit;
; fldz;
inc i;
fild X;
fldpi;
fmul;
fidiv K;
fimul i;
fsin;

fld SUM;
fadd ST, ST(1);
fst SUM;

fst A[EBX];
add EBX, 4;

ficom P;
fstsw AX;
sahf;
jc m1;
} // окончание ассемблерной вставки
}

Рисунок 3. Результат исследования выполнения команд с обратными


тригонометрическими функциями.

Листинг 3. Код задания с исследованием выполнения команд с обратными


тригонометрическими функциями.
void main() // начало программы на языке С++
{
/*Исследование выполнения команд с обратными тригономет-рическими функциями.
Вычислить одно значение функции Y.
Параметры аргументов выбирать с учетом области определения.
Результат перевести в градусы.
Вариант 5. Y = 5 * arcSec (3 * (tg 70°)^2).
*/
long A = 70, B = 5, C = 3, D = 180;
long V = 1, J = 2;
float Y;

_asm {;
finit;

fldpi;
fimul A;
fidiv D;
fptan;
fstp st;
; fdiv;
fmul ST, ST;
fimul C; 3 * (tg 70°) ^ 2
fld ST;
fabs;
fisub V;
fsqrt;
fxch;
fabs;
fiadd V;
fsqrt;
; fdiv;
fpatan;
fimul J;
fimul B;
fldpi;
fdiv;
fimul D;

fstp Y;
} // окончание ассемблерной вставки
}

Рисунок 4. Результат исследования выполнения команд с логарифмическими и


показательными функциями.
Листинг 3. Код задания с исследованием выполнения команд с
логарифмическими и показательными функциями.
void main() // начало программы на языке С++
{
float X = 0.2; // ячейка памяти для аргумента
float step = 0.3;
float REZ[5]; // 5 ячеек памяти для результатов

long A = 1;

//Вычислить 5 значений функции


//Y = 3 * log8(x^2 +1), = 3/3 * log2(x^2 +1)
//x изменяется от 0,2 с шагом 0,3.
_asm
{; начало ассемблерной вставки
mov ECX, 5;
mov EBX, 0;
m1: finit;
FLD1;
fild X;
fmul ST, ST;
fyl2xp1;
fst REZ[EBX];
fild X;
fiadd step;
fst X;
add EBX, 4;
loop m1;

} // окончание ассемблерной вставки


}

Вывод
Углубились и закрепили знания архитектуры блока вычислений с
плавающей точкой FPU x87; получили практические навыки по составлению
программ для FPU x87 на языке ассемблера, их отладке и выполнению.

Вам также может понравиться