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

Завдання №10

Тема: Опрацювання числових масивів засобами вбудованого в С++ Builder Асемблері.

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

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

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

Завдання: Обчислити кількість елементів, значення яких більше за значення першого елементу, ромір масиву 14.

Тест програми:

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

Form1->Close();

}

//-------------------------------------------------------------------

void __fastcall TForm1::StartClick(TObject *Sender)

{ int j=0;

int i, a[10];

for(i=0; i<10; i++) a[i] = StrToInt(Memo1->Lines->Strings[i]);

asm

{ mov edx, 0 // Початковий зсув

mov ecx, 10 //Кількість повторень циклу

@next:

mov esi, dword ptr a+edx //Завантажити черговий елемент в esi

cmp esi,0 // Порівняти елемент з 0

jl @net //Якщо елемент < 0, перейти на мітку

add j,1 //додати 1

@net: add edx, 4 //Підготувати зсув для наступного елемента

loop @next // Цикл: якщо есх>0, перейти на мітку

}

Edit1->Text=IntToStr(j);

}

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

Висновок: У цьому завданні ми навчилися працювати з масивами у С++ Builder Асемблері.

Рис. 10.1

Завдання №11

Тема: Опрацювання рядків та символьних масивів засобами вбудованого С++ Builder Асемблера.

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

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

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

Завдання: Написати програму, котра вводить рядок символів і змінює місцями

третій та останній введені символи.

Текст програми:

//---------------------------------------------------------------------------

#include <vcl.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;

int kol_pr(AnsiString , int );

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

AnsiString S = Edit1->Text;

int k = S.Length(); //находим длинну строки

kol_pr(S, k); //вызов функции

Edit2->Text = S;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Form1->Close();

}

//---------------------------------------------------------------------------

int kol_pr(AnsiString s, int k)

{ int p;

asm

{ pusha // Запоминание значений регистров

mov edi, dword ptr [s] //заносим строку в регистр

mov ecx, dword ptr k //заносим число повторов в цикл

mov edx, 0 // Начальный сдвиг

cmp ecx, 0 //проверка на отсутсвие строки

je @exit //если нет строки->выход

cld

mov al, ',' //проверить знак на запятую

@next:

scasb

jne @skip //если он не “,” переходим по метке

inc edx // Увеличить количество на 1

mov byte ptr[edi-1],' ' //заменяем запятую пробелом

@skip:

loop @next //повтор

@exit:

mov dword ptr p, edx //переписываем строку

popa // Восстановление заначений регистров

}

return p;

}

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

Рис. 11.1

Висновок: У цьому завданні ми навчилися працювати з рядками та символьними масивами у С++ Builder Асемблері.

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