Подсчет в целочисленном массиве суммы элементов - Assembler
Формулировка задачи:
Составить программу для подсчета в целочисленном массиве суммы элементов,
предшествующих первому нулевому элементу. При отсутствии нулевых элементов выдать
соответствующее сообщение и подсчитать сумму всех элементов массива.
Решение задачи: «Подсчет в целочисленном массиве суммы элементов»
textual
Листинг программы
.model small .stack 100h .data arr db 1,2,3,4,5,0,7,8,9,10,11,12,13 len dw $-arr res_hlp1 db "No null elements! Result: $" res_hlp2 db "Exist null elements! Result: $" .code begin: mov ax, @data mov ds, ax mov es, ax lea si, arr mov cx, len xor bl, bl xor dx, dx c1: add bl, arr[si] ; bl = bl + arr[si] cmp arr[si], 0 ; сравниваем с нулем jne skip ; arr[si] != 0 -> skip jmp stop ; arr[si] == 0 -> stop skip: inc si ; si = si + 1 loop c1 ; цикл stop: cmp cx, 0 ; сравниваем СХ с нулем jne msg2 ; если не равно - значит есть нулевые элементы (т.к. цикл прерван был раньше времени) lea dx, res_hlp1 jmp ex msg2: lea dx, res_hlp2 ex: mov ah, 9 ; выводим сообщение int 21h mov al, bl ; тут выводим сумму элементов (единственный момент - корректно выводит числа от 0 до 99). Если нужно трёхзначное - напишите. aam or ax, 3030h mov dl, ah mov dh, al mov ah, 2 int 21h mov dl, dh int 21h mov ax, 4c00h int 21h ends end begin
Объяснение кода листинга программы
- Объявляется сегмент данных и стека с размером 100h.
- В секции данных определяются:
- Переменная
arr
типа байт, содержащая элементы массива. - Переменная
len
типа слово, содержащая размер массива. - Переменная
res_hlp1
типа байт, содержащая сообщение о том, что нет нулевых элементов. - Переменная
res_hlp2
типа байт, содержащая сообщение о том, что есть нулевые элементы.
- Переменная
- В секции кода начинается выполнение программы:
- Инициализируются регистры данных
ax
иds
для работы с данными. - Адрес массива
arr
загружается в регистрsi
. - Количество элементов массива
len
загружается в регистрcx
. - Регистры
bl
иdx
обнуляются.
- Инициализируются регистры данных
- Начинается цикл
c1
:- К текущему значению
bl
прибавляется значение элемента массива, расположенного по адресу вsi
. - Значение элемента массива сравнивается с нулем.
- Если элемент не равен нулю, происходит переход к следующей операции.
- Если элемент равен нулю, происходит переход к метке
stop
.
- К текущему значению
- Метка
stop
:- Проверяется условие завершения цикла.
- В зависимости от результата выводится соответствующее сообщение (
res_hlp1
илиres_hlp2
).
- Происходит вывод результата (суммы элементов) в виде числа.
- Программа завершается вызовом программы завершения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д