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