Найти сумму всех элементов - Assembler
Формулировка задачи:
Здравствуйте,помогите разобраться, пожалуйста. Дана задача: с помощью ассемблерных вставок найти сумму всех элементов массива, не превышающих заданного числа. Вот код программы:
Данная программа в результате выводит всю сумму элементов, а не сумму меньшую заданному числу. В чем ошибка?
Решение задачи: «Найти сумму всех элементов»
textual
Листинг программы
uses crt;
var i,n,sum, elem,c:integer;
var a: array[1..100] of word;
begin
write('Vvedite kolichestvo elementov mas.: ');
readln(n);
sum:=0;
i:=1;
while i <= n do begin
write('a[',i,'] = ');
readln(a[i]);
i:=i+1;
end;
write('Vvedite chislo: ');
readln(c);
i:=0;
while i<=n do begin
i:=i+1;
elem:=a[i];
asm
mov dx,c
mov ax,elem
cmp dx,ax
ja @cont1 ;перейти если с > elem
add sum,ax ;иначе добавить к сумме
@cont1:
end;
end;
write('Summa = ', sum);
readln
end.
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Ввод количества элементов массива.
- Инициализация переменной
sumравной 0. - Создание цикла, который будет выполняться столько раз, сколько введено элементов массива.
- В каждой итерации цикла происходит вывод номера текущего элемента массива и его значения, а затем чтение значения для переменной
c. - Если значение
cбольше текущего элемента массива, то происходит переход к следующей итерации цикла. - В противном случае, значение текущего элемента массива добавляется к переменной
sum. - После окончания цикла выводится сообщение с итоговой суммой.