Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.61 Mб
Скачать

Завдання №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

getch();

return 0;}

Результат на Рис. 7.1.

Висновок: У цьому завданні були здобуті навички роботи операцій з рядками у Assembler.

Завдання №8

Тема: Арифметичні операції над цілими числами у вбудованому С++ Builder Assembler

Мета роботи: Вивчення арифметичних команд мови асемблер та набуття навичок створювання програм C++ Buіlder з використанням вбудованого асемблера.

Обладнання: ПЕОМ, OC Windows,C++ Builder

Хід виконання роботи:

Завдання: Обчислити вираз: Y = 2(X 4X2)+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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]