Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Встроенный ассемблер в С++] min a


Автор: RiLL 2.7.2008, 17:09
С помощью встроенного в С++ ассемблера...

Требуется найти сумму минимальных элементов массивов X[5] и Y[5]

Заранее спасибо!

Пока что у самого получилось набить это
Код

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
void ClearAll();   // o4istka soderzhimogo
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void ClearAll()
{
Form1->StringGrid1->Rows[0]->Clear();
Form1->StringGrid1->ColCount = 5;
int i;
for(i=0;i<5;++i)
{
Form1->StringGrid1->Cells[i][0]="";
}
Form1->StatusBar1->SimpleText="Введите элемнты массива X";
return;
}
//-------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClearAll();
}
//---------------------------------------------------------------------------
int max(int a, int b)
{
asm
{   mov eax,a;
    cmp eax,b;
    je L;
    jmp exit;
}
L:
asm
{
mov eax,b;
}
exit:
}
//----------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
Edit1->Text = max(StrToInt(int a, int b));
}
//---------------------------------------------------------------------------


но здесь я пытался найти минимальный элемент хотя бы 1 массива.но проблема вот в этом
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
Edit1->Text = max(StrToInt(int a, int b));

я не знаю как сделать,чтобы вывести на экран...если вообще возможно это сделать

Автор: ama_kid 6.7.2008, 15:28
Цитата(RiLL @  2.7.2008,  17:09 Найти цитируемый пост)
С помощью встроенного в С++ ассемблера...
Требуется найти сумму минимальных элементов массивов X[5] и Y[5]
не знаю, насколько актуально, но например так:
Код
Word X[5] = {6,7,1,9,3};
Word Y[5] = {5,7,8,4,7};

Word min(Word *Arr, int count)
{
 Word m = *Arr;
 asm
 {
        mov ecx,count
        xor ebx,ebx
        mov bx,m
        mov esi , [Arr]
      lp:
        lodsw
        cmp ax,bx
        jae next
        mov bx,ax
    next:
        loop lp
        mov m,bx
 }
 return m;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ShowMessage(IntToStr(min(X,5)+min(Y,5)));
}

Автор: RiLL 6.7.2008, 20:45
Спасибо
Вот работающий код,если интересноsmile
Код

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

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
void ClearAll();
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void ClearAll()
{
Form1->StringGrid1->Rows[0]->Clear();
Form1->StringGrid2->Rows[0]->Clear();
Form1->StringGrid1->ColCount=5;
Form1->StringGrid2->ColCount=5;
int i;
for(i=0;i<5;i++)
{
Form1->StringGrid1->Cells[i][0]="";
Form1->StringGrid2->Cells[i][0]="";
Form1->Edit1->Text = "";
Form1->Edit2->Text = "";
Form1->Edit3->Text = "";
}
return;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClearAll();
}
//---------------------------------------------------------------------------
int min(int a, int b)
{
asm
   { mov eax,a;
     cmp eax,b;
     jge L;
     jmp exit; }
L:
asm
   { mov eax, b; }
exit:
}
//---------------------------------------------------------------------------
int sum(int a, int b)
{
asm
   { mov eax, a;
     add eax, b; }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int tmp1,tmp2;
int i,j;

   tmp1 = StrToInt(StringGrid1->Cells[0][0]);
   for (j=0;j<5;j++)
   {tmp1 = min(tmp1, StrToInt(StringGrid1->Cells[j][0]));}
   Edit2->Text = tmp1;

       tmp2 = StrToInt(StringGrid2->Cells[0][0]);
       for(j=0;j<5;j++)
       {tmp2 = min(tmp2, StrToInt(StringGrid2->Cells[j][0]));}
       Edit3->Text = tmp2;

          Edit1->Text = sum(tmp1,tmp2);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N1Click(TObject *Sender)
{
ShowMessage(AnsiString("..."));
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
Application -> Terminate();
}
//------------------------------------------------


PS ama_kid, поставил бы Вам +,но нету 100 постов:( уж извинитеsmile но все арвно спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)