Определить среднее значение элементов массива - Assembler (223519)

Узнай цену своей работы

Формулировка задачи:

Определить среднее значение элементов массива А(I) и В(I). Определение среднего значения оформить в виде подпрподпрограммы.I= 1,2,..,10. Только начинаю изучение assembler'a P.S. Знаю что такая тема уже была но, не разобрался в том коде.

Решение задачи: «Определить среднее значение элементов массива»

textual
Листинг программы
  1. .model small
  2. .8086
  3.  
  4. .data
  5. A db 5,8,7,2,4,3,4,1,9,8
  6. B db 7,6,3,1,3,5,9,7,4,5
  7.  
  8. .stack
  9. db 255 dup(?)
  10.  
  11. .code
  12. start:
  13. mov ax,@data
  14. mov ds,ax
  15.  
  16. lea ax,A
  17. push ax
  18.  
  19. lea bx,B
  20. push bx
  21.  
  22. call avg
  23.  
  24. mov ah,4Ch
  25. mov al,00h
  26. int 21h
  27.  
  28. avg proc
  29. push bp
  30. mov bp,sp
  31.  
  32. xor ah,ah
  33. mov di,4
  34. mov cx,2
  35. big:
  36. push cx
  37.  
  38. mov cx,10
  39. mov si,[bp+di]
  40. sum:
  41.     lodsb
  42.    
  43.     add ah,al
  44. loop sum
  45.  
  46. add di,2
  47.  
  48. pop cx
  49. loop big
  50.  
  51. pop bp
  52.  
  53. xchg ah,al
  54. mov bl,20
  55. cbw
  56. idiv bl
  57.  
  58. retn 4
  59. avg endp
  60. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы