Определить среднее значение элементов массива - 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

Объяснение кода листинга программы

  1. Создание модели памяти для сегмента данных - .model small .8086
  2. Определение двух массивов 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
  3. Создание стека - .stack db 255 dup(?)
  4. Начало выполнения программы - start:
  5. Переменная A содержит начальный адрес массива A, переменная B содержит начальный адрес массива B - mov ax,@data mov ds,ax lea ax,A push ax lea bx,B push bx
  6. Вызов процедуры avg для вычисления среднего значения элементов массива - call avg
  7. Возвращение в основную программу - mov ah,4Ch mov al,00h int 21h
  8. Выполнение процедуры avg:
  9. Сохранение указателя на стек в регистре bp - push bp mov bp,sp
  10. Инициализация регистра di для обхода массива A - mov di,4
  11. Переменная cx инициализируется значением 2 - mov cx,2
  12. Начинается цикл обработки элементов массива A - big:
  13. Сохранение значения cx в регистре si - push cx
  14. Установка значения cx равным 10 - mov cx,10
  15. Обход элементов массива A с помощью команды lodsb - mov si,[bp+di]
  16. Накопление суммы элементов массива A в регистрах ah и al - sum: lodsb add ah,al loop sum
  17. Увеличение значения di на 2 - add di,2
  18. Восстановление значения cx после цикла - pop cx
  19. Повторение цикла обработки элементов массива A - loop big
  20. Восстановление значения bp - pop bp
  21. Обмен значениями ah и al - xchg ah,al
  22. Инициализация переменной bl значением 20 - mov bl,20
  23. Преобразование значения bl в целое число - cbw
  24. Деление суммы элементов массива A на значение bl - idiv bl
  25. Возврат в основную программу - retn 4

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.091 из 5
Похожие ответы