Выгрузка из eax в b матрицу Assembler+Delphi

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, как выгрузить из eax в матрицу b . Заранее спасибо. Если загрузил lea eax,b то обратный процесс ?

Решение задачи: «Выгрузка из eax в b матрицу Assembler+Delphi»

textual
Листинг программы
 unit Ass;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TMainForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  MainForm1: TMainForm1;
 
implementation
 
{$R *.dfm}
 
 
procedure TMainForm1.Button1Click(Sender: TObject);
 var
  b:array [0..2,0..2,0..2] of word integer;
  Total: Longword;
  OperBegin, OperEnd: TTimeStamp;
  l: integer;
 
begin
 OperBegin:=DateTimeToTimeStamp(Now);
 b[0,0,0]:=1; 
 b[0,0,1]:=2;
 b[0,0,2]:=3; 
 b[0,1,0]:=4; 
 b[0,1,1]:=5;
 b[0,1,2]:=6;
 b[0,2,0]:=7;
 b[0,2,1]:=8;
 b[0,2,2]:=9;
 b[1,0,0]:=10;
 b[1,0,1]:=11;
 b[1,0,2]:=12;
 b[1,1,0]:=13;
 b[1,1,1]:=14;
 b[1,1,2]:=15;
 b[1,2,0]:=16;
 b[1,2,1]:=17;
 b[1,2,2]:=18;
 b[2,0,0]:=19;
 b[2,0,1]:=20;
 b[2,0,2]:=22;
 b[2,1,0]:=23;
 b[2,1,1]:=24;
 b[2,1,2]:=25;
 b[2,2,0]:=26;
 b[2,2,1]:=27;
 b[2,2,2]:=28;
 
 
 asm
 
  lea eax,b
  xor ecx,ecx
  mov cx,[eax+2*(2*9+2*3+2)]// b[2,2,2] 1-ряд, 2-столбец, 0-глубина.
  mov l,ecx
 
  end;
 
  b[2,2,2]:=l;
 
  OperEnd:=DateTimeToTimeStamp(Now);
  Total:=OperEnd.Time-OperBegin.Time;
  ListBox1.Items.Add(IntToStr(l)+' Ñîäåðæèìîå ÿ÷åéêè.');
  ListBox1.Items.Add(IntToStr(Total)+' MSec');
end;
 
end.

Объяснение кода листинга программы

В коде происходит следующее:

  1. Создается новый объект класса TMainForm1, который содержит компонент ListBox1 и кнопку Button1.
  2. При нажатии кнопки Button1 происходит вызов процедуры TMainForm1.Button1Click(Sender: TObject).
  3. В этой процедуре создается массив b размером 3x3x3, и инициализируются его значения.
  4. Затем происходит вычисление значения переменной l, которое будет записано в элемент b[2,2,2].
  5. Далее выполняется ассемблерный код, который использует регистр eax для хранения адреса элемента b[2,2,2].
  6. Результат вычисления переменной l записывается в элемент b[2,2,2].
  7. Затем происходит заполнение ListBox1 строками, которые отображают значения переменной l и время выполнения кода.
  8. В конце выполнения процедуры TMainForm1.Button1Click(Sender: TObject) возвращается управление.

Оцени полезность:

8   голосов , оценка 3.5 из 5
Похожие ответы