Количество элементов в массиве до первого нулевого элемента (Ассемблерная вставка в коде pascal) - Assembler

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

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

Задание такое: Написать программу, вычисляющую количество элементов в массиве до первого нулевого элемента, в случае если нулевого элемента нет, должно возвращаться количество элементов в массиве. И вот именно обработку нужно сделать на ассемблере. Ниже я прикрепляю код программы, которая получилась, но где-то в ассемблерной вставке ошибка, вылетает за границы массива программка. Поможете исправить?
var
a:array [1..10]of integer;
i,k:integer;
label m,n;
begin
randomize;
 
for i:=1 to 10 do
begin
a[i]:=random(10);
write(a[i],' ');
end;
 
k:=0;
 
for i:=1 to 10 do
begin
 
asm
mov ax,k
lea ebx,a
m: mov cx,[ebx+i]
cmp cx,0
jz n
inc k
inc i
loop m
 
jmp m
n:hlt
end
 
end;
writeln(' ');
write(k);
readln;
end.

Решение задачи: «Количество элементов в массиве до первого нулевого элемента (Ассемблерная вставка в коде pascal)»

textual
Листинг программы
{$asmmode Intel}
type
integer=smallint;
var
a:array [1..10]of integer;
i,k:integer;
label m,n;
begin
randomize;
 
for i:=1 to 10 do
begin
a[i]:=random(10);
write(a[i],' ');
end;
 
k:=0;
 
asm
pushad
lea ebx,a
mov esi, 0
mov ecx, sizeof(a)/2
m:
  mov ax,[ebx+esi*2]
  cmp word ptr [ebx+esi*2],0
  jz n
  inc k
  add si,1
loop m
n:
popad
end;
writeln;
writeln(k);
//readln;
end.

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

Код выполняет следующие действия:

  1. Инициализирует переменную i значением 1, перебирает массив a до элемента с индексом 10.
  2. Заполняет массив a случайными значениями от 0 до 9.
  3. Выводит содержимое массива a на экран.
  4. Инициализирует переменную k значением 0, которая будет использоваться для подсчета количества элементов массива до первого нулевого элемента.
  5. Переходит к ассемблерному блоку кода, который выполняет следующие действия:
  6. Инициализирует регистр esi значением 0, который используется в качестве индекса для массива a.
  7. Выполняет цикл, который перебирает элементы массива a до тех пор, пока не будет найден нулевой элемент.
  8. Если текущий элемент массива равен нулю, то увеличивается значение переменной k и индекс esi увеличивается на 1.
  9. После завершения цикла, значение переменной k будет содержать количество элементов массива до первого нулевого элемента.
  10. В конце программы выводится значение переменной k на экран.

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

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