
- •Вариант №2
- •Приложение в среде Borland Delphi 7 для ввода исходных данных и получения результатов расчета. Главное окно приложения
- •Листинг модуля главной формы приложения
- •Модуль вычисления арифметического выражения на языке Ассемблера Исходный модуль на ассемблере
- •Листинг
- •Тестирование вычисления арифметического выражения для различных вариантов исходных данных
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ
УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П. КОРОЛЕВА
(НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ)»
(СГАУ)
Отчет
выполнения лабораторной работы 2
по системному программному обеспечению
Вариант № 2
Выполнила ЯббароваА.Ф. группа 9641
Преподаватель Агафонова
Самара, 2013
Вариант №2
Выполнить вычисление произведения L последних положительных элементов массива A размерности N, значения элементов которого имеют знаковый 8-битный формат и находятся в диапазоне a<=A[i]<=b. Значения параметров L и N должны задаваться в беззнаковом 8-битном формате. Расчетный модуль на языке ассемблера должен быть получен средствами Borland Assembler 5.0. Ввод исходных данных, проверка их корректности, а также вывод результатов вычисления должен осуществляться с помощью приложения, созданного в среде программирования Borland Delphi 7.
Приложение в среде Borland Delphi 7 для ввода исходных данных и получения результатов расчета. Главное окно приложения
Листинг модуля главной формы приложения
unit fMain;
interface
{$L lab2_met}
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Menus;
var
nn,kk:Byte;
Arr:packed array[0..255] of ShortInt;
Rez_asm:Integer;
procedure DoCalculation; far; external;
type
TfmMain = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
Memo1: TMemo;
Label9: TLabel;
Button1: TButton;
Label1: TLabel;
Label10: TLabel;
Splitter1: TSplitter;
Label11: TLabel;
MmRez: TMemo;
Label2: TLabel;
Label6: TLabel;
Label3: TLabel;
edNN: TEdit;
Label7: TLabel;
Label4: TLabel;
Label5: TLabel;
edAA: TEdit;
edBB: TEdit;
Label8: TLabel;
Label12: TLabel;
Label13: TLabel;
edLL: TEdit;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmMain: TfmMain;
implementation
{$R *.dfm}
procedure TfmMain.Button1Click(Sender: TObject);
var
str:string;
i:byte;
Rez_pascal:Integer;
aa, bb:integer;
begin
try
nn:=strtoint(edNN.Text);
aa:=strtoint(edAA.Text);
bb:=strtoint(edBB.Text);
kk:=strtoint(edll.Text);
except
MmRez.Lines.Add('Ошибка ввода исходных данных!');
MmRez.Lines.Add('');
Exit;
end;
if (nn < 2) or
(nn > 255) or
(aa < -128) or
(aa > 127) or
(bb < -128) or
(bb > 127) or
(kk < 1) or
(kk > nn) then
begin
MmRez.Lines.Add('Ошибка в исходных данных: превышен диапазон допустимых значений!');
MmRez.Lines.Add('');
Exit;
end;
str:='*** Исходные данные ***';
MmRez.Lines.Add(Str);
str:=format('N = %d, a = %d, b = %d, K = %d',[nn,aa,bb,kk]);
MmRez.Lines.Add(Str);
//Получить элементы массива
Str:='';
for i:=0 to nn-1 do
begin
Arr[i]:=Random(bb-aa)+aa;
Str:=Format('%sArr[%d]=%d ',[str,i,Arr[i]]);
end;
//Вывести элементы массива
MmRez.Lines.Add(Str);
MmRez.Lines.Add('');
str:='Pascal:';
MmRez.Lines.Add(Str);
//Вычислить в Pascal
Rez_pascal := 0;
for i:=0 to kk-1 do
begin
if Arr[i] < 0 then
Rez_pascal := Rez_pascal + Arr[i];
end;
if Rez_pascal <> 0 then
begin
MmRez.Lines.Add('Отрицательные элементы найдены');
str:=format('результат = %d',[Rez_pascal]);
MmRez.Lines.Add(Str);
end else
MmRez.Lines.Add('Отрицательные элементы не найдены');
MmRez.Lines.Add('');
//Вычислить в Ассемблере
DoCalculation;
str:='Ассемблер:';
MmRez.Lines.Add(Str);
if Rez_asm <> 0 then
begin
MmRez.Lines.Add('Отрицательные элементы найдены');
str:=format('результат = %d',[Rez_asm]);
MmRez.Lines.Add(Str);
end else
MmRez.Lines.Add('Отрицательные элементы не найдены');
MmRez.Lines.Add('');
end;
procedure TfmMain.FormShow(Sender: TObject);
begin
Randomize;
end;
procedure TfmMain.N1Click(Sender: TObject);
begin
MmRez.Lines.SaveToFile('Lab2_test.txt');
end;
end.