Операции с массивами, встроенный в Borland Pascal ассемблер - Assembler

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

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

Помогите, пожалуйста перевести данную задачу на встроенный ассемблер. Даны два массива типа BYTE: один заполнен (средствами языка Паскаль) случайными числами в пределах от 1 до 10, другой заполнен нулями. Разработать про-грамму, записывающую во второй массив квадраты соответствующих чисел из пер-вого. Пример входных данных: A=(3, 1, 5, 7, 9), B=(0,0,0,0,0). Результат: B=(9, 1, 25, 49, 81). Примечание: использовать команду MUL. Сама задача на паскале выглядит примерно так:
const
  a: array [1..5]  of byte = (1,2,3,4,5);
  b: array [1..5]  of byte = (0,0,0,0,0);
var i: integer;
begin
for i:=1 to 5 do
begin
b[i]:=sqr(a[i]);
write(b[i],' ');
end;
readln;
end.
но вот как работать с двумя массивами во встроенном в TURBO PASCAL ассемблере я не знаю, помогите, кто разбирается в ассемблере, пожалуйста.

Решение задачи: «Операции с массивами, встроенный в Borland Pascal ассемблер»

textual
Листинг программы
const
  a: array [1..5]  of byte = (1,2,3,4,5);
  b: array [1..5]  of byte = (0,0,0,0,0);
var i: integer;
begin
asm
    mov cx, 5 {sizeof(a)}
    lea si, a
    lea di, b
@l: lodsb
    imul    al
    stosb
    loop    @l
    end;
for i:=1 to 5 do
write(b[i],' ');
readln;
end.

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

  1. Объявляются два массива: a и b, первый содержит числа от 1 до 5, а второй - нули.
  2. Создается переменная i типа integer.
  3. В блоке asm происходит следующая последовательность действий:
    • Переменная cx получает значение 5, что является размером массива a в байтах.
    • si указывает на первый элемент массива a, а di - на первый элемент массива b.
    • Происходит загрузка байта из массива a в al.
    • Производится умножение al на imul.
    • Записывается байт из al в массив b с помощью stosb.
    • Происходит переход к следующей итерации цикла с помощью loop @l.
  4. В блоке for происходит вывод элементов массива b на экран через пробел.
  5. Программа ожидает ввода с помощью readln.
  6. Код завершается.

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

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