Переписать из массива А в массив В, те элементы массива А, индексы которых совпадают со значениями - Assembler
Формулировка задачи:
Здравствуйте, помогите написать программу на pascale с assembler вставкой.
Задание такое: Переписать из массива А в массив В, те элементы массива А, индексы которых совпадают со значениями.
Решение задачи: «Переписать из массива А в массив В, те элементы массива А, индексы которых совпадают со значениями»
textual
Листинг программы
program Pascal;
const
N = 15;
var
A, B: array [0..N - 1] of byte;
i: integer;
LenB: integer;
begin
randomize;
Write('i: ');
for i := 0 to N - 1 do
Write(i: 3);
writeln;
{заполнение массива A случайными числами}
for i := low(A) to High(A) do
A[i] := random(High(A) + 1);
Write('A: ');
for i := low(A) to High(A) do
Write(A[i]: 3);
writeln;
{количество элементов в массиве B пока равно 0}
LenB := 0;
asm
MOV CX, N
MOV AL, 0
LEA SI, A
LEA DI, B
@@For:
CMP AL, [SI]
JNE @@Next
MOV [DI], AL
ADD DI, 1
INC LenB
@@Next:
INC AL
ADD SI, 1
LOOP @@For
end;
Write('B: ');
for i := 1 to LenB do
Write(B[i - 1]: 3);
writeln;
end.
Объяснение кода листинга программы
- Объявляются константа
Nи массивыAиBтипаbyteи переменныеiиLenBтипаinteger. - Генерируется случайное значение для каждого элемента массива
A. - Выводятся элементы массива
A. - Переменная
LenBустанавливается в 0. - В блоке ассемблерного кода происходит копирование элементов из массива
Aв массивB, при этом увеличивается значение переменнойLenB. - Выводятся элементы массива
B, содержащие скопированные значения из массиваA. Код копирует элементы из массиваAв массивB, те элементы, индексы которых совпадают со значениями.