Произведение положительных элементов в одномерном массиве - Assembler
Формулировка задачи:
Help me!
Нужно написать программу расчета произведения положительных
элементов в одномерном массиве.(ассемблер)
Решение задачи: «Произведение положительных элементов в одномерном массиве»
textual
Листинг программы
var
t, n: integer;
a: array[1..100] of integer;
i: integer;
begin
Write('enter n: ');
readln(n);
for i := 1 to n do
begin
Write('a[', i, ']=');
readln(a[i]);
end;
asm
lea si, a
mov cx, n
mov t, 1
@@For:
lodsw
or ax, ax
js @@Skip
mul t
mov t, ax
@@Skip:
loop @@For
end;
writeln(t);
end.
Объяснение кода листинга программы
- Объявление переменных:
t- целое число (integer), для сохранения результата произведения положительных элементов;n- целое число (integer), для хранения размера массива;a- одномерный массив целых чисел (array) с размером до 100 элементов;i- целое число (integer), для итерации по массиву.
- Ввод значения переменной
n:- Пользователю выводится запрос на ввод значения переменной
n; - Введенное значение сохраняется в переменной
n.
- Пользователю выводится запрос на ввод значения переменной
- Заполнение массива
a:- Цикл
forвыполняется от 1 доn; - В каждой итерации запрашивается ввод значения элемента массива
aи сохраняется в соответствующей ячейке.
- Цикл
- Вычисление произведения положительных элементов в массиве с использованием ассемблерной вставки:
- Ассемблерная вставка начинается с ключевого слова
asm; - Адрес начала массива
aзагружается в регистрsiс помощью командыlea si, a; - Размер массива сохраняется в регистр
cxс помощью командыmov cx, n; - Переменная
tинициализируется значением 1 с помощью командыmov t, 1; - Цикл
@@Forвыполняетсяnраз:- Команда
lodswзагружает слово (16 бит) из памяти по адресу, на который указывает регистрsi, в регистрax; - Проверяется знак числа (положительное или отрицательное) командой
or ax, ax; - В случае положительного числа происходит умножение содержимого регистра
axна переменнуюtкомандойmul t, результат сохраняется вax, затем значениеtобновляется значением переменнойaxс помощью командыmov t, ax; - Происходит итерация цикла с использованием команды
loop @@For.
- Команда
- Ассемблерная вставка завершается командой
end;.
- Ассемблерная вставка начинается с ключевого слова
- Вывод результата:
- Выводится значение переменной
t(результата произведения положительных элементов массива).
- Выводится значение переменной