Ассемблерная вставка в Delphi

Задание состоит в замене всех отрицательных элементов в массиве нулями, вывести массив,а также количество таких замен, использовать ассемблерную вставку. Проблема состоит в том, что элементы в массиве не заменяются на 0, может неверно передается ссылка на массив? С другой стороны количество замен выводит верно. Delphi 10 Embarcadero.

program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

type
  TMas = array [1 .. 5] of integer;

Var
  Mas: TMas = (1, -2, -3, -4, -5);
  i, k, count: integer;

begin
  k := 0;
  count := 0;
  for i := 1 to 5 do
  begin
    asm
      mov eax,k
      lea ebx,[Mas+eax];

    @apelsin:
      cmp [ebx],0
      jg @afterzamena

      mov [ebx],0
      add count,1
    @afterzamena:

    end;
    k:=k+1
  end;
  writeln(count);
  writeln('Массив:');
  for i := 1 to 5 do
  begin
    Write(Mas[i], '');
  end;

  readln;

end.

Ответы (1 шт):

Автор решения: zed

Вы неправильно вычисляете адрес элемента массива.

Нужно учитывать, что Integer в памяти занимает не 1 байт, а 4: lea ebx,[Mas+eax*4];

→ Ссылка