Завдання №7
Тема: Використовування команд математичного сопроцесора.
Мета роботи: Вивчити команди асемблера для роботи з математичним сопроцесором.
Обладнання: ПЕОМ, OC Windows,C++ Builder
Хід виконання роботи
Завдання. Обчислити вираз a*4+sin(b)/3
а=50.1 b=10.2
Текст програми:
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
#include <stdio.h>
double a,b,c,d,x,y;
int main()
{
a=50.1; c=4; d=3;
b=10.2;
__asm{//Ініціалізуемо сопроцесор
FINIT
FLD a // Розміщуємо число у стек
FMUL c //множимо a*4
FST x //Результат розмістимо у змінній x
FLD b //Розміщуємо число у стек
FSIN //Знаходження SIN(b)
FDIV
d //ділимо b/3
FADD x //додаемо a*4+sin(b)/3
FST y//Результат розмістимо у змінній y
}
printf ("b=%f", y);
Рис. 7.1
return 0;}
Результат на Рис. 7.1.
Висновок: У цьому завданні були здобуті навички роботи операцій з рядками у Assembler.
Завдання №8
Тема: Арифметичні операції над цілими числами у вбудованому С++ Builder Assembler
Мета роботи: Вивчення арифметичних команд мови асемблер та набуття навичок створювання програм C++ Buіlder з використанням вбудованого асемблера.
Обладнання: ПЕОМ, OC Windows,C++ Builder
Хід виконання роботи:
Завдання: Обчислити вираз: Y = 2(X 4 – X2)+1
Текст програми:
#include <vcl.h>
#include <math.h>
#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ int y;
int x = StrToInt(X1->Text);
_asm
{ mov eax, x // заносимо х в регістр
imul eax, x //возводимо у квадрат
mov edx, eax //заносимо квадрат іска в інший регістр
imul eax, eax //x^4
sub eax, edx //x^4-x^2
imul eax, 2 //2(x^4-x^2)
add eax, 1
mov y, eax
}
Y1->Text=IntToStr(y);
x=x*x;
y=2*(x*x-x)+1;
Y2->Text=IntToStr(y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Close();
} Результат на Рис. 8.1.
Рис. 8.1
Висновок: У цьому завданні ми удосконалили користування навичок арифметичнх дій у асемблер.
Завдання №9
Тема: Арифметичні операції над дійсними числами у вбудованому С++ Builder Асемблері.
Мета роботи: Вивчення асемблерних арифметичних команд опрацювання дійсних чисел та набуття навичок роботи з регістрами співпроцесора при створенні асемблерних вставок у програмах C++ Buіlder.
Обладнання: ПЕОМ, OC Windows,C++ Builder
Хід виконання роботи
Завдання:
Обчислити
Тест програми:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <iostream.h>
#include<math.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{ float y,a,b,z,a1,ac;
b=2;
float x = StrToInt(X1->Text); //считуемо значення х
_asm
{ finit
fld x //заносимо х у стек
fabs //|x|
fptan //tan|x|
fmul //заносимо значення тангенсу в st(0)
fst a //копіюемо значення у зменну а
fmul ST(0),ST(0) //a^2
fst a1 //копіюемо квадрат у змінну а1
fld b //заносимо 2 у стек
fsub //2-а
fsin //sin(2-а)
fst b //копіюемо значення b у змінну
fmul b //b^2
fadd a1 //a^2+b^2
fsqrt //(a^2+b^2)^(1/2)
fstp y //виводимо значення у змінну у
}
Y1->Text=FormatFloat("0.0000", y);
x=fabs(x);
a=tan(x);
b=sin(2-x);
z=a*a+b*b;
y=sqrt(z);
Y2->Text=FormatFloat("0.0000", y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
Результат на Рис. 9.1.
Рис. 9.1.
Висновок: У цьому завданні ми навчилися арифметичним операціям над цілими числами у вбудованому С++ Builder Assembler.
