Ассемблерная вставка в 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];