Определить среднее значение элементов массива - Assembler (223519)
Формулировка задачи:
Определить среднее значение элементов массива А(I) и В(I). Определение среднего значения оформить в виде подпрподпрограммы.I= 1,2,..,10.
Только начинаю изучение assembler'a
P.S. Знаю что такая тема уже была но, не разобрался в том коде.
Решение задачи: «Определить среднее значение элементов массива»
textual
Листинг программы
.model small .8086 .data A db 5,8,7,2,4,3,4,1,9,8 B db 7,6,3,1,3,5,9,7,4,5 .stack db 255 dup(?) .code start: mov ax,@data mov ds,ax lea ax,A push ax lea bx,B push bx call avg mov ah,4Ch mov al,00h int 21h avg proc push bp mov bp,sp xor ah,ah mov di,4 mov cx,2 big: push cx mov cx,10 mov si,[bp+di] sum: lodsb add ah,al loop sum add di,2 pop cx loop big pop bp xchg ah,al mov bl,20 cbw idiv bl retn 4 avg endp end start
Объяснение кода листинга программы
- Создание модели памяти для сегмента данных - .model small .8086
- Определение двух массивов A и B, содержащих 10 элементов каждый - .data A db 5,8,7,2,4,3,4,1,9,8 B db 7,6,3,1,3,5,9,7,4,5
- Создание стека - .stack db 255 dup(?)
- Начало выполнения программы - start:
- Переменная A содержит начальный адрес массива A, переменная B содержит начальный адрес массива B - mov ax,@data mov ds,ax lea ax,A push ax lea bx,B push bx
- Вызов процедуры avg для вычисления среднего значения элементов массива - call avg
- Возвращение в основную программу - mov ah,4Ch mov al,00h int 21h
- Выполнение процедуры avg:
- Сохранение указателя на стек в регистре bp - push bp mov bp,sp
- Инициализация регистра di для обхода массива A - mov di,4
- Переменная cx инициализируется значением 2 - mov cx,2
- Начинается цикл обработки элементов массива A - big:
- Сохранение значения cx в регистре si - push cx
- Установка значения cx равным 10 - mov cx,10
- Обход элементов массива A с помощью команды lodsb - mov si,[bp+di]
- Накопление суммы элементов массива A в регистрах ah и al - sum: lodsb add ah,al loop sum
- Увеличение значения di на 2 - add di,2
- Восстановление значения cx после цикла - pop cx
- Повторение цикла обработки элементов массива A - loop big
- Восстановление значения bp - pop bp
- Обмен значениями ah и al - xchg ah,al
- Инициализация переменной bl значением 20 - mov bl,20
- Преобразование значения bl в целое число - cbw
- Деление суммы элементов массива A на значение bl - idiv bl
- Возврат в основную программу - retn 4
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д