Внесение в память содержимого edx (Delphi + Assembler)

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

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

Здравствуйте. Не могу внести в память содержание edx . Заранее благодарю.
unit Assembler;

interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
 
 var
  a: integer;
  x,y: smallint;
begin
 
 x:=6;
 y:=10;
  asm
  
  mov eax,0
  mov ebx,0
  mov ecx,4
 
  mov dx,y//Г‡Г*Г*îñèì Гў ìëГ*äøåå ñëîâî ГЄГ*ðäèГ*Г*ГІГі ГЇГ® Y.
  shl edx,16// ÏåðåГ*îñèì ìëГ*äøåå ñëîâî, ГЄГ*ðäèГ*Г*ГІГ» Y Гў Г±ГІГ*ðøåå ñëîâî.
  mov dx,x //Г‡Г*Г*îñèì Гў ìëГ*äøåå ñëîâî ГЄГ*ðäèГ*Г*ГІГ» ГЇГ® X.
  mov a,edx
  lea eax,a
  mov  [eax+4*ecx],edx // ÏåðåГ*îñèì Гў ГЇГ*ìÿòü, ðåãèñòîð edx  Г± ГЄГ*ðäèГ*Г*òîìè òî÷êè.
  mov ebx,[eax+4*ecx]
  mov a,ebx
 
  end;
  ListBox1.Items.Add(IntToStr(a)+' S Ñîäåðæèìîå ÿ÷åéêè ');

end;
 
end.

Решение задачи: «Внесение в память содержимого edx (Delphi + Assembler)»

textual
Листинг программы
procedure UseAsm;
var a: integer;
    x,y: smallint;
begin
  x:=6;
  y:=10;
  WriteLn(y shl 16+x);
  asm
  mov eax,0
  mov ebx,0
  mov ecx,4
  mov dx,y
  shl edx,16
  mov dx,x
  mov a,edx
  //для чего все остальное черт его знает
  lea eax,a
  mov [eax+4*ecx],edx
  mov ebx,[eax+4*ecx]
  mov a,ebx
  end;
  WriteLn(a);
end;

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

  1. Объявлены переменные: a (индекс 1), x (индекс 2), y (индекс 3).
  2. Задаются значения переменным x и y (индексы 2 и 3).
  3. Выполняется операция записи в файл (индекс 4) содержимого переменной y, смешанного с основанием 16 переменной x.
  4. Начинается ассемблерный блок (индекс 5).
  5. Переменным eax, ebx и ecx присваивается значение 0 (индексы 6, 7 и 8).
  6. Переменная dx получает значение переменной y (индекс 9).
  7. Переменная edx сдвигается влево на 16 позиций (индекс 10).
  8. Переменная dx получает значение переменной x (индекс 11).
  9. Переменная a получает значение переменной edx (индекс 12).
  10. Переменная eax задается значением переменной a (индекс 13).
  11. В память по адресу, рассчитанному как 4-кратное значение переменной ecx, записывается значение переменной edx (индекс 14).
  12. Переменная ebx получает значение из памяти по адресу, рассчитанному как 4-кратное значение переменной ecx (индекс 15).
  13. Переменная a получает значение переменной ebx (индекс 16).
  14. Завершается ассемблерный блок (индекс 17).
  15. Выполняется операция записи в файл (индекс 18) значения переменной a.
  16. Завершается процедура (индекс 19).

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

11   голосов , оценка 3.727 из 5