Архитектура ЭВМ. Подпрограммы и стек. Даны три массива чисел - Assembler

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

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

Архитектура ЭВМ. Подпрограммы и стек. Даны три массива чисел. Требуется вычислить среднее арифметическое их отношения сумм четных и нечетных элементов

Решение задачи: «Архитектура ЭВМ. Подпрограммы и стек. Даны три массива чисел»

textual
Листинг программы
  1. LOCALS
  2.  
  3. .model small
  4.  
  5. .stack 100h
  6.  
  7. .data
  8.         A       dw      1, 3, 5, 7 , 8, 10
  9.         LenA    dw      ($-A)/2
  10.         B       dw      16, 30, 55, 7 , 8, 10, 17, 22, 70
  11.         LenB    dw      ($-A)/2
  12.         C       dw      15, 23, 52, 17 , 81, 10
  13.         LenC    dw      ($-A)/2
  14.  
  15.         Result  dw      ?
  16.  
  17. .code
  18.  
  19. main    proc
  20.         mov     ax,     @data
  21.         mov     ds,     ax
  22.  
  23.         mov     bx,     0       ;сумма отношений
  24.  
  25.         lea     si,     A
  26.         mov     cx,     LenA
  27.         call    Ratio
  28.  
  29.         add     bx,     ax
  30.  
  31.         lea     si,     B
  32.         mov     cx,     LenB
  33.         call    Ratio
  34.  
  35.         add     bx,     ax
  36.  
  37.         lea     si,     C
  38.         mov     cx,     LenC
  39.         call    Ratio
  40.  
  41.         add     bx,     ax
  42.  
  43.         ;вычисление среднего арифметического отношений
  44.         mov     ax,     bx
  45.         mov     dx,     0
  46.         mov     bx,     3
  47.         div     bx
  48.         ;сохранение результата
  49.         mov     Result, ax
  50.  
  51.         mov     ax,     4C00h
  52.         int     21h
  53. main    endp
  54.  
  55. Ratio   proc
  56.         push    bx
  57.         push    cx
  58.         push    dx
  59.         push    si
  60.  
  61.         ;вычисление сумм чётных и нечётных элементов массива
  62.         mov     bx,     0       ;сумма чётных элементов
  63.         mov     dx,     0       ;сумма нечётных элементов
  64. @@For:
  65.         lodsw
  66.         test    ax,     1
  67.         jnz     @@Odd
  68.         add     bx,     ax
  69.         jmp     @@Next
  70. @@Odd:
  71.         add     dx,     ax
  72. @@Next:
  73.         add     si,     2
  74.         loop    @@For
  75.         ;вычисление отношения
  76.         mov     ax,     bx
  77.         mov     bx,     dx
  78.         mov     dx,     0
  79.         div     bx
  80.  
  81.         pop     si
  82.         pop     dx
  83.         pop     cx
  84.         pop     bx
  85.         ret
  86. Ratio   endp
  87.  
  88. end     main

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

  1. Задание локальных переменных: LOCALS
  2. Определение модели памяти: .model small
  3. Определение размера стека: .stack 100h
  4. Определение массивов A, B, C и их длин (LenA, LenB, LenC)
  5. Объявление переменной Result
  6. Начало кода исполняемой программы: main proc
  7. Загрузка базового адреса сегмента данных в регистр ax и затем в регистр ds
  8. Инициализация регистра bx (переменной для суммы отношений)
  9. Вызов подпрограммы Ratio для массива A и добавление результата к переменной bx
  10. Вызов подпрограммы Ratio для массива B и добавление результата к переменной bx
  11. Вызов подпрограммы Ratio для массива C и добавление результата к переменной bx
  12. Вычисление среднего арифметического отношений и сохранение результата в переменной Result
  13. Завершение программы и освобождение памяти Подпрограмма Ratio:
  14. Сохранение регистров bx, cx, dx, si на стеке
  15. Вычисление суммы четных и нечетных элементов массива
  16. Вычисление отношения суммы четных элементов к нечетным
  17. Восстановление регистров и возврат из подпрограммы Замечание: В строках, где используется команда рет означает, что происходит возврат из подпрограммы и восстановление значений регистров.

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


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

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

10   голосов , оценка 4.1 из 5

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

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

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