Вычислите среднее арифметическое ненулевых элементов массива - Assembler
Формулировка задачи:
Задан одномерный массив, состоящий из 10 чисел. Вычислите среднее арифметическое ненулевых элементов массива. (Нулевой элемент не должен суммироваться).
Решение задачи: «Вычислите среднее арифметическое ненулевых элементов массива»
textual
Листинг программы
.model small .data arr db 0,1,2,3,4,5,6,7,8,9 .stack 100h .code start: mov ax,@data mov ds,ax lea si,arr mov bx,0 mov cx,10 sum: lodsb cmp al,0 je skip inc bh add bl,al skip: loop sum cmp bh,0 je exit mov al,bl cbw div bh mov ah,2 mov dl,al or dl,48 int 21h exit: mov ah,4Ch mov al,00h int 21h end start
Объяснение кода листинга программы
- Установка начального значения регистрам AX и DS — они будут использоваться как индексы для обращения к элементам массива.
- Задаётся начальный адрес массива в регистре SI.
- В регистре BX устанавливается начальное значение суммы (равное нулю).
- В регистре CX задаётся количество элементов массива (в данном случае — 10).
- Создаётся цикл, который будет выполнять следующие действия:
- Загрузка байта из массива в регистр AL.
- Проверка на равенство этого байта нулю (если это так, то переход к следующей итерации цикла).
- Увеличение значения регистра BH (для корректного вычисления суммы).
- Добавление значения регистра AL к значению регистра BL (сумма элементов массива).
- После окончания цикла проверяется значение регистра BH (если равно нулю, то цикл выполнен полностью).
- Значение регистра AL приводится к типу числа с плавающей точкой и вычисляется среднее арифметическое (переменная DL используется как временная).
- Вывод результата на экран.
- Завершение работы программы.