Определить среднее значение элементов массива - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д