Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 21:27   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
Печаль delphi ассемблерные вставки

Здраствуйте дорогие форумчанины! возникла проблема! нужно написать программу, которая считывает одномерный массив и делает смещение этого массива на несколько единиц... Процедуру, которая производит смещение на несколько единиц я написала на делфи... Она прекрасно работает. А вот на ассемблер не могу переписать.... Я Зделала кое какие наброски, но они не работают.
Посмотри пожалуйста в чем ошибка....!
Код:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls, Grids;
type
  matrix=array of extended;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    BitBtn1: TBitBtn;
    StringGrid1:TStringGrid;
    Label2: TLabel;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure OutputResult(massiv1:matrix;count:integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form2: TForm2;
  count,count2:integer;
  smeshenie:integer;
  massiv1,massiv2:matrix;
implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  count:=StrToInt(Edit1.Text);
  smeshenie:=StrToInt(Edit2.Text);
  StringGrid1.ColCount:=count+1;

end;
procedure Tform2.OutputResult(massiv1:matrix;count:integer);
var
 i:integer;
 temp:string;
begin
   for I := 1 to count do begin
     temp:=temp+FloatToStr(massiv1[i]);
     temp:=temp+'';
   end;
     Memo1.Lines.Add(temp) ;
end;
procedure Calculation (smeshenie:integer;massiv2:matrix; count:integer; var massiv1:matrix);register;
var
  i:integer;
begin
{   for i:=1 to count do begin
     if smeshenie>=i then
       massiv1[i]:=0
     else
       massiv1[i]:=massiv2[i-smeshenie];
   end;  }

asm
     mov cx,count
     mov dx,smeshenie
     lea bx,massiv1
     lea ax,massiv2
     dec bx
     @Above5: mov bx,$0
     @LessM3: sub dx,cx
              mov bx[cx],ax[dx]
     @Test: inc bx
            cmp dx,cx
            jae @Above5
            jbe @LessM3
     loopne @Test
     lea massiv1,bx
   end;
end;
procedure TForm2.Button2Click(Sender: TObject);
var
  i:integer;
  temp:boolean;
begin
   count2:=count+smeshenie;
   SetLength(massiv1,count+1);
   Setlength(massiv2,count+1);
   for i:=1 to count do begin
      massiv1[i]:=StrToFloat( StringGrid1.Cells[i,0]);
      massiv2[i]:=massiv1[i];
   end;
   Calculation (smeshenie,massiv2,count,massiv1);

   OutputResult(massiv1,count);
end;

end.
Вложения
Тип файла: rar лаб.раб.RAR (14.9 Кб, 10 просмотров)
tanek вне форума Ответить с цитированием
Старый 18.04.2010, 15:03   #2
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Мальчики и девочки.... подскажите мне.... У меня даже прога не компилится ругается на асемлерную вставку... Хотя я прописала как в книжках написано....(((((
tanek вне форума Ответить с цитированием
Старый 18.04.2010, 16:41   #3
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

А что значит "смещение"? Разъясни, плиз...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 18.04.2010, 21:32   #4
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Grag допустим у нас есть такой одномерный массив 123456 И нам сказано что нужно сместить его на 3 единицы. После преобразований мы получим вот такой массив 000456. Вот что нужно сделать. Помогите мне исправить
tanek вне форума Ответить с цитированием
Старый 18.04.2010, 22:45   #5
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Просто переписал то, что у вас на дельфи. Самой дельфи у меня нет, поэтому не компилировал.
Код:
  xor ecx,ecx
@cycle:
  inc ecx
  cmp ecx,[count]
  jnb @exit

  cmp ecx,[smeshenie]
  jb @less
  
  mov [massiv1 + ecx*4],0
  jmp @cycle
@less:
  mov eax,ecx
  sub eax,[smeshenie]
  mov eax,[massiv2 + eax*4]
  mov [massiv1 + ecx*4],eax
  jmp @cycle
@exit:
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 19.04.2010 в 02:08.
Goodwin98 вне форума Ответить с цитированием
Старый 18.04.2010, 23:05   #6
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Goodwin98 Спасибо тебе большое... А ты не мог бы объяснить для чего ты написал первую строчку? Что она делает....
Народ подскажите как в делфи включить асемблерную вставку????
tanek вне форума Ответить с цитированием
Старый 18.04.2010, 23:29   #7
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

xor ecx,ecx обнуляет регистр ecx

Цитата:
Народ подскажите как в делфи включить асемблерную вставку????
А что
Код:
asm
end;
?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 19.04.2010, 01:26   #8
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Goodwin98 Ругается он на это..... может я не так написала?
tanek вне форума Ответить с цитированием
Старый 19.04.2010, 18:35   #9
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

Goodwin98 я посмотрела ваш код, но он не работает... он выводит точно такой же массив без изменений((((((((
tanek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Для чего нужны ассемблерные вставки в RAD STUDIO 2009 manzar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.01.2010 15:43
ассемблерные вставки в delphi viperrr Помощь студентам 2 09.12.2009 22:22
Программа на ассемблере или ассемблерные вставки. Gremlin Фриланс 6 26.01.2009 21:27
Ассемблерные вставки в Delphi Jupiter Общие вопросы Delphi 2 24.08.2008 16:41
Ассемблерные вставки Assassin Помощь студентам 1 26.05.2008 08:19